summaryrefslogtreecommitdiff
path: root/src/look.zig
Commit message (Collapse)AuthorAge
* n in a command pane walks its own file:line places first, whichever pane was ↵Gabriel Schneider5 hours
| | | | | | walked last: make's errors, then on through the other places as before Co-Authored-By: Claude Opus 5.5 <[email protected]>
* An exec written back to event on a diff line (MX0 0) takes the word there, a ↵Gabriel Schneider8 hours
| | | | | | 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]>
* Incl dir ... adds directories a look at a name found nowhere else is tried ↵Gabriel Schneider9 hours
| | | | | | in, as acme's includename, <stdio.h> too; bare Incl lists them and Incl - empties them; the session's, seeded with /usr/include and /usr/local/include, kept in a dump; Indent's refusal says Enter keeps the indent always Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Enter and Tab on a tag word tell an event reader as a click on it does, at ↵Gabriel Schneider11 hours
| | | | | | its place in the tag; only a look takes a diff line's address, an exec there takes the word (follows vpmzwuzk) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A look at a directory opens a pane listing it, as acme's directory window: ↵Gabriel Schneider11 hours
| | | | | | named dir/, its entries in acme's columns (bytewise, dotfiles kept, a directory's marked /), a look at an entry from there, Get or a look again reads it again, never dirty, Save refused; DirLook terminal keeps ls in a terminal Co-Authored-By: Claude Opus 5.5 <[email protected]>
* One Look path: Enter, Tab and a bare Look take what a click at the cursor ↵Gabriel Schneider11 hours
| | | | | | | | | | | | | | | | | takes, a diff line's address included, and an event reader is told of them as of a click 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 <[email protected]>
* A look at a path not there under a peer's mount is a miss, the write ↵Gabriel Schneider18 hours
| | | | | | | | | answered, as any path to no file is It failed the write with the peer's "file does not exist". A file not found, here or through a mount, is now said and logged as a miss. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A look of `./x` that is not there is a miss, as `x` and `/abs/x` are: the ↵Gabriel Schneider20 hours
| | | | | | | | | | | write answered, the err logged, not ENOENT `./x` and `../x` failed their write with ENOENT while every other name that opens nothing was a miss the write was still answered with. They are misses now too, said and logged `look: ./x: no such file`. A pane's own directory gone stays a failure. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A PDF place `:P:H` whose search hit H is not on page P, or with no search, ↵Gabriel Schneider20 hours
| | | | | | | | | | | | | is a miss with an err, as a page past the last is The second number of a PDF place is a hit of the pane's search (its search rows are `file.pdf:P:H`), and one that named no hit turned to page P silently. pdf State.hitExists asks the pane's search for page P: a hit it does not have, or any hit with no search, is now `<file> has no search hit H on page P`, on the pane itself (`:P:H`) and from anywhere (`file.pdf:P:H`); a search row's hit is always there. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Grep and Find say when a cap hid what they might have found: `cut at 512 ↵Gabriel Schneider20 hours
| | | | | | | | | | | | | | | | hits`, `N files read only in part (first 256 KiB)`, `walk cut at N entries`; one that finds nothing leaves the +Search as it was Grep reads 256 KiB of a file and stops at 512 hits, and its walk at 20000 files or 100000 entries; Find stops at 512 names. A cap hit was silent, so a match past one read as `pattern not found`. The walk now notes each cap it hit (fs.WalkNotes) and the +Search says it in a line under the hits, as it says directories skipped; a search that found nothing but hit a cap opens the +Search with those lines, not a miss. A Find or Grep that finds nothing and passed nothing over leaves the directory's +Search with the last search's rows, its failure saying so, where it used to empty it. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* `@pN:` looks at pane N, its trailing colon dropped as any look's is, and a ↵Gabriel Schneider22 hours
| | | | | | | | | | | line past the end is said one way: `<file>:N has no line N`, for `:N` as for `file:N` lookAt dropped a trailing `:` from what it read but resolved the target from the text as written, so `@p33:` was `no match for "@p33:"`. And `:99999` said `address out of range` while `file:99999` said `has no line 99999`: a bare line number past the end now says the latter too. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* `:N:H` looked at on a PDF pane turns to page N, as `book.pdf:N:H` does from ↵Gabriel Schneider22 hours
| | | | | | | | | | anywhere, not a refusal that a PDF has no text A PDF's own pane took only `:N`; `:5:3` was refused as no text to address while `book.pdf:5:3` turned to page 5 (its search hit 3). lookPdfPage now reads the page before a colon and the hit after it. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Grep and Find pass over a directory they may not open and keep every other ↵Gabriel Schneider22 hours
| | | | | | | | | | | | hit, saying in one line how many they skipped One `chmod 000` directory anywhere under a pane made every Grep say `pattern not found` and every Find `access denied`: the walk's `try w.enter`/`try w.next` ended it at the first refusal. Each is now counted and passed over, and the +Search ends `N directories skipped: permission denied` under the hits. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A look line's trailing colon is dropped, as a click leaves it off, and a ↵Gabriel Schneider26 hours
| | | | | | | | | | | | look whose address fails never leaves the file it opened `a.txt:2:3:`, as a compiler prints a place, failed as bad address syntax, and still opened a.txt: the file was opened to read the address in, and stayed when the address failed. The trailing colon is now no part of the place, and a pane opened only to evaluate an address that fails goes again, the miss said from the pane looked from. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A bare :N or :N:M look addresses the pane itself, its line N (column M), ↵Gabriel Schneider27 hours
| | | | | | | | | | | | | from every way a look comes; a PDF's :0 has no page 0 A look of `:12` had no path to resolve, so it fell through to a word search for the text ":12" and found nothing. A digit-led address with no path now names the looking pane, as `:/re/` already did: its look, the root's (the keyboard's pane), Look, B3 and an event write-back all reach it, a terminal's logical lines included. On a PDF, :0 is the has-no-page miss rather than a refusal. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A look at a file it may not read says which: "look: <path>: permission denied"Gabriel Schneider29 hours
| | | | | | | | | The refusal said "look: permission denied", leaving the script to guess which of the paths it looked at was locked. A file or image that will not open is now named in the failure, its path cut in the middle when long. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A look at file:0:0 is refused, as a zero column after any other line isGabriel Schneider29 hours
| | | | | | | | | The zero-column check ran only after a nonzero line, so file:0:0 went on as an address and failed some other way, or not at all. The check now reads the look's whole tail first, line 0 included, and refuses a zero column in addr's words. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* One diff-aware expansion for a click, a 9P whole-line look and an empty ↵Gabriel Schneider29 hours
| | | | | | | | | | | | | | | event write-back; a blank context line resolves to its path:line The mouse expanded a diff line by its kind (a header or a hunk line's prefix to the line's address, a hunk line's code to words), but an empty look written back to event used the plain word expansion, so ML on a `+` took nothing, and a 9P look of a blank context line (` `) was refused as whitespace. look.diffClick is now the one answer: the mouse, the whole-line look and the event write-back all ask it, and a blank context line is a line like any other. A test asks all three on each kind of line. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* :N on a PDF turns to page N, from the pane and from the root's look; @pN:N ↵Gabriel Schneider29 hours
| | | | | | | | | | | | | | answers ok with no err; an address in a pane with no text names the pane A PDF pane took :N as a word to search for, and @p<pdf>:N failed as "is no text to address" after the page had nothing to do with it, an err in the log for a look that meant something. A PDF's address is now its page: :N turns to it, one past the last is the has-no-page miss, and a byte offset or a pattern is refused saying a PDF's address is a page. The refusal for any other textless pane named an empty path when the look was a bare :addr; it names the image or @p<serial> now. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A diff line looks up the path and line it names, as any look doesGabriel Schneider29 hours
| | | | | | | | | | | | | | | | | | | | | | | | The look on a diff line was its own resolver: a walk up to .git/.jj from the diff's directory, its own "no such file here" and "deleted by this diff". A review tool's cached patch, in no repository, missed every file though the session's terminals sat in the checkout. Now a diff line only expands and transforms. Its expansion (what the hover shows) is the whole line for a header, a `@@` line, or a hunk line pointed at on its prefix, and its text is the look address the line names (look.diffAddress): `path` for `diff --git`/`---`/`+++`, `path:c` for `@@ -a,b +c,d @@`, `path:N` for a hunk line's new line (a removed line's, the new line now where it was). That text goes through the regular look exactly as if selected by hand: same resolution, placement and errors. A 9P look of a whole diff line takes the same transform. Kept: the line classification, hunk arithmetic, git prefix stripping and timestamp cutting (diff.zig). Gone: the repo-root walk, its messages, Target.old_side and deletesAhead, and the click's row stash (Pardes.diff_look). A test compares a B3 on a cached patch's line with a look of the hand-selected `entry/src/entry.rs:2` in the same session. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Recent and /recent keep PDFs and images as they keep files, and an open ↵Gabriel Schneider29 hours
| | | | | | | | | | | | file's row is where its dot is now Only text files were recorded, so a PDF read yesterday was not there to find again, and an open file's row showed the place it last closed at, stale by however far it had moved since. A PDF is kept at its page and reopened there from its row; an image by its path; an open one's row reads its pane's place at the time of the listing. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A look at a PDF's page past its last is a miss, "has no page N", never the ↵Gabriel Schneider29 hours
| | | | | | | | | | | | last page in its place manual.pdf:999 on a twelve-page PDF showed page 12 and said nothing, so a stale or mistyped page number looked like a place found. It is now the miss a line past a file's end is, whether the PDF is open (it stays on its page) or not (nothing opens). A restore or a start-up page past the end still lands on the last. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A look's miss cuts a long path in its middle with the Rerror cutter, keeping ↵Gabriel Schneider29 hours
| | | | | | | | | | | | the file's name, never mid-word at 64 bytes "is no text to address" cut the path at 64 bytes, often mid-word and losing the file's name, and the other misses cut theirs at 256 from the end, losing it too. Every miss now goes through fitErr, the cutter an Rerror uses, which gives up the middle of the longest path so the start and the name at the end both stay. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A diff look names a file as the repository does: git's side prefix dropped ↵Gabriel Schneider29 hours
| | | | | | | | | | | | | | | | | | by git's rules, a plain diff's names as written In a git section (one with a `diff --git` line) the one-letter side prefix git writes, `a/`/`b/` or with diff.mnemonicPrefix `c/`, `i/`, `w/`, `o/`, is dropped from its paths only when both paths of that line carry one, different ones: `--no-prefix` writes none, so its `a/x a/x` is a real directory `a` and is kept. A plain `diff -u` never strips: its names are used as written, past the timestamp. `/dev/null` stays itself. The walker does this once (diff.Walk.side, diff.gitHeader), so the path a look resolves, and the one a miss says, are the repository's name: `Look: src/x.zig: no such file here`, `Look: lib/old.zig: deleted by this diff`. The look no longer tries a stripped name beside the written one. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A terminal's word looks refill the directory's one +Search, as +Lsp is ↵Gabriel Schneider29 hours
| | | | | | | | | | | | | | shared, rather than stacking one per word Each word looked for in a terminal (clicked, or written to look), where no file of that name was, opened another +Search in the same directory, one per word, until the column filled. Such a search now refills the directory's +Search, as the file searches and the +Lsp answers already share theirs. A `/` search keeps a +Search per pattern, which n and N walk across (psearch.snap), so the sharing is marked on the word look alone (Pardes.word_look). Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A 9P look keeps its leading blanks: an indented line, or blanks alone, is ↵Gabriel Schneider29 hours
| | | | | | | | | | | | | | | | looked for as written Every line written to look or exec went through Messages.next, which trimmed blanks from both ends. A look of ` indented` then found the first bare `indented`, and a diff's blank context line ` ` looked at nothing. A look's line is now its text: only its `\r` and newline go. lookAt keeps the blanks for the word search too; it expands `~` only for a look that starts with one, and the path, address and command readings trim for themselves as before. runSearch keeps a pattern's blanks, since a builtin's argument comes trimmed already. An exec line is trimmed as before. fs.md says so. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A right click on a diff line opens the place it names: its file, the hunk's ↵Gabriel Schneider29 hours
| | | | | | | | | | | | | | | | | | | | | | | new line, the line itself In a diff pane (a .diff/.patch file, or a command pane's diff output), the look's own expansion, which its hover shows, takes a whole line for a `diff --git`, `---`, `+++` or `@@` line wherever the pointer is on it, markers included, and for a hunk line when the pointer is on its `+`, `-` or space. Then the look opens the file (a/ b/ dropped, timestamps cut) at the line from the hunk header and the lines above it: `@@` the hunk's first new line, context and added lines their own, a removed line the new line now where it was. `diff --git` and `+++` open the new file; `---` the old one, unless the `+++` under it names another. On a hunk line's code the expansion is its words, the prefix never one of them, and looks as ever. Other panes are untouched. Paths resolve in the repository (walking up to `.git` or `.jj` from the diff's directory, or a command pane's), then that directory. A file not here opens nothing and says `Look: b/x: no such file here`, or `deleted by this diff`. A 9P look writing a whole line of the diff does the same. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A path typed with a leading ~ is the home directory, at every entry point ↵Gabriel Schneider29 hours
| | | | | | | | | | | | | | | | | | | | | | | | | | | | that takes one, through one helper Only DumpDir (dump.zig) and ShaderBuild expanded `~/`, each its own way. So a look at `~/notes.txt`, `name ~/x`, `Save ~/x`, ThemeFile, Restore and a quoted `pardes '~/x'` all took `~` as a directory of that name under the pane's. There is now one rule, filesystem.expandHome. A leading `~`, alone or before `/` or `:`, is $HOME, else the passwd entry's home; `~user` is that user's (getpwnam). As in a shell, it applies even beside a file named `~`, and `./~` names that file. Every entry point runs its typed path through it: - look, B3 and 9P, before any parsing, so `~/x:12`, `~/x:12:3` and `~/x:/re/` all work; - name, and a tag's rename; - Save <path>; - ThemeFile, DumpDir, Restore and ShaderBuild's shader files; - the forwarding launch. Recent rows are not shown with `~` and need nothing. How names are shown is unchanged. Tests: expandHome's cases, and HOME unset (passwd), with HOME passed in rather than set, since setenv moves the environ a spawned child reads. fs.py covers Save into missing directories under `~`, `name ~/x`, a look at `~/x:3`, and a forwarded `pardes '~/x'`. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A look at file:3:0 is refused as addr 3:0 is: a column counts from 1Gabriel Schneider29 hours
| | | | | | | | | addr refuses a column 0 with EINVAL, "address out of range: a column counts from 1". A look took `file:3:0` as line 3 with no column, since the parser holds no column as 0, and succeeded. Now a look whose column, or end column, is written as 0 is refused with addr's words and errno. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Help and Find from the workspace or a column tag act in the session's ↵Gabriel Schneider29 hours
| | | | | | | | | | | | directory, not the keyboard pane's New, Tty and commands clicked in a tag no pane owns ran in the session's directory, but Help named its +Help after the pane with the keyboard, and Find walked that pane's directory. So the same click gave different results depending on which pane was focused. Both now take the session's directory from a header, through execDir as the others do. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* tag_layer.zig folds into Layer.zig, whose TagHit its two functions work onGabriel Schneider29 hours
| | | | | | 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 <[email protected]>
* One look logs one err: a file:addr whose file is not there is one miss ↵Gabriel Schneider29 hours
| | | | | | | | quoting what was written, and a refused placement is the look's only failure A look at utf8txt:#3 from a terminal searched for utf8txt, missed, then found the terminal no text to address: two errs for one write. It is now looked for whole, as zzq:2 already was, so every form's miss reads no match for "<as written>". A look whose new pane was refused a place went on to settle its line in the pane it stayed on and logged has no line N after the placement failure; it now stops there. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A look that misses file:/re/ names the file and is logged as that file's pane'sGabriel Schneider29 hours
| | | | | | A miss said only look: no match for regexp, against the pane the look came from. It now says look: <file>: no match for regexp, on the pane of the file it searched. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A Recent or Jumplist row for a file that shrank lands on its last line, the ↵Gabriel Schneider29 hours
| | | | | | | | same by either route, and says so A +Recent row clamped silently and a Jumplist row missed (has no line N). Both are remembered places now: the look clamps to the file as it is, closed or open, and the message row says <file> has N lines now: at its last. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A PDF that cannot be read fails its look with its path and whyGabriel Schneider29 hours
| | | | | | A truncated PDF said only look: <error>, with no path, where an image that cannot be read names both. It now says look: <path>: not a PDF pardes can read: <why>. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Every child starts with its signals at their defaults and none blockedGabriel Schneider29 hours
| | | | | | Shells, command panes, language servers, the link opener and the v9fs mount inherited the editor's signal mask (the tty's blocked SIGWINCH) and anything it ignored (a SIGHUP nohup ignored), since only handlers reset at exec. Each fork now resets every disposition and clears the mask before its exec (resetChildSignals); std's spawn for selection pipes runs with the mask cleared across it. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A look at a corrupt image fails with an err rather than open a blank paneGabriel Schneider29 hours
| | | | | | An image stb_image could not read opened as an empty image pane, the look succeeding. The bytes' header is now checked at the look (stbi_info_from_memory), and one that is no image it reads fails the look, look: <path>: not an image pardes can read, making no pane. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A clamped Recent range ends at a line's last character, never swallowing its ↵Gabriel Schneider29 hours
| | | | | | | | newline A range past the end of a file that had shrunk was clamped to the empty line after its final newline and to one past a line's last character, so the selection took the newline in. Its ends now clamp to the last line and to its last character, as addr's L:C does. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A look miss said again is its err record counted, as any repeated err isGabriel Schneider29 hours
| | | | | | Look's miss pushed its err record plain, so a script retrying one look filled the log with the same line, where other errs are counted (x2). Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A look at a ./ or ../ name that is not there names the file, not the pane's ↵Gabriel Schneider29 hours
| | | | | | | | directory Any relative name that opened nothing was blamed on the pane's directory (look: .../work/many: no such directory) though it exists; the directory is named only when it is gone. A plain name is still looked for as text, its miss logged as any look's. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A Find or Grep that finds nothing empties its directory's +SearchGabriel Schneider29 hours
| | | | | | It failed with no match but left the last search's rows in the +Search, where they read as this one's. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A remembered place is clamped to the file as it is now, its selection's two ↵Gabriel Schneider29 hours
| | | | | | | | ends kept A Recent row or a jumplist entry for a line the file no longer has failed the look; now it opens at the last line. The selection's anchor is remembered too, so a reopen restores both ends where they fit, and Recent and Jumplist share the (closed) marker. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Merge: 9P rounds 18-20 + Recent + renames + render G11-G14, tty track, ↵Gabriel Schneider29 hours
|\ | | | | | | cursor + faithful themes
| * GUI goldens settle on the window's idle, not two captures that agreeGabriel Schneider29 hours
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | test/gui_golden.py hashed a scene once two captures 400 ms apart agreed; on a loaded machine a slow frame agreed with itself before the scene's change landed and every later hash moved up a scene. A test window now writes a status file into its capture directory each loop step (gui.zig writeTestStatus: step, frames captured, idle — nothing owes a frame, nothing moves, nothing waits on the core's clock), and the harness waits for an idle step two past the one current when it asks: a 9P write has been served by then, so the frame is the scene's. Two things kept a window from ever going idle, both fixed: - Look-hover re-armed forever: resting on a word with nothing to open, the hover wait ran its two frames, found nothing, cancelled, and the next present's pointer refresh started it again: a frame every other frame for as long as the pointer rested there, live too (CPU). The place last refused is remembered (Pardes.look_hover_refused) until the pointer moves off it. - The virtual clock moved only on a wait that timed out, so a steady trickle of events held it still; it now moves to the core's wake too when an event cut the wait short and nothing owes a frame. Captures go to a directory of their own, outside the session's (a file written there every frame is a change in the directory its panes look at). All 17 goldens match the file as recorded at oooopqyv; eight runs, five alongside a ReleaseFast build and three with all 16 cores saturated (load 13-19), were byte-identical, 14 s a run unloaded (was ~30). Tests: the resting pointer lets the core go idle.
* | A served-tree pane spoils no Grep, and `look .` from a gone directory is ENOENTGabriel Schneider29 hours
| | | | | | | | | | | | | | | | | | | | | | A pane named `/virtual` gave Grep the root `/`, which swallowed every other pane's directory and ran out of walk before any file: every Grep missed. Grep passes over panes of the served tree. And `.` from a pane whose directory was gone resolved to the served tree's root (/virtual/), or through the jump list to another pane's directory: a dot path is the looking pane's own, and gone it fails, `look: <dir>: no such directory`. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* | Grep and Find count the rows they found, so a hit opens its +Search and a ↵Gabriel Schneider29 hours
| | | | | | | | | | | | | | | | | | | | | | | | miss fails Round 18 made a search that found nothing fail, but grep and find never counted their rows (only a pane search did), so every Grep read as a miss. Both count the lines they wrote now; a Find or Grep that finds nothing fails alike, `find: no match, not found` / `grep: ...`, ENOENT, and opens no empty +Search. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* | Grep with no hit says grep: no match, and a pane directory that is not there ↵Gabriel Schneider29 hours
| | | | | | | | | | | | | | | | | | | | | | is passed over Grep walks every pane's directory; one not there (a scratch named into a directory not made yet) failed the whole search with `file not found`. Such a root is passed over now, and a search that finds nothing says `grep: no match` and opens no empty +Search. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* | `@p<terminal>:N` past the terminal's last line is a miss, as in a fileGabriel Schneider29 hours
|/ | | | | | | | The line-past-end check read only a file pane's lines, so a terminal's look went nowhere and said nothing. A terminal's lines are its logical lines, as a +Search of it lists them. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Mount dials its peer at once and fails if none answers; a peer out of reach ↵Gabriel Schneider29 hours
| | | | | | | | | | | | | is said as `dial failed: <reason>` Mount took any well-formed dial and nothing was found out until the first look through it, which then said `look: look: dial`. Mount now probes the peer (version, attach, its root) with the turn out, and fails its write, mounting nothing, when none answers; the dial errors read as words, `no answer`, `timed out`, `hung up`, and a look through a peer gone since names its path: `look: /n/peer/f: dial failed: no answer`. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A look that goes to another pane leaves the looking pane's dot aloneGabriel Schneider29 hours
| | | | | | | | | | Every look that found something cleared the looker's selection first, so `@p5:2` or `f.txt:2` written to a pane's look collapsed its dot to q1-1. Only a look that stays in the pane starts from a clean selection now; one that goes elsewhere takes away just the click's highlight, and a miss changes nothing, as acme's look does. Co-Authored-By: Claude Opus 5.5 <[email protected]>