<feed xmlns='http://www.w3.org/2005/Atom'>
<title>pardes.git/src/mouse.zig, branch main</title>
<subtitle>Pardes</subtitle>
<id>https://git.0x4200.cafe/pardes.git/atom?h=main</id>
<link rel='self' href='https://git.0x4200.cafe/pardes.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/'/>
<updated>2026-10-01T21:08:12Z</updated>
<entry>
<title>Enter and Tab on a tag word tell an event reader as a click on it does, at its place in the tag; only a look takes a diff line's address, an exec there takes the word (follows vpmzwuzk)</title>
<updated>2026-10-01T21:08:12Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-10-01T20:50:26Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=9dba9742f4f2071fd85c67c3a7fe311b7f37617c'/>
<id>urn:sha1:9dba9742f4f2071fd85c67c3a7fe311b7f37617c</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>One Look path: Enter, Tab and a bare Look take what a click at the cursor takes, a diff line's address included, and an event reader is told of them as of a click</title>
<updated>2026-10-01T20:30:33Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-10-01T20:25:24Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=1a33ed7221733b181726c7ad01e4ce190bcf1d05'/>
<id>urn:sha1:1a33ed7221733b181726c7ad01e4ce190bcf1d05</id>
<content type='text'>
The keyboard expanded the cursor's word on its own (look.expandedSel), so
a diff line's address (and a hunk line's code word, without its +/-) was
the mouse's alone: Enter on `+line` looked for the text in the diff. Now
exec.operandAt is the one expansion: pointerOperand is it with a gesture's
selection borrowed, the Enter/Tab path and a bare Look (exec.currentOperand)
are it from the cursor, and both dispatch through mouse.dispatchPointerBuiltin,
so a pane with an event reader hears a key's look or exec as a click's.
A test runs one diff line and one file:12:5: line through a B3 click, a B3
sweep, Enter, a bare Look, the look file and an event write-back, and asserts
each lands in the same file, line and column.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Alt/Option-click is B2 and Super/Cmd-click is B3, sweeps included, as in plan9port: a one-button trackpad can execute and look</title>
<updated>2026-10-01T15:58:23Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-10-01T15:44:06Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=8eeab5df9c09caafc07c93c2fc3baf6e6700afed'/>
<id>urn:sha1:8eeab5df9c09caafc07c93c2fc3baf6e6700afed</id>
<content type='text'>
The core decides it at the press (mouse.emulateButton) and keeps it to the
release, whatever keys are let go between. Ctrl-click stays a definition,
and a program tracking the mouse still gets the plain click (Alt as its
meta, Super as nothing). The SDL, macOS and web shells now pass Super; the
macOS and web shells pass Alt on a click too. A terminal's mouse report has
no Super bit, so in a terminal only Alt-click is B2.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Over a program that tracks the mouse, B2 and B3 are pardes's execute and look, as in any pane, and Shift sends them to the program as its buttons 2 and 3; B1 and the wheel stay the program's, Shift keeping them pardes's</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-30T21:39:53Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=f99806de546c837ab6f2d5b1e3e8accc95e63a7e'/>
<id>urn:sha1:f99806de546c837ab6f2d5b1e3e8accc95e63a7e</id>
<content type='text'>
The Shift that sends B2 or B3 is left out of their reports and of the
drags they hold: it only chose the target. A B2 or B3 sweep of pardes's
moves nothing to the program under 1003.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>A program that tracks the mouse gets its clicks, drags and moves over its grid, in the format it chose; Shift keeps pardes's select, execute and look, and chrome is never the program's</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-30T17:12:51Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=b546b578baadbd8fdd15b42988ad4d66c9c8ff21'/>
<id>urn:sha1:b546b578baadbd8fdd15b42988ad4d66c9c8ff21</id>
<content type='text'>
Presses and releases under 1000, drags with a button down under 1002,
every move once per cell under 1003, X10 presses under 9, in raw terminal
input only. A press the program took keeps its drag and release, reported
clamped to the grid's edge wherever the pointer goes. The press also makes
the pane the active one. docs/tags.md says so.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>A mouse event carries Shift and Alt as well as Ctrl, from SDL and from the tty's input; a program's wheel report carries them as xterm counts them, and Shift keeps the wheel pardes's own scroll</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-30T17:06:31Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=3f6733c805d873a7af6a6064ace0cf5916f481da'/>
<id>urn:sha1:3f6733c805d873a7af6a6064ace0cf5916f481da</id>
<content type='text'>
The reports are ghostty's encoder now (shift+4, meta+8, ctrl+16), with the
mode and format ghostty tracks. The detached wire carries the two new
bits: version 9. The test shell's ESC]777;mouse takes an optional fifth
field of modifiers.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>A wheel over a terminal whose program owns it goes to the program: its mouse report when it tracks the mouse, arrow keys on the alternate screen with alternate scroll, so codex, htop and less scroll</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-30T16:49:09Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=387d6a39bad76c5eb2f56328f7cf7869a9a10559'/>
<id>urn:sha1:387d6a39bad76c5eb2f56328f7cf7869a9a10559</id>
<content type='text'>
codex 0.158 moved its chat onto the alternate screen with any-event SGR
mouse tracking (1049, 1000/1002/1003/1006, 1007 off); its sign-in screen
keeps 1007 on with tracking off. pardes never forwarded a wheel to a
program, only scrolled ghostty's scrollback, which the alternate screen
does not have, so the wheel did nothing there. A shell on the main screen
still scrolls its scrollback as before.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>A middle or right sweep over a column's or the workspace's tag runs or looks for what it swept, as a pane tag's does</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-30T01:21:56Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=dfa5bd4d413504a6afff414962c4de70ab093af0'/>
<id>urn:sha1:dfa5bd4d413504a6afff414962c4de70ab093af0</id>
<content type='text'>
Both headers acted on the press: a middle or right press ran, or looked
for, the word under it (or the header's selection when it was on that) at
once, so a drag had nothing left to do. A sweep of `echo SWEPT` in a column
tag ran a bare `echo`. They have done so since the headers were drawn apart
from the panes; it is no regression, and the -l/Restore allocator fix
(ompukopz) does not touch it.

Now a press on a header holds a HeaderSweep (the column by its serial, or
the workspace), which the drag extends, held to the header's row and text
as a pane tag's sweep is. It is painted in its button's tint meanwhile, and
the release runs what it swept in that header's context; a release that has
not moved runs the word or selection a click always did. The other of
middle and right cancels it (acme 2-3/3-2); the select button is inert, as
a header's command already takes the held selection as its argument.

Running on the release, a builtin from a header is announced as one from a
pane tag is: the press used to set the announcement and the release clear it
at once. find, restore, theme, topbarexec, ttyhelp, tutor and windowops
re-recorded for that badge alone.

headersweep.snap sweeps the column and workspace tags with the middle
button and a word part with the right one, and cancels a sweep;
headersweep-restored.snap sweeps both after Dump and Restore.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Terminal.zig is terminal.zig: a file of functions and no fields takes a namespace's lowercase name</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-29T23:56:14Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=04b047fb366ea2c595708fb62467f690fce4b9ec'/>
<id>urn:sha1:04b047fb366ea2c595708fb62467f690fce4b9ec</id>
<content type='text'>
The last of the deferred renames, now that the tty and theme agents have landed: panes.terminal at its importers, the alias lines in Text.zig and File.zig and panes.zig's own uses following. dump.zig's Terminal struct, a dump record, is not this. The served sources list and docs/design.typ name the new file. test/perf.zig's references change, so the three perf baselines take its new harness id with their numbers as recorded. No behaviour changes.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>tag_layer.zig folds into Layer.zig, whose TagHit its two functions work on</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-29T23:26:51Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=ab0bd455004c0b7374a6183d45e42b85877f370e'/>
<id>urn:sha1:ab0bd455004c0b7374a6183d45e42b85877f370e</id>
<content type='text'>
Two functions (sameCell, columnAt) on Layer.TagHit, 32 lines with their imports, used by edit.zig, mouse.zig and look.zig: they sit with the type now, called Layer.sameCell and Layer.columnAt. docs/design.typ names Layer.zig in its place. No behaviour changes.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
