summaryrefslogtreecommitdiff
path: root/src/fs-help.txt
blob: 60ce4d4e2196133f93177441f511d7a03751af9f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Pardes control filesystem
=========================
README      this guide
index       one line per pane: serial, kind (text|term|pdf|image), dirty flag, name (+New if unnamed), column serial
status      pid, version and pane count
look        write a line: a right click on it at the active pane; read: the serials it touched (this open's)
exec        write a line: a middle click, an editor command word or a shell line; read the same (every exec file)
log         events: new del rename save newcol delcol run exit send ask answer changed dump restore restored restoredcol msg err
screen      rendered screen as JSON, frozen from open to close
listeners   the session's dial addresses
focus       the serial of the pane with the keyboard (empty on a column tag); write a serial to give it the keyboard
ctl         settings a line; or Newcol, Dump, Restore [f], Exit (asks once), Kill [w], Placement acme|pardes, size C R (--detach)
commands    every builtin: its word, arg if it takes one, and root or pane: which ctl takes it
layout      a line per column: serial index x width current|notcurrent empty|full pane-serials; active <serial>
tag         the workspace tag, tagexec a word as a click in it; col/<serial>/ a column's tag, ctl (Delcol Joincol New Tty), exec; rmdir: empty only
pane/new    open it to make a pane (named +New) in the active column, filling it if empty; the read answers its serial
pane/<n>/   name body tag ctl addr dot limit data xdata sel dirty mark scroll errors (write-only:
            appended to its directory's +Errors pane) event look exec, pty/ on terminals; rmdir closes
os/, src/   the host filesystem; the editor's own sources

$m below: $NINE_MOUNT/pardes/<pid|NAME>; $NINE_MOUNT under 9ns --unix; PARDES_MOUNT in a Tty9p shell.

  cat $m/index                                 which panes exist
  n=$(cat $m/pane/new)                        make a pane, take its serial
  echo /etc/hosts:3 > $m/look; cat $m/look     open a file, see the pane it went to
  printf 'text\n' >> $m/pane/$n/body           append to a pane (> replaces it all)
  echo notes.txt > $m/pane/$n/name; echo Save > $m/pane/$n/ctl     rename, then save it
  echo 'Msg hello' > $m/exec                   show text in the editor
  echo 'Edit ,x/foo/c/bar/' > $m/pane/$n/ctl   rename every foo, one undo step (sam's commands)
  exec 3<>$m/log; echo follow >&3; cat <&3     what happened lately, then wait for more
  echo Tty > $m/pane/$n/ctl; cat $m/index      a terminal in that pane's directory
  exec 3<>$m/pane/$n/pty/run; echo make >&3; cat <&3   exit N then its output; or busy, or error
  printf 'ls\r' > $m/pane/$n/pty/data           type into a terminal; pty/status: cols rows busy
  echo 'sig INT' > $m/pane/$n/pty/ctl          interrupt it; also winsize C R, and exec to restart

Pitfalls, one each:
  Each open of pane/new makes another pane (ls, stat, find never do); rmdir closes even a dirty one.
  addr: #n,#m, 12:5 or /re/ from the current address (^ $ per line), bytes snapped to runes; 0 resets; a miss refuses data.
  data: > replaces the addr range, : > deletes it, a 2nd > inserts (addr moved); body: > empties all.
  tag reads the path, then its own text; > replaces that text (default words too), >> appends.
  A terminal's body is a history snapshot frozen per open, wrapped rows joined into lines; pty/data is the live stream.
  exec: a non-builtin line (at most 1024 bytes) runs as a command pane (Shell -c), a shell's typed in; once whole.
  Through a mount a malformed write is EINVAL, a failed one EIO or an errno that fits (ENOENT): log's err says why.
  lock/unlock need a held ctl fd (exec 3>ctl); a held lock fails: retry. fs.md has the rest.
  Repl python on a terminal's ctl: a .py body's clicks go to it (Repl - unbinds, Repl says it); tags stay commands.