diff options
| author | Gabriel Schneider <[email protected]> | 2026-10-01 20:47:13 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-10-01 20:50:11 -0300 |
| commit | 4bdeee602d1e642582ce91fdbd0da210797894e9 (patch) | |
| tree | 0fda809a61bdd8271a2c90b9632fb25de3122e72 /src/ninep | |
| parent | e1550ca15093e8190c3bf9a9809e0c78b7541ac9 (diff) | |
| download | pardes-4bdeee602d1e642582ce91fdbd0da210797894e9.tar.gz pardes-4bdeee602d1e642582ce91fdbd0da210797894e9.zip | |
An exec written back to event on a diff line (MX0 0) takes the word there, a header's, a hunk header's or the marker's, never the address; only a look takes it
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'src/ninep')
| -rw-r--r-- | src/ninep/events.zig | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/ninep/events.zig b/src/ninep/events.zig index 5b2a763e..3910ac05 100644 --- a/src/ninep/events.zig +++ b/src/ninep/events.zig @@ -728,11 +728,13 @@ fn scanNumber(data: []const u8, i: *usize, overflow: *bool) ?u32 { /// An empty range written back: what a click at `at` takes, as the mouse's /// does (exec.pointerOperand). In a diff pane's body that is look.diffClick's /// answer, the line's address or its code's words. -pub fn expandAt(p: *Pardes, pane: *Pane, whole: []const u8, at: usize, in_body: bool) []const u8 { +/// `for_look`: only a look in a body takes a diff line's address +/// (exec.operandAt); an exec takes the word there, as anywhere. +pub fn expandAt(p: *Pardes, pane: *Pane, whole: []const u8, at: usize, in_body: bool, for_look: bool) []const u8 { const start = if (std.mem.lastIndexOfScalar(u8, whole[0..at], '\n')) |nl| nl + 1 else 0; const end = std.mem.indexOfScalarPos(u8, whole, at, '\n') orelse whole.len; var word_from: usize = 0; - if (in_body) diff: { + if (in_body and for_look) diff: { const row = std.mem.count(u8, whole[0..start], "\n"); // Only when the served line is the one the diff reads there. const lines = look.diffLines(p, pane) orelse break :diff; @@ -794,7 +796,7 @@ pub fn writeEvent(p: *Pardes, asked: Req, id: usize) Reply { // An empty range with no text is a click at that point: expanded as // the click would be, to the word or file name under it (acme's // expand, look.c). - const said = if (r.q0 == r.q1) r.text orelse expandAt(p, pane, whole, lo, !r.action.onTag()) else whole[lo..hi]; + const said = if (r.q0 == r.q1) r.text orelse expandAt(p, pane, whole, lo, !r.action.onTag(), r.action == .body_look or r.action == .tag_look) else whole[lo..hi]; const text = p.scratch.allocator().dupe(u8, said) catch continue; switch (r.action) { // A body's click written back is done as the click would have |
