| .TH 9TERM 1 |
| .SH NAME |
| 9term \- terminal windows |
| .SH SYNOPSIS |
| .B 9term |
| [ |
| .B -asc |
| ] |
| [ |
| .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 has no effect. It formerly set the scrolling mode, |
| and is recognized to avoid breaking scripts that create new windows. |
| See below for a description of scrolling behavior. |
| .PP |
| The |
| .B -c |
| option starts the window in forced cooked mode, |
| described below. |
| .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 grey 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, so the terminal must be set up with EOT |
| as the ``eof'' character. |
| .I 9term |
| runs |
| .IR stty (1) |
| to establish this when the terminal is created. |
| .PP |
| .I 9term |
| always treats the DEL keystroke as an interrupt request. |
| In response it sends the terminal's current interrupt character |
| (which need not be DEL). |
| .PP |
| Written output to a window is appended to the end of the window. |
| The window scrolls to display the new output only if the |
| end of the window was visible before the write. |
| .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) |