summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-28 18:20:33 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:15 -0300
commitafc72ac3db0840d8571dcfb8e2e182a241bdecaf (patch)
tree287d4e2cc74839e668f3afba4d13873923a40d89 /docs
parent4354669aa560c5504b046413f771d02c4216dd45 (diff)
downloadpardes-afc72ac3db0840d8571dcfb8e2e182a241bdecaf.tar.gz
pardes-afc72ac3db0840d8571dcfb8e2e182a241bdecaf.zip
A shell's > on addr no longer resets it, so echo /re/ > addr searches on
Truncating addr reset it to #0, so a shell's find-and-replace loop matched the first hit for ever, .+#1 read 1 1 each time, and foo x foo y foo became foobarbarbar... acme resets addr on the first open (xfid.c:105-108), for clients that hold the fid; a shell cannot. Here neither an open nor a truncation resets it: the address written is evaluated from the last one, and 0 or , starts over. Documented as a departure from acme. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'docs')
-rw-r--r--docs/fs.md14
1 files changed, 11 insertions, 3 deletions
diff --git a/docs/fs.md b/docs/fs.md
index b8425d2f..7ccb9a91 100644
--- a/docs/fs.md
+++ b/docs/fs.md
@@ -369,8 +369,16 @@ leaves `addr` just past what it wrote, so a second `echo x > data` deletes
the empty range there and inserts after the first rather than replacing it
again; write `addr` before each replacement.
`addr` belongs to the pane rather than to a client and keeps what was written
-until someone writes or truncates it, so writing an address and reading it
-back evaluates it, which is what acme(4) promises of its own `addr`.
+until someone writes another, so writing an address and reading it back
+evaluates it, which is what acme(4) promises of its own `addr`. Unlike acme,
+neither an open nor a truncation resets it: acme sets it to `#0` when the
+first client opens `addr` (editors/acme/xfid.c:105-108), which suits a
+client that holds the fid, but a shell opens the file anew for every
+`echo /re/ > addr` and so would search from the top each time and never
+advance. Here each such write searches on from the last address, as `>>`
+does; write `0` to start again from the top. A search wraps at the end of
+the text, so a find-all loop stops when the address comes back to where it
+began, or bounds itself with `limit`.
The regular expressions are mvzr's (sets, `\d`/`\w`/`\s`, `{m,n}` and
lazy `*?` included), searched the way sam searches (editors/acme/regx.c): as
@@ -409,7 +417,7 @@ expression`, `regular expression search gave up, ...`, or sam's
`addresses out of order` for a range that ends before it starts
(`#100,#50`), which acme lets through. A failed write to `addr` leaves no
address at all, where acme
-keeps the old one: until an address is written or `addr` is truncated,
+keeps the old one: until a good address is written,
reading `addr`, and reading, writing or truncating `data` and `xdata`, fail
with `no address: the last one written to addr failed`, so a script that
missed its target cannot then write at the last one.