.TH 9TERM 1
.SH NAME
9term \- terminal windows
.SH SYNOPSIS
.B 9term
[
.B -as
]
[
.B -f
.I font
]
[
.I cmd
\&...
]
.SH DESCRIPTION
.I 9term
is a terminal window program for the X Window System,
providing an interface similar to that used on Plan 9.
.SS Command
The
.I 9term
command starts a new window.
.PP
The
.B -a
flag causes button 2 to send the selection immediately, like acme.
Otherwise button 2 brings up a menu, described below.
.PP
The
.B -s
option initializes windows so that text scrolls;
the default is not to scroll.
.PP
The
.I font
argument to 
.B -f
names a font used to display text, both in
.IR 9term 's
menus
and as a default for any programs running in its windows; it also
establishes the
environment variable
.BR $font .
If
.B -f
is not given,
.I 9term
uses the imported value of
.B $font
if set; otherwise it uses the graphics system default.
.PP
.I 9term
runs the given command in the window, or 
.B $SHELL
if no command is given.
.SS Text windows
Characters typed on the keyboard
collect in the window to form
a long, continuous document.
.PP
There is always some
.I selected
.IR text ,
a contiguous string marked on the screen by reversing its color.
If the selected text is a null string, it is indicated by a hairline cursor
between two characters.
The selected text
may be edited by mousing and typing.
Text is selected by pointing and clicking button 1
to make a null-string selection, or by pointing,
then sweeping with button 1 pressed.
Text may also be selected by double-clicking:
just inside a matched delimiter-pair
with one of
.B {[(<`'"
on the left and
.B }])>`'"
on the right, it selects all text within
the pair; at the beginning
or end of a line, it selects the line; within or at the edge of an alphanumeric word,
it selects the word.
.PP
Characters typed on the keyboard replace the selected text;
if this text is not empty, it is placed in a
.I snarf buffer
common to all windows but distinct from that of
.IR sam (1).
.PP
Programs access the text in the window at a single point
maintained automatically by
.IR 9term .
The
.I output point
is the location in the text where the next character written by
a program to the terminal
will appear; afterwards, the output point is the null string
beyond the new character.
The output point is also the location in the text of the next character
that will be read (directly from the text in the window,
not from an intervening buffer)
by a program.
Since Unix does not make it possible to know when a program
is reading the terminal, lines are sent as they are completed
(when the user types a newline character).
.PP
In general there is text in the window after the output point,
usually placed there by typing but occasionally by the editing
operations described below.
A pending read of the terminal
will block until the text after the output point contains
a newline, whereupon the read may
acquire the text, up to and including the newline.
After the read, as described above, the output point will be at
the beginning of the next line of text.
In normal circumstances, therefore, typed text is delivered
to programs a line at a time.
Changes made by typing or editing before the text is read will not
be seen by the program reading it.
Because of the Unix issues mentioned above, a line of text is only editable
until it is completed with a newline character, or when hold mode
(see below) is enabled.
.PP
Even when there are newlines in the output text,
.I 9term
will not honor reads if the window is in
.I hold
.IR mode ,
which is indicated by a white cursor and blue text and border.
The ESC character toggles hold mode.
Some programs
automatically turn on hold mode to simplify the editing of multi-line text;
type ESC when done to allow
.I mail
to read the text.
.PP
An EOT character (control-D) behaves exactly like newline except
that it is not delivered to a program when read.
Thus on an empty line an EOT serves to deliver an end-of-file indication:
the read will return zero characters.
.\" Like newlines, unread EOTs may be successfully edited out of the text.
The BS character (control-H) erases the character before the selected text.
The ETB character (control-W) erases any nonalphanumeric characters, then
the alphanumeric word just before the selected text.
`Alphanumeric' here means non-blanks and non-punctuation.
The NAK character (control-U) erases the text after the output point,
and not yet read by a program, but not more than one line.
All these characters are typed on the keyboard and hence replace
the selected text; for example, typing a BS with a word selected
places the word in the snarf buffer, removes it from the screen,
and erases the character before the word.
.PP
An ACK character (control-F) or Insert character triggers file name completion
for the preceding string (see
.IR complete (3)).
.PP
Text may be moved vertically within the window.
A scroll bar on the left of the window shows in its clear portion what fragment of the
total output text is visible on the screen, and in its gray part what
is above or below view;
it measures characters, not lines.
Mousing inside the scroll bar moves text:
clicking button 1 with the mouse pointing inside the scroll bar
brings the line at the top of the
window to the cursor's vertical location;
button 3 takes the line at the cursor to the top of the window;
button 2, treating the scroll bar as a ruler, jumps to the indicated portion
of the stored text.
Holding a button pressed in the scroll bar will cause the text
to scroll continuously until the button is released.
.PP
Typing down-arrow scrolls forward
one third of a window, and up-arrow scrolls back.
Typing page-down scrolls forward
two thirds of a window, and page-up scrolls back.
Typing Home scrolls to the top of the window;
typing End scrolls to the end.
.PP
The DEL character sends an
.L interrupt
note to all processes in the window's process group.
Unlike the other characters, the DEL and arrow
keys do not affect the selected text.
The left (right) arrow key moves the selection to one character
before (after) the current selection.
.PP
.I 9term
relies on the kernel's terminal processing to handle
EOT and DEL, so the terminal must be set up with EOT
as the ``eof'' character and DEL as the ``intr'' character.
.I 9term
runs
.IR stty (1)
to establish this when the terminal is created.
.PP
Normally, written output to a window blocks when
the text reaches the end of the screen and the terminal
buffer fills;
a button 2 menu item toggles scrolling.
.PP
.I 9term
changes behavior according to
the terminal settings of the running programs.
Most programs run with echo enabled.
In this mode,
.I 9term
displays and allows editing of the input.
Some programs, typically those reading passwords,
run with echo disabled.
In this mode,
.I 9term
passes keystrokes through directly, without
echoing them or buffering until a newline character.
These heuristics work well in many cases, but there
are a few common ones where they fall short.
First, programs using the GNU readline library typically
disable terminal echo and perform echoing themselves.
The most common example is the shell
.IR bash (1).
Disabling the use of readline with
.RB `` "set +o emacs" ''
.RI [ sic ]
usually restores the desired behavior.
Second, remote terminal programs such as
.IR ssh (1)
typically run with echo disabled, relying on the
remote system to echo characters as desired.
Plan 9's
.I ssh
has a
.B -C
flag to disable this, leaving the terminal in ``cooked'' mode.
For similar situations on Unix,
.IR 9term 's
button 2 menu has an entry to toggle the forced use of
cooked mode, despite the terminal settings.
In such cases, it is useful to run
.RB `` "stty -echo" '' 
on the remote system to avoid seeing your input twice.
.PP
Editing operations are selected from a menu on button 2.
The
.B cut
operation deletes the selected text
from the screen and puts it in the snarf buffer;
.B snarf
copies the selected text to the buffer without deleting it;
.B paste
replaces the selected text with the contents of the buffer;
and
.B send
copies the snarf buffer to just after the output point, adding a final newline
if missing.
.B Paste
will sometimes and
.B send
will always place text after the output point; the text so placed
will behave exactly as described above.  Therefore when pasting
text containing newlines after the output point, it may be prudent
to turn on hold mode first.
.PP
The
.B plumb
menu item sends the contents of the selection (not the snarf buffer) to the
.I plumber
(see
.IR plumb (1)).
If the selection is empty, it sends the white-space-delimited text
containing the selection (typing cursor).
A typical use of this feature is to tell the editor to find the source of an error
by plumbing the file and line information in a compiler's diagnostic.
.PP
Each
.I 9term
listens for connections on a Unix socket.
When a client connects, the 
.I 9term
writes the window contents to the client and then hangs up.
.I 9term
installs the name of this socket in the environment as
.B $text9term
before running
.IR cmd .
.SH SOURCE
.B \*9/src/cmd/9term
.SH BUGS
There should be a program to toggle the current window's hold mode.
.PP
Not a
.IR 9term 
bug:
when running
.IR bash (1)
in 
.RB `` "set +o emacs" ''
mode, its handling of interrupts is broken.
In response to DEL,
.I bash
processes the interrupt but then silently discards the next
character typed.
.PP
Unix makes everything harder.
.SH SEE ALSO
.IR wintext (1)
