1 .\" Copyright (c) 1985, 1990, 1993
2 .\" The Regents of the University of California. All rights reserved.
4 .\" This code is derived from software contributed to Berkeley by
5 .\" Edward Wang at The University of California, Berkeley.
7 .\" Redistribution and use in source and binary forms, with or without
8 .\" modification, are permitted provided that the following conditions
10 .\" 1. Redistributions of source code must retain the above copyright
11 .\" notice, this list of conditions and the following disclaimer.
12 .\" 2. Redistributions in binary form must reproduce the above copyright
13 .\" notice, this list of conditions and the following disclaimer in the
14 .\" documentation and/or other materials provided with the distribution.
15 .\" 3. All advertising materials mentioning features or use of this software
16 .\" must display the following acknowledgement:
17 .\" This product includes software developed by the University of
18 .\" California, Berkeley and its contributors.
19 .\" 4. Neither the name of the University nor the names of its contributors
20 .\" may be used to endorse or promote products derived from this software
21 .\" without specific prior written permission.
23 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 .\" @(#)window.1 8.2 (Berkeley) 12/30/93
42 .Nd window environment
48 .Op Fl e Ar escape-char
52 implements a window environment on
56 A window is a rectangular portion of the physical terminal
57 screen associated with a set of processes. Its size and
58 position can be changed by the user at any time. Processes
59 communicate with their window in the same way they normally
60 interact with a terminal\-through their standard input, output,
61 and diagnostic file descriptors. The window program handles the
62 details of redirecting input and output to and from the
63 windows. At any one time, only one window can receive
64 input from the keyboard, but all windows can simultaneously send output
69 starts up, the commands (see long commands below)
72 in the user's home directory are
73 executed. If it does not exist, two equal sized windows spanning
74 the terminal screen are created by default.
76 The command line options are
79 Turn on terse mode (see
83 Fast. Don't perform any startup action.
87 and create the two default
89 .It Fl e Ar escape-char
90 Set the escape character to
93 can be a single character, or in the form
97 is any character, meaning
98 .No control\- Ns Ar X .
102 as a long command (see below)
103 before doing anything else.
106 Windows can overlap and are framed as necessary. Each window
107 is named by one of the digits ``1'' to ``9''. This one-character
108 identifier, as well as a user definable label string, are displayed
109 with the window on the top edge of its frame. A window can be
110 designated to be in the
112 in which case it will always be
113 on top of all normal, non-foreground windows, and can be covered
114 only by other foreground windows. A window need not be completely
115 within the edges of the terminal screen. Thus a large window
116 (possibly larger than the screen) may be positioned to show only
117 a portion of its full size.
119 Each window has a cursor and a set of control functions. Most intelligent
120 terminal operations such as line and
121 character deletion and insertion are supported. Display modes
122 such as underlining and reverse video are available if they are
123 supported by the terminal. In addition,
124 similar to terminals with multiple pages of memory,
125 each window has a text buffer which can have more lines than the window
127 .Ss Process Environment
128 With each newly created window, a shell program is spawned with its
129 process environment tailored to that window. Its standard input,
130 output, and diagnostic file descriptors are bound to one end of either
136 .Xr (socketpair 4 ) .
137 If a pseudo-terminal is used, then its special
138 characters and modes (see
140 are copied from the physical
143 entry tailored to this window is created
144 and passed as environment
148 The termcap entry contains the window's size and
149 characteristics as well as information from the physical terminal,
150 such as the existence of underline, reverse video, and other display
151 modes, and the codes produced by the terminal's function keys,
152 if any. In addition, the window size attributes of the pseudo-terminal
153 are set to reflect the size of this window, and updated whenever
154 it is changed by the user. In particular, the editor
157 this information to redraw its display.
159 During normal execution,
161 can be in one of two states:
162 conversation mode and command mode. In conversation mode, the
163 terminal's real cursor is placed at the cursor position of a particular
164 window--called the current window--and input from the keyboard is sent
165 to the process in that window. The current window is always
166 on top of all other windows, except those in foreground. In addition,
167 it is set apart by highlighting its identifier and label in reverse video.
171 escape character (normally
174 mode switches it into command mode. In command mode, the top line of
175 the terminal screen becomes the command prompt window, and
177 interprets input from the keyboard as commands to manipulate windows.
179 There are two types of commands: short commands are usually one or two
180 key strokes; long commands are strings either typed by the user in the
181 command window (see the
183 command below), or read from a file (see
189 represents one of the digits ``1'' to ``9''
190 corresponding to the windows 1 to 9.
193 .No control\- Ns Ar X ,
196 is any character. In particular,
201 is the escape key, or
207 as the current window
208 and return to conversation mode.
212 but stay in command mode.
214 Select the previous window and return to conversation
215 mode. This is useful for toggling between two windows.
217 Return to conversation mode.
219 Return to conversation mode and write
222 current window. Thus, typing two
225 mode sends one to the current window. If the
227 escape is changed to some other character, that
228 character takes the place of
232 List a short summary of commands.
238 Confirmation is requested.
243 Create a new window. The user is prompted for the positions
244 of the upper left and lower right corners of the window.
245 The cursor is placed on the screen and the keys ``h'', ``j'',
247 move the cursor left, down, up, and right, respectively.
248 The keys ``H'', ``J'', ``K'', and ``L'' move the cursor to the respective
249 limits of the screen. Typing a number before the movement keys
250 repeats the movement that number of times. Return enters the cursor position
251 as the upper left corner of the window. The lower right corner
252 is entered in the same manner. During this process,
253 the placement of the new window is indicated by a rectangular
254 box drawn on the screen, corresponding to where the new window
255 will be framed. Typing escape at any point
256 cancels this command.
258 This window becomes the current window,
259 and is given the first available ID. The default buffer size
264 Only fully visible windows can be created this way.
268 The process in the window is sent
269 the hangup signal (see
273 handle this signal correctly and cause no problems.
277 to another location. A box in the shape
278 of the window is drawn on
279 the screen to indicate the new position of the window, and the same keys as
282 command are used to position the box. The
283 window can be moved partially off-screen.
287 to its previous position.
289 Change the size of window
292 to enter the new lower right corner of the window. A box
293 is drawn to indicate the new window size. The same
298 are used to enter the position.
302 to its previous size.
304 Scroll the current window up by one line.
306 Scroll the current window down by one line.
308 Scroll the current window up by half the window size.
310 Scroll the current window down by half the window size.
312 Scroll the current window up by the full window size.
314 Scroll the current window down by the full window size.
316 Move the cursor of the current window left by one column.
318 Move the cursor of the current window down by one line.
320 Move the cursor of the current window up by one line.
322 Move the cursor of the current window right by one column.
324 Yank. The user is prompted to enter two points within the current
325 window. Then the content of the current window between those two points
326 is saved in the yank buffer.
328 Put. The content of the yank buffer is written to the current
331 Stop output in the current window.
333 Start output in the current window.
335 Enter a line to be executed as long commands.
337 editing characters (erase character, erase word, erase line)
341 Long commands are a sequence of statements
342 parsed much like a programming language, with a syntax
343 similar to that of C. Numeric and string expressions and variables
344 are supported, as well as conditional statements.
346 There are two data types: string and number. A string is a sequence
347 of letters or digits beginning with a letter. ``_'' and ``.'' are
348 considered letters. Alternately, non-alphanumeric characters can
349 be included in strings by quoting them in ``"'' or escaping them
350 with ``\\''. In addition, the ``\\'' sequences of C are supported,
351 both inside and outside quotes (e.g., ``\\n'' is a new line,
352 ``\\r'' a carriage return). For example, these are legal strings:
353 abcde01234, "&#$^*&#", ab"$#"cd, ab\\$\\#cd, "/usr/ucb/window".
355 A number is an integer value in one of three forms:
356 a decimal number, an octal number preceded by ``0'',
357 or a hexadecimal number preceded by ``0x'' or ``0X''. The natural
358 machine integer size is used (i.e., the signed integer type
359 of the C compiler). As in C, a non-zero number represents
362 The character ``#'' begins a comment which terminates at the
365 A statement is either a conditional or an expression. Expression
366 statements are terminated with a new line or ``;''. To continue
367 an expression on the next line, terminate the first line with ``\\''.
368 .Ss Conditional Statement
370 has a single control structure:
371 the fully bracketed if statement in the form
373 .Bd -literal -offset indent -compact
390 parts are optional, and the latter can
391 be repeated any number of times.
397 are similar to those in the
398 C language, with most C operators supported on numeric
399 operands. In addition, some are overloaded to operate on strings.
401 When an expression is used as a statement, its value is discarded
402 after evaluation. Therefore, only expressions with side
403 effects (assignments and function calls) are useful as statements.
405 Single valued (no arrays) variables are supported, of both
406 numeric and string values. Some variables are predefined. They
409 The operators in order of increasing precedence:
416 Assignment. The variable of name
418 which must be string valued,
419 is assigned the result of
435 (non-zero numeric value); returns the value of
451 Logical or. Numeric values only. Short circuit evaluation is supported
462 Logical and with short circuit evaluation. Numeric values only.
468 Bitwise or. Numeric values only.
474 Bitwise exclusive or. Numeric values only.
480 Bitwise and. Numeric values only.
489 Comparison (equal and not equal, respectively). The boolean
490 result (either 1 or 0) of the comparison is returned. The
491 operands can be numeric or string valued. One string operand
492 forces the other to be converted to a string in necessary.
504 Less than, greater than, less than or equal to,
505 greater than or equal to. Both numeric and string values, with
506 automatic conversion as above.
515 If both operands are numbers,
518 shifted left (or right) by
523 a string, then its first (or last)
528 is also a string, then its length is used
529 in place of its value).
538 Addition and subtraction on numbers. For ``+'', if one
539 argument is a string, then the other is converted to a string,
540 and the result is the concatenation of the two strings.
552 Multiplication, division, modulo. Numbers only.
554 .Ic \- Ns Aq Va expr ,
555 .Ic ~ Ns Aq Va expr ,
556 .Ic \&! Ns Aq Va expr ,
557 .Ic \&$ Ns Aq Va expr ,
558 .Ic \&$? Ns Aq Va expr
560 The first three are unary minus, bitwise complement and logical complement
561 on numbers only. The operator, ``$'', takes
564 the value of the variable of that name. If
569 and it appears within an alias macro (see below),
570 then it refers to the nth argument of the alias invocation. ``$?''
571 tests for the existence of the variable
574 if it exists or 0 otherwise.
576 .Ao Va expr Ac Ns Pq Aq Ar arglist
580 must be a string that is the unique
581 prefix of the name of a builtin
584 or the full name of a user defined alias macro. In the case of a builtin
587 can be in one of two forms:
588 .Bd -literal -offset indent
589 <expr1>, <expr2>, ...
590 argname1 = <expr1>, argname2 = <expr2>, ...
593 The two forms can in fact be intermixed, but the result is
594 unpredictable. Most arguments can be omitted; default values will
595 be supplied for them. The
597 can be unique prefixes
598 of the argument names. The commas separating
599 arguments are used only to disambiguate, and can usually be omitted.
601 Only the first argument form is valid for user defined aliases. Aliases
602 are defined using the
604 builtin function (see below). Arguments
605 are accessed via a variant of the variable mechanism (see ``$'' operator
608 Most functions return value, but some are used for side effect
609 only and so must be used as statements. When a function or an alias is used
610 as a statement, the parentheses surrounding
611 the argument list may be omitted. Aliases return no value.
613 .Ss Builtin Functions
614 The arguments are listed by name in their natural
615 order. Optional arguments are in square brackets
618 that have no names are in angle brackets
620 An argument meant to be a boolean flag (often named
631 obvious meanings, or it can be a numeric expression,
632 in which case a non-zero value is true.
635 .Ic alias Ns Po Bq Aq Ar string ,
636 .Bq Aq Ar string\-list Pc
638 If no argument is given, all currently defined alias macros are
641 is defined as an alias,
643 .Aq Ar string\-list > .
644 The previous definition of
646 if any, is returned. Default for
649 .It Ic close Ns Pq Aq Ar window\-list
650 Close the windows specified in
651 .Aq Ar window\-list .
656 than all windows are closed. No value is returned.
657 .It Ic cursormodes Ns Pq Bq Ar modes
658 Set the window cursor to
662 or of the mode bits defined as the variables
671 (graphics, terminal dependent). Return
672 value is the previous modes. Default is no change.
674 .Li cursor($m_rev$m_blk)
675 sets the window cursors to blinking
677 .It Ic default_nline Ns Pq Bq Ar nline
678 Set the default buffer size to
681 48 lines. Returns the old default buffer size. Default is
682 no change. Using a very large buffer can slow the program down
684 .It Ic default_shell Ns Pq Bq Aq Ar string\-list
685 Set the default window shell program to
686 .Aq Ar string\-list .
688 the first string in the old shell setting. Default is no change. Initially,
689 the default shell is taken from the environment variable
691 .It Ic default_smooth Ns Pq Bq Ar flag
692 Set the default value of the
697 (see below). The argument
698 is a boolean flag (one of
706 as described above). Default is no change.
707 The old value (as a number) is returned.
708 The initial value is 1 (true).
710 .Ic echo Ns ( Op Ar window ,
711 .Bq Aq Ar string\-list )
713 Write the list of strings,
718 by spaces and terminated with a new line. The strings are only
719 displayed in the window, the processes in the window are not
722 below). No value is returned. Default
723 is the current window.
724 .It Ic escape Ns Pq Bq Ar escapec
725 Set the escape character to
728 escape character as a one-character string. Default is no
731 can be a string of a single character, or
735 .No control\- Ns Ar X .
737 .Ic foreground Ns ( Bq Ar window ,
742 in or out of foreground.
744 is a boolean value. The old foreground flag
745 is returned. Default for
747 is the current window,
752 .Ic label Ns ( Bq Ar window ,
760 label as a string. Default for
765 is no change. To turn
766 off a label, set it to an empty string ("").
768 No arguments. List the identifiers and labels of all windows. No
770 .It Ic select Ns Pq Bq Ar window
773 the current window. The previous current window
774 is returned. Default is no change.
775 .It Ic source Ns Pq Ar filename
776 Read and execute the long commands in
778 Returns \-1 if the file cannot be read, 0 otherwise.
779 .It Ic terse Ns Pq Bq flag
782 In terse mode, the command window
783 stays hidden even in command mode, and errors are reported by
784 sounding the terminal's bell.
789 above. Returns the old terse flag.
790 Default is no change.
791 .It Ic unalias Ns Pq Ar alias
798 .It Ic unset Ns Pq Ar variable
805 .It Ic variables Ns Pq
806 No arguments. List all variables. No value is returned.
808 .Ic window Ns ( Bq Ar row ,
821 Open a window with upper left corner at
830 then that many lines are allocated for the text buffer. Otherwise,
831 the default buffer size is used. Default values for
838 the upper, left-most, lower, or right-most extremes of the
847 interpreted in the same way as the argument to
850 they mean, respectively, put a frame around this window (default true),
851 allocate pseudo-terminal for this window rather than socketpair (default
852 true), and map new line characters in this window to carriage return
853 and line feed (default true if socketpair is used, false otherwise).
854 Normally, a window is automatically closed when its process
857 to true (default false) prevents this
860 is true, the screen is updated more frequently
861 (for this window) to produce a more terminal-like behavior.
868 is a list of strings that will be used as the shell
869 program to place in the window (default is the program specified
872 see above). The created window's identifier
873 is returned as a number.
875 .Ic write Ns ( Bq Ar window ,
876 .Bq Aq Ar string\-list )
878 Send the list of strings,
883 by spaces but not terminated with a new line. The strings are actually
884 given to the window as input. No value is returned. Default
885 is the current window.
887 .Ss Predefined Variables
888 These variables are for information only. Redefining them does
889 not affect the internal operation of
891 .Bl -tag -width modes
893 The baud rate as a number between 50 and 38400.
895 The display modes (reverse video, underline, blinking, graphics)
896 supported by the physical terminal. The value of
898 is the bitwise or of some of the one bit values,
905 These values are useful
906 in setting the window cursors' modes (see
910 The blinking mode bit.
912 The graphics mode bit (not very useful).
914 The reverse video mode bit.
916 The underline mode bit.
918 The number of columns on the physical screen.
920 The number of rows on the physical screen.
922 The terminal type. The standard name, found in the second name
923 field of the terminal's
928 utilizes these environment variables:
935 .Bl -tag -width /dev/[pt]ty[pq]? -compact
937 startup command file.
938 .It Pa /dev/[pt]ty[pq]?
939 pseudo-terminal devices.
947 Should be self explanatory.