# `@`...`` — a word that names a COMMAND instead of a file to open. The # delimiters are config.cmd_open/cmd_close and nothing else in the editor knows # how one is spelled. # # A backtick is not a file char, so the ordinary word expansion would stop dead # inside one and hand a look the fragment `echo`. config.wordBounds takes the # whole run instead, which is what makes a single CLICK the way you invoke one # (acme does the same for its own `<`/`|`/`>` command words). # # EXECUTE runs it, as a command pane, and leaves you where you were; LOOK runs # it and lands you in the pane that answered — looking at a thing means being # shown it, and a directory's look has always been exactly that (a shell # there, ls'd). # # And Look and Exec are ORDINARY BUILTINS now, so their names are executable # words like Save or Grep: `Look p.txt` run off the page is the same look a # right click on `p.txt` is. Which is also what makes `@`Look .`` nest — Exec # unwraps it and the contents go straight back through the one dispatcher. file cmds.txt @`echo ZZ''E` @`echo ZZ''L` Look p.txt @`Look .` file p.txt just text file zzmark.txt x # Builtins announce themselves by default, and an announcement is a band at # the top of the body -- which would move every row this script clicks. The # verbs are what is under test here, not the announcement. config Verbose off # its clicks and goldens were laid out by the pardes placement rule config Placement pardes start 31 120 cmds.txt wait 8000 Newcol Joincol wait 8000 cmds.txt stable 700 20000 snap opened # a single middle CLICK inside the run (col 11 is inside `echo`) expands to the # whole `@`echo ZZ''E`` and runs it as a command pane; focus stays on the file press middle 11 4 release middle 11 4 wait 10000 ZZE stable 700 15000 snap atexec # LOOK on the second one (col 24, inside its `echo`) runs it too, in the same # command pane now its first is done, below it, AND focuses it — that is the # whole difference between the two verbs press right 24 4 release right 24 4 wait 10000 ZZL stable 700 15000 snap atlook # `Look p.txt` middle-dragged: the builtin by NAME, with an argument press middle 36 4 drag middle 45 4 release middle 45 4 wait 10000 just text stable 700 15000 snap lookword # nesting: `@`Look .`` — Exec unwraps it, `Look .` is parsed as the ordinary # Look builtin with an argument, and Look opens the directory (a shell there, # ls'd — zzmark.txt is only ever in that listing; a command pane is no shell) press middle 49 4 release middle 49 4 wait 10000 zzmark.txt stable 700 15000 snap nested # the same syntax typed into a TAG — the other place the expansion has to know # about backticks. The look above left that shell focused, so `:` opens ITS # tag, and the word run from a shell's own tag is typed into it; `A` appends at the end of it, Esc and `h` put the normal-mode cursor on # the last character typed, and the execute key runs the word under it # exactly as the body's does. key : key A key space text Exec key esc settle 100 key h key tab stable 700 8000 # ...except that word is `Exec` ITSELF, with nothing to execute. This is the # case that must not hang a re-entrant dispatcher: it runs out of argument # immediately and does nothing at all. Executing gave the keyboard back to the # body, and `:` finds the tag's cursor where it was left. snap execword key : key A key space text @`echo ZZ''T` key esc settle 100 key h key tab wait 10000 ZZT stable 700 15000 snap tagcmd