summaryrefslogtreecommitdiff
path: root/test/snapshots/cmdword.snap
blob: 42a91e18b6aa8680b9e8d30f08600d50ed6c5da5 (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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# `@`...`` — 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
# a directory looked at opens a terminal there (DirLook terminal), as this
# script was written for; DirLook pane, the default, is dirpane.snap's
config DirLook terminal
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