HELP(1) HELP(1)
NAME
help - experimental window system
SYNOPSIS
help/help
help/buf
eval `{/bin/help/parse [ -ca0 ] }
DESCRIPTION
Help is an experimental combination of window system, edi-
tor, shell, and user interface. Help supports textual
applications only.
Layout
The screen is divided initially into two columns of windows.
Each window is divided into two components: a single line of
text across the top, called the tag, and a multi-line body
of text below. Typically a window represents a file whose
name is in the tag and whose contents are in the body. In
this case, the file name appears as the first part of the
tag, followed by white space. The directory name associated
with the window is the file name in the tag stripped of text
after its final slash character.
The columns also have tags. The windows and columns are
stacked like aligned sheets of paper that may overlap. (In
the rest of this document, `window' will stand for `window
or column'.) Each window has associated a small black
square to the left of the column containing the window; each
column has one to the top. Clicking with mouse button 1 on
the square brings the associated window to the top of the
stack of windows in which it resides, leaving its x-y posi-
tion unchanged.
Pressing mouse button 3 in the tag of a window allows the
window to be moved: hold the button down and release it in
the desired new position.
New windows are placed automatically by help. They are
placed in the bottom of the column containing the selected
text (q.v.).
Text
Each window contains editable text in its tag and body. The
behavior of this text is essentially the same as in sam(1):
button 1 selects text; typing replaces the selection; there
is a scroll bar to the left, etc. Double clicking button 1
selects as in sam. The tag and body have independent
Page 1 Plan 9 (printed 12/14/25)
HELP(1) HELP(1)
selections.
The current window (tag or body) is the one under the mouse;
there is no `click-to-type' property.
Cutting and pasting are done by chords on the mouse buttons.
While button 1 is held down after a selection, clicking but-
ton 2 will cut the selected text and button 3 will paste the
snarf buffer into the selected text. There is no menu for
cutting and pasting, although there are such commands; see
the next section.
Execution
Commands are executed by selecting the text of the command
using button 2. When the button is released, the button 2
selection is passed to the shell for execution. While a
command is executing, the command name appears in the top
line of the help screen; when the command completes, it is
removed. Selecting with button 2 does not affect the cur-
rent text.
Some commands are built in to help. By convention, these
commands have initial capital letters. Examples are Cut,
Paste, Snarf, Open, etc. Such commands are interpreted
internally, much like functions in rc(1), and do not corre-
spond to executable files. Some built-ins take no arguments
and cause actions to the window in which they are executed.
These are suffixed with an exclamation point. They are
Close!, which closes the window, Get!, which rereads the
file, and Put!, which writes the window to its file.
The file name to execute is found as follows. If the com-
mand name begins / or ./ it is taken as a literal file name.
If not, the name is prefixed by the directory name of the
window holding the command name. If that file does not
exist or if there is no directory name, the name is prefixed
by /bin/.
Multiple words are interpreted as a command to execute fol-
lowed by its arguments. Single quotes behave as in rc(1).
Built-in commands that take an argument will use the
selected text as an argument if no argument is provided
explicitly. For example, one may select a file name with
button 1 and select Open with button 2 to open a window on a
file. Shell commands must be provided their arguments
explicitly, although it is possible to discover the selec-
tion in a program designed to run under help; see help(4)
and read about parse below.
Defaults
When selecting text with button 1, double clicks select
words, lines, etc. There is no way to double click with
Page 2 Plan 9 (printed 12/14/25)
HELP(1) HELP(1)
button 2, however. Instead, a null selection - a click -
with button 2 on a word expands to the entire white-space-
delimited word containing the selection. For example,
clicking button 2 on Cut will cut the selected text. If the
text selected with button 2 is not a null string, no such
expansion occurs.
When a null button 1 selection is used as an argument to a
command, rules relevant to the command are used to expand
the selection. For example, Open expands the selection to a
white-space-delimited word and interprets that as a file
name. It is therefore possible to open a file with two
clicks: one on the file name, one on Open. Also, since typ-
ing leaves the selection at the null string at the end of
the typed text, one may load a new file by typing its name
(leaving the selection at the end of the name) and clicking
button 2 on Open. Other commands interpret the selection as
numbers, words, C identifiers, etc., according to the rules
of the command.
Tools
Tools in help comprise directories holding executable pro-
grams and associated file, conventionally called stf
(`stuff') that holds the templates for executing the pro-
grams. Standard tools live in /help. For example,
/help/cbr is a directory of tools for browsing C source text
and /help/cbr/stf is a text file that acts somewhat like a
menu of browser commands. By the rules mentioned above,
clicking button 2 on, say, decl in the window holding
/help/cbr/stf will execute /help/cbr/decl, a program that
identifies the declaration of a C variable.
Boot
When started, help initializes its display and prints the
words help/Boot and Exit across the top. is naturally the
built-in command to quit help. The program help/Boot loads
help with the tools named in the environment variable
Support programs
See help(4) for an explanation of the control files help
offers its applications. Two programs in /bin/help assist
such applications. Buf collects its input and emits it in a
single write system call. It sends a maximum of 8192 bytes.
Parse reads help's control files to find the selected text.
It expands the selection, if null, to the alphanumeric word
defined by its option: -0 (zero) selects numbers; -a selects
alphabetic words; and -c selects C identifiers. Parse then
prints strings to set the environment variables $file to the
file name of the window holding the selection, $dir to the
directory, $base to the basename (file minus directory),
$line to the line number holding the beginning of the selec-
tion, and $id to the text containing the word. The output
Page 3 Plan 9 (printed 12/14/25)
HELP(1) HELP(1)
of parse should be executed by rc.
FILES
/mnt/help Files served by help (also unioned in /dev
in a window's name space, before the
terminal's real /dev files).
/help Directory of tools.
/help/lib/boot Bootstrap program.
SEE ALSO
8½(1), 8½(4), help(4)
Rob Pike, A Global Minimal User Interface.
BUGS
Help has not been engineered or tested nearly as well as 8½.
Page 4 Plan 9 (printed 12/14/25)