summaryrefslogtreecommitdiff
path: root/src/fs-help.txt
blob: 73a49e9b5d33ae41c797a66a9be3942a09c3a953 (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
46
47
48
49
50
51
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
exec        write a line: a middle click, an editor command word or a shell line; read the same
log         events: new/del/rename/save <serial> <name>, newcol/delcol <column serial>, run/exit/send <serial> ...,
            ask <serial> <what> <choices>, dump/restore <path>, restored/restoredcol <old> <new>, 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, one a line; or Newcol (an empty column), Dump, Exit (quits, asks once), Kill [w] (stops what pardes ran, w: by first word)
commands    every builtin: its word, arg if it takes one, and root or pane: which ctl takes it
layout      one line per column: serial index x width current|notcurrent empty|full pane-serials...; then active <serial>
tag         the workspace tag: read it, > replaces it, >> appends (one line)
col/<n>/tag the tag of the column with serial n, the same way (a serial stays while the column lives)
col/<n>/ctl Delcol, Joincol, New or Tty on that column; col/<n>/exec a word as a click in its tag; rmdir col/<n> closes an empty one
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

Below, $m is the mount: $NINE_MOUNT/pardes/<pid, or NAME of --detach=NAME>; PARDES_MOUNT in a Tty9p shell;
$NINE_MOUNT itself under `9ns --unix SOCKET -- cmd`, which mounts one session as its root.

  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)
  cp $m/pane/$n/addr $m/pane/$n/dot; cat $m/pane/$n/sel   select the range, read it
  exec 3<>$m/log; echo follow >&3; cat <&3     what happened lately, then wait for more
  cat $m/pane/$n/event                         hold it open to own that pane's clicks
  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); > never resets it, 0 does; 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 runs as a command pane (ctl's Shell -c; exit N shown, logged), a shell's typed in.
  Through a mount a malformed write is EINVAL, a well-formed one that fails EIO: log's err says why.
  lock/unlock need a held ctl fd (exec 3>ctl), a held lock fails: retry. A column's last pane leaves it empty; the last pane of all quits.
  Repl python on a terminal's ctl: a .py body's clicks go to it (Repl - unbinds, Repl says it); tags stay commands.