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/22/24)

     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/22/24)

     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/22/24)

     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/22/24)