diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/config.md | 6 | ||||
| -rw-r--r-- | docs/fs.md | 34 | ||||
| -rw-r--r-- | docs/tags.md | 10 |
3 files changed, 30 insertions, 20 deletions
diff --git a/docs/config.md b/docs/config.md index b5ec1aa5..349814a6 100644 --- a/docs/config.md +++ b/docs/config.md @@ -49,7 +49,7 @@ opens the file. Shell follows the same requested/effective/pending model as Font. `Default shell` is the one used while no `Shell` is set: `$SHELL`, the user's login shell, else `/bin/sh` (also when `$SHELL` names nothing executable); an explicit `Shell` overrides it. `Shell <name or path>` is -refused unless it names an executable file (`Shell: no shell "x" (...)`, or +refused unless it names an executable file (`Shell: shell "x" not found (...)`, or `Shell: not a shell: /etc is a directory`; a bare name is looked for in the usual bin directories), as `Tty <shell>` is, and a bare `Shell` goes back to the default. The root ctl reads `Shell <the one the @@ -554,7 +554,9 @@ keeps the last good one and says why), and GUI attached to a detached session runs the session's chain the same way. With the chain empty the pass is bypassed. CRT works in linear light with restrained scanlines, mask, bloom and vignette, and no curvature, so clicks land where -they are drawn. +they are drawn. Its slow hum and dither move on their own, so with Crt on the +GUI keeps drawing while idle (under `ShaderAnimation on`, while focused); +the other bundled passes are still and let it rest. Three more bundled passes take the same levels, each off by default and each costing nothing while off: @@ -258,7 +258,7 @@ back changes nothing; a setting the frontend cannot show (`Lift`, (EINVAL: a request this build cannot take), and so is a builtin only the GUI has (`Fonts`), written to an `exec` too, where it would otherwise run as a shell command; a `Shell` or `Tty` naming no -shell says `no shell "x", not found` (ENOENT); a `DumpDir` whose last +shell says `shell "x" not found` (ENOENT); a `DumpDir` whose last directory is missing has it made at the Dump, and one further up missing says `Dump <path>: no such directory` (ENOENT), one that is no directory (`/dev/null`) `Dump /dev/null/pardes-<time>.zon: /dev/null is not a @@ -303,7 +303,8 @@ lines before a failing one have taken effect and those after it never run, which is what acme's ctl loop does (editors/acme/xfid.c:600-790). An error that only happens as the editor performs what a line asked for -- a `Save` whose disk write fails -- fails the write too, once the editor has tried -(`Save /root/x.txt: access denied`, EIO), and changes nothing: a scratch +(`Save /root/x.txt: access denied`, which 9ns reads as EACCES, a shell's +`Permission denied`), and changes nothing: a scratch keeps its name and stays a scratch, a clean file stays clean, a dirty one dirty. Like any write, a ctl write answers once the editor has performed what it asked for (a save written, a shell started). A click on @@ -545,7 +546,9 @@ at #0 as sam does (a search never answers where it started), so it finds the next one: for the start itself write `file:0` or `file:#0`. `:addr` does the same in the pane itself, and a pattern may hold blanks (`calc.py:/return a/`). `file:12` selects line 12, its newline included, -as acme's does; `file:12:5` puts the caret at line 12, column 5. A bare +as acme's does; `file:12:5` puts the caret at line 12, column 5 (columns count bytes from 1, +as `addr`'s `12:5` does and as the rows of Grep, +Search and the language +servers write them). A bare `/re/` is a path, as in acme, and failing that a search for its text. A look that finds nothing, an address that does not evaluate, or a line past the file's end (`calc.py:99`) says so on the message row and in the log @@ -559,10 +562,12 @@ directory. A name alone is no edit: the pane's `dirty` stays what its text made Restore or Del, which ask only about text edited), and `Save` writes it under the new name all the same. An open's writes are one name: held until its newline, or its close when it has none, then applied once, however -the writes cut it; nothing else is trimmed. A blank inside a name is taken +the writes cut it; nothing else is trimmed. Two lines are refused, EINVAL, +in one write or as a second line on the same open (bash's `printf +'a\nb\n' > name` writes a line at a time: the first names it). A blank inside a name is taken (`two words.zig`); refused, EINVAL, in acme's words (xfid.c:650) and why, are a blank at either end (not quietly cut off), `bad character in file -name: a blank at its end`, a second line, `...: a newline (a name is one +name: a blank at its start` (or `end`), a second line, `...: a newline (a name is one line)`, a control byte, DEL or a C1 control (U+0080-U+009F), `...: a control character`, and bytes that are not UTF-8, `...: not UTF-8`. `body` appends on write and replaces on truncating open. A terminal's `body` is its history as plain text, frozen per open, in logical @@ -703,10 +708,11 @@ matches at every line start, and `$` may stand just before a `\n` (where it changes nothing). Any other `^` or `$` in such a pattern, `(^|\n)def` or `a\nb$`, is refused, EINVAL, with `bad regular expression: in a pattern with \n, ^ can only come first and $ only just before a \n`, since mvzr would read it as the start or end of the -whole text: never a search that silently finds nothing. Within a line, `^` -inside an alternation (`^def|^ `) matches only where the search starts, so it -works from a line's start (an `x` over lines, a `g` on one) and not from its -middle: an mvzr limit. An expression is +whole text: never a search that silently finds nothing. An alternation +whose every branch starts with `^` (`^def|^ `) finds a line that starts +either way (it is taken as `^(def| )`); one that mixes anchored and +unanchored branches (`^def|x`) is refused, `bad regular expression`, since +mvzr keeps `^` only first. An expression is evaluated from the current address, the range last written to `addr` (or left by the last `data` write, just past it), as acme evaluates it from `w->addr` (xfid.c:446): `.` is that address, not the selection (`dot` is @@ -718,7 +724,7 @@ otherwise wraps to the start of the text; `?re?` and `-/re/` find the last match ending before the range, wrapping to the text's last. The match is the leftmost, but of the alternatives at that place mvzr takes the first that matches where sam takes the longest (`/gam|gamma/` finds `gam`); in a search begun in the -middle of a line, `^` inside an alternation can match there; and in a +middle of a line, `^` inside a group can match there; and in a pattern that spans lines, `^`, `$` and `[^...]` keep mvzr's own meaning. mvzr backtracks without bound of its own (`a?` twenty times then twenty `a`s is 2^20 steps from each place it tries), and a search holds the editor, so pardes patches a @@ -747,7 +753,9 @@ written to `addr` that goes from the current one (`.`, `+1`, `-/re/`), which there is none of, until an address that stands alone (`2`, `#0`, `/re/`) is. The three flag files `dirty`, `mark` and `scroll` read `0` or `1` and take -`0` or `1`: whether the buffer differs from its file, whether a write pushes +`0` or `1`: whether the buffer differs from its file (a file deleted on +disk counts, as in acme: its text is only here now, and Del, Exit and the +rest ask first), whether a write pushes an undo point (writing `1` pushes one now), and whether a write scrolls the pane. The writes of one open of `data`, `xdata` or `body` are one undo step while `mark` is 1 (so `printf 'a\nb\n' > data` is one, though a @@ -768,7 +776,7 @@ name (ENOENT for a pane, file or directory gone -- `look .` from a pane whose directory is gone says `look: <dir>: no such directory`, and a `./zz.txt` or `../x` that is not there `look: ./zz.txt: no such file`, while a plain `zz.txt` is looked for as text, a miss logged as any look's -- and for a -Find or Grep that finds nothing, `grep: no match, not found`; Grep walks +Find or Grep that finds nothing, `grep: pattern not found`; Grep walks every pane's directory on this host, passing over panes of the served tree (`/virtual/`, a peer's `/n/<name>/`) and directories not there, so none of them spoils the rest; Find, Grep and a language server's lists @@ -788,7 +796,7 @@ a command pane ends in its own time, told by its `exit` record. `tag` reads the whole tag as the pane shows it: the computed path or PDF page (no mark for unsaved text: the grip shows that, and `dirty` says it), then the text you may edit. An image's tag begins with its mode words, not -its path: `img petscii:off palette:terminal ascii:off <path>`, the modes +its path: `img petscii:off palette:commodore ascii:on <path>` by default, the modes it is drawn in, then the file. A write appends to that text, newlines included, and a tag with more than one line takes a row per line on screen; truncating `tag` clears it, as acme's `cleartag` does -- the default diff --git a/docs/tags.md b/docs/tags.md index c2d92b9a..3ff5e0ef 100644 --- a/docs/tags.md +++ b/docs/tags.md @@ -305,8 +305,8 @@ the left column closes the column's lone shell if nobody has typed into it. Down from an empty column's tag stays there, and the pane-to-pane keys pass over an empty column; Left and Right from a tag walk every column's tag. -One divergence from acme: acme keeps running when its last window closes, -every column empty. Pardes quits when the session's last pane closes, as -`Delcol` of the last column always has. A key, a prompt or a command in -pardes runs in a pane, so a session without one would have nothing to run -them in. +`Delcol` of the last column does as acme's does: the column goes and the +window stays, empty but for the workspace tag, where `Newcol` (or `New`, +which makes the column it goes in) starts it again. One divergence from +acme remains: acme keeps running when its last window closes; pardes quits +when the session's last pane closes by `Del`, a shell exiting or the like. |
