summaryrefslogtreecommitdiff
path: root/src/fs-help.txt
blob: 689d88390ab566e2a49a973a6fcb9c53627f6249 (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)
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>, msg <serial|-> <text>, err <serial|-> <why>
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; write a serial to give it the keyboard
ctl         settings, one a line as a write takes them; or Newcol, Dump, Exit (quits), Kill (stops cmds)
commands    every builtin: its word, arg if it takes one, and root or pane: which ctl takes it
pane/new    open it to make a pane (named +New); the read answers that pane's 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 (-Dembed-sources=true builds only)

Below, $m is the mount (/mnt/9p/pardes/<pid> via 9ns --mntgen; 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 '/^fn/' > $m/pane/$n/addr; printf NEW > $m/pane/$n/data     replace what addr matched
  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 takes #n,#m or sam-style /regexp/ (^ $ per line); a failed one makes data refuse until reset.
  data: > replaces the addr range, : > deletes it, a 2nd > inserts (addr moved); body: > empties all.
  tag reads the path, then the tag's own text; writes append to that text; truncating clears it.
  A terminal's body is a history snapshot frozen per open; pty/data is the live stream.
  exec: a word no builtin knows is typed into a terminal in the pane's directory, and not an error.
  A refused write reads as EINVAL through a mount: the log's err record says why.
  lock/unlock on a pane's ctl need a held fd (exec 3>ctl); a lock someone holds fails: retry.
  Closing a column's last pane leaves a +New in its place; Delcol closes the column.