xref: /original-bsd/usr.bin/window/window.1 (revision bff54947)
1.\" Copyright (c) 1985, 1990 The Regents of the University of California.
2.\" All rights reserved.
3.\"
4.\" This code is derived from software contributed to Berkeley by
5.\" Edward Wang at The University of California, Berkeley.
6.\"
7.\" %sccs.include.redist.man%
8.\"
9.\"     @(#)window.1	6.12 (Berkeley) 06/24/90
10.\"
11.Dd
12.Dt WINDOW 1
13.Os BSD 4.3
14.Sh NAME
15.Nm window
16.Nd window environment
17.Sh SYNOPSIS
18.Nm window
19.Op Fl t
20.Op Fl f
21.Op Fl d
22.Op Fl e Ar escape-char
23.Op Fl c Ar command
24.Sh DESCRIPTION
25.Nm Window
26implements a window environment on
27ASCII terminals.
28.Pp
29A window is a rectangular portion of the physical terminal
30screen associated with a set of processes.  Its size and
31position can be changed by the user at any time.  Processes
32communicate with their window in the same way they normally
33interact with a terminal\-through their standard input, output,
34and diagnostic file descriptors.  The window program handles the
35details of redirecting input an output to and from the
36windows.  At any one time, only one window can receive
37input from the keyboard, but all windows can simultaneously send output
38to the display.
39.Pp
40When
41.Nm window
42starts up, the commands (see long commands below)
43contained in the file
44.Pa .windowrc
45in the user's home directory are
46executed.  If it does not exist, two equal sized windows spanning
47the terminal screen are created by default.
48.Pp
49The command line options are
50.Tw Fl
51.Tp Fl t
52Turn on terse mode (see
53.Ic terse
54command below).
55.Tp Fl f
56Fast.  Don't perform any startup action.
57.Tp Fl d
58Ignore
59.Pa .windowrc
60and create the two default
61windows instead.
62.Tp Cx Fl e
63.Cx \&\ \&
64.Ar escape-char
65.Cx
66Set the escape character to
67.Ar escape-char  .
68.Ar Escape-char
69can be a single character, or in the form
70.Ic ^X
71where
72.Ar X
73is any character, meaning
74.Cx control\-
75.Ar X  .
76.Cx
77.Tp Cx Fl c
78.Cx \&\ \&
79.Ar command
80.Cx
81Execute the string
82.Ar command
83as a long command (see below)
84before doing anything else.
85.Tp
86.Pp
87Windows can overlap and are framed as necessary.  Each window
88is named by one of the digits ``1'' to ``9''.  This one-character
89identifier, as well as a user definable label string, are displayed
90with the window on the top edge of its frame.  A window can be
91designated to be in the
92.Ar foreground  ,
93in which case it will always be
94on top of all normal, non-foreground windows, and can be covered
95only by other foreground windows.  A window need not be completely
96within the edges of the terminal screen.  Thus a large window
97(possibly larger than the screen) may be positioned to show only
98a portion of its full size.
99.Pp
100Each window has a cursor and a set of control functions.  Most intelligent
101terminal operations such as line and
102character deletion and insertion are supported.  Display modes
103such as underlining and reverse video are available if they are
104supported by the terminal.  In addition,
105similar to terminals with multiple pages of memory,
106each window has a text buffer which can have more lines than the window
107itself.
108.Ss Process Environment
109With each newly created window, a shell program is spawned with its
110process environment tailored to that window.  Its standard input,
111output, and diagnostic file descriptors are bound to one end of either
112a pseudo-terminal
113.Xr (pty 4 )
114or a UNIX domain socket
115.Xr (socketpair 4 ) .
116If a pseudo-terminal is used, then its special
117characters and modes (see
118.Xr stty 1 )
119are copied from the physical
120terminal.  A
121.Xr termcap 5
122entry tailored to this window is created
123and passed as environment
124.Xr (environ 5 )
125variable
126.Ev TERMCAP  .
127The termcap entry contains the window's size and
128characteristics as well as information from the physical terminal,
129such as the existence of underline, reverse video, and other display
130modes, and the codes produced by the terminal's function keys,
131if any.  In addition, the window size attributes of the pseudo-terminal
132are set to reflect the size of this window, and updated whenever
133it is changed by the user.  In particular, the editor
134.Xr vi 1
135uses
136this information to redraw its display.
137.Ss Operation
138During normal execution,
139.Nm window
140can be in one of two states:
141conversation mode and command mode.  In conversation mode, the
142terminal's real cursor is placed at the cursor position of a particular
143window--called the current window--and input from the keyboard is sent
144to the process in that window.  The current window is always
145on top of all other windows, except those in foreground.  In addition,
146it is set apart by highlighting its identifier and label in reverse video.
147.Pp
148Typing
149.Cx Nm window
150.Cx 's
151.Cx
152escape character (normally
153.Ic ^P )
154in conversation
155mode switches it into command mode.  In command mode, the top line of
156the terminal screen becomes the command prompt window, and
157.Nm window
158interprets input from the keyboard as commands to manipulate windows.
159.Pp
160There are two types of commands: short commands are usually one or two
161key strokes; long commands are strings either typed by the user in the
162command window (see the
163.Dq Ic \&:
164command below), or read from a file (see
165.Ic source
166below).
167.Ss Short Commands
168Below,
169.Ar #
170represents one of the digits ``1'' to ``9''
171corresponding to the windows 1 to 9.
172.Ic ^X
173means
174.Cx control\-
175.Ar X  ,
176.Cx
177where
178.Ar X
179is any character.  In particular,
180.Ic ^^
181is
182.Li control\-^.
183.Ar Escape
184is the escape key, or
185.Ic ^\&[
186.Tw Ds
187.Tp Ar #
188Select window
189.Ar #
190as the current window
191and return to conversation mode.
192.Tp Cx Ic %
193.Ar #
194.Cx
195Select window
196.Ar #
197but stay in command mode.
198.Tp Ic ^^
199Select the previous window and return to conversation
200mode.  This is useful for toggling between two windows.
201.Tp Ic escape
202Return to conversation mode.
203.Tp Ic ^P
204Return to conversation mode and write
205.Ic ^P
206to the
207current window.  Thus, typing two
208.Cx Ic ^P
209.Cx \'s
210.Cx
211in conversation
212mode sends one to the current window.  If the
213.Nm window
214escape is changed to some other character, that
215character takes the place of
216.Ic ^P
217here.
218.Tp Ic ?
219List a short summary of commands.
220.Tp Ic ^L
221Refresh the screen.
222.Tp Ic q
223Exit
224.Nm window  .
225Confirmation is requested.
226.Tp Ic ^Z
227Suspend
228.Nm window  .
229.Tp Ic w
230Create a new window.  The user is prompted for the positions
231of the upper left and lower right corners of the window.
232The cursor is placed on the screen and the keys ``h'', ``j'',
233``k'', and ``l''
234move the cursor left, down, up, and right, respectively.
235The keys ``H'', ``J'', ``K'', and ``L'' move the cursor to the respective
236limits of the screen.  Typing a number before the movement keys
237repeats the movement that number of times.  Return enters the cursor position
238as the upper left corner of the window.  The lower right corner
239is entered in the same manner.  During this process,
240the placement of the new window is indicated by a rectangular
241box drawn on the screen, corresponding to where the new window
242will be framed.  Typing escape at any point
243cancels this command.
244.Pp
245This window becomes the current window,
246and is given the first available ID.  The default buffer size
247is used (see
248.Ar default_nline
249command below).
250.Pp
251Only fully visible windows can be created this way.
252.Tp Cx Ic c
253.Ar #
254.Cx
255Close window
256.Ar # .
257The process in the window is sent
258the hangup signal (see
259.Xr kill 1 ) .
260.Xr Csh 1
261should
262handle this signal correctly and cause no problems.
263.Tp Cx Ic m
264.Ar #
265.Cx
266Move window
267.Ar #
268to another location.  A box in the shape
269of the window is drawn on
270the screen to indicate the new position of the window, and the same keys as
271those for the
272.Ic w
273command are used to position the box.  The
274window can be moved partially off-screen.
275.Tp Cx Ic M
276.Ar #
277.Cx
278Move window
279.Ar #
280to its previous position.
281.Tp Cx Ic s
282.Ar #
283.Cx
284Change the size of window
285.Ar # .
286The user is prompted
287to enter the new lower right corner of the window.  A box
288is drawn to indicate the new window size.  The same
289keys used in
290.Ic w
291and
292.Ic m
293are used to enter the position.
294.Tp Cx Ic S
295.Ar #
296.Cx
297Change window
298.Ar #
299to its previous size.
300.Tp Ic ^Y
301Scroll the current window up by one line.
302.Tp Ic ^E
303Scroll the current window down by one line.
304.Tp Ic ^U
305Scroll the current window up by half the window size.
306.Tp Ic ^D
307Scroll the current window down by half the window size.
308.Tp Ic ^B
309Scroll the current window up by the full window size.
310.Tp Ic ^F
311Scroll the current window down by the full window size.
312.Tp Ic h
313Move the cursor of the current window left by one column.
314.Tp Ic j
315Move the cursor of the current window down by one line.
316.Tp Ic k
317Move the cursor of the current window up by one line.
318.Tp Ic l
319Move the cursor of the current window right by one column.
320.Tp Ic ^S
321Stop output in the current window.
322.Tp Ic ^Q
323Start output in the current window.
324.Tp Ic :
325Enter a line to be executed as long commands.
326Normal line
327editing characters (erase character, erase word, erase line)
328are supported.
329.Tp
330.Ss Long Commands
331Long commands are a sequence of statements
332parsed much like a programming language, with a syntax
333similar to that of C.  Numeric and string expressions and variables
334are supported, as well as conditional statements.
335.Pp
336There are two data types: string and number.  A string is a sequence
337of letters or digits beginning with a letter.  ``_'' and ``.'' are
338considered letters.  Alternately, non-alphanumeric characters can
339be included in strings by quoting them in ``"'' or escaping them
340with ``\\''.  In addition, the ``\\'' sequences of C are supported,
341both inside and outside quotes (e.g., ``\\n'' is a new line,
342``\\r'' a carriage return).  For example, these are legal strings:
343abcde01234, "&#$^*&#", ab"$#"cd, ab\\$\\#cd, "/usr/ucb/window".
344.Pp
345A number is an integer value in one of three forms:
346a decimal number, an octal number preceded by ``0'',
347or a hexadecimal number preceded by ``0x'' or ``0X''.  The natural
348machine integer size is used (i.e., the signed integer type
349of the C compiler).  As in C, a non-zero number represents
350a boolean true.
351.Pp
352The character ``#'' begins a comment which terminates at the
353end of the line.
354.Pp
355A statement is either a conditional or an expression.  Expression
356statements are terminated with a new line or ``;''.  To continue
357an expression on the next line, terminate the first line with ``\\''.
358.Ss Conditional Statement
359.Nm Window
360has a single control structure:
361the fully bracketed if statement in the form
362.Pp
363.Ds I
364if <expr> then
365\t<statement>
366\t...
367elsif <expr> then
368\t<statement>
369\t...
370else
371\t<statement>
372\t...
373endif
374.De
375.Pp
376The
377.Ic else
378and
379.Ic elsif
380parts are optional, and the latter can
381be repeated any number of times.
382<Expr>
383must be numeric.
384.Ss Expressions
385Expressions in
386.Nm window
387are similar to those in the
388C language, with most C operators supported on numeric
389operands.  In addition, some are overloaded to operate on strings.
390.Pp
391When an expression is used as a statement, its value is discarded
392after evaluation.  Therefore, only expressions with side
393effects (assignments and function calls) are useful as statements.
394.Pp
395Single valued (no arrays) variables are supported, of both
396numeric and string values.  Some variables are predefined.  They
397are listed below.
398.Pp
399The operators in order of increasing precedence:
400.Tw Fl
401.Tp Cx <
402.Va expr1
403.Cx >
404.Cx \&\ \&
405.Ic =
406.Cx \&\ \&
407.Cx <
408.Va expr2
409.Cx >
410.Cx
411Assignment.  The variable of name
412.Cx <
413.Va expr1
414.Cx >,
415.Cx
416which must be string valued,
417is assigned the result of
418.Cx <
419.Va expr2
420.Cx >.
421.Cx
422Returns the value of
423.Cx <
424.Va expr2
425.Cx >.
426.Cx
427.Tp Cx <
428.Va expr1
429.Cx >
430.Cx \&\ \&
431.Ic ?
432.Cx \&\ \&
433.Cx <
434.Va expr2
435.Cx >
436.Cx \&\ \&
437.Ic :
438.Cx \&\ \&
439.Cx <
440.Va expr3
441.Cx >
442.Cx
443Returns the value of
444.Cx <
445.Va expr2
446.Cx >
447.Cx
448if
449.Cx <
450.Va expr1
451.Cx >
452.Cx
453evaluates true
454(non-zero numeric value); returns the value of
455.Cx <
456.Va expr3
457.Cx >
458.Cx
459otherwise.  Only
460one of
461.Cx <
462.Va expr2
463.Cx >
464.Cx
465and
466.Cx <
467.Va expr3
468.Cx >
469.Cx
470is evaluated.
471.Cx <
472.Va Expr1
473.Cx >
474.Cx
475must
476be numeric.
477.Tp Cx <
478.Va expr1
479.Cx >
480.Cx \&\ \&
481.Ic \&|\&|
482.Cx \&\ \&
483.Cx <
484.Va expr2
485.Cx >
486.Cx
487Logical or.  Numeric values only.  Short circuit evaluation is supported
488(i.e., if
489.Cx <
490.Va expr1
491.Cx >
492.Cx
493evaluates true, then
494.Cx <
495.Va expr2
496.Cx >
497.Cx
498is not evaluated).
499.Tp Cx <
500.Va expr1
501.Cx >
502.Cx \&\ \&
503.Ic \&&\&&
504.Cx \&\ \&
505.Cx <
506.Va expr2
507.Cx >
508.Cx
509Logical and with short circuit evaluation.  Numeric values only.
510.Tp Cx <
511.Va expr1
512.Cx >
513.Cx \&\ \&
514.Ic \&|
515.Cx \&\ \&
516.Cx <
517.Va expr2
518.Cx >
519.Cx
520Bitwise or.  Numeric values only.
521.Tp Cx <
522.Va expr1
523.Cx >
524.Cx \&\ \&
525.Ic ^
526.Cx \&\ \&
527.Cx <
528.Va expr2
529.Cx >
530.Cx
531Bitwise exclusive or.  Numeric values only.
532.Tp Cx <
533.Va expr1
534.Cx >
535.Cx \&\ \&
536.Ic \&&
537.Cx \&\ \&
538.Cx <
539.Va expr2
540.Cx >
541.Cx
542Bitwise and.  Numeric values only.
543.Tp Cx <
544.Va expr1
545.Cx >
546.Cx \&\ \&
547.Ic =
548.Cx \&\ \&
549.Cx <
550.Va expr2
551.Cx >,
552.Cx \&\ \&
553.Va expr1
554.Cx >
555.Cx \&\ \&
556.Ic !=
557.Cx \&\ \&
558.Cx <
559.Va expr2
560.Cx >
561.Cx
562Comparison (equal and not equal, respectively).  The boolean
563result (either 1 or 0) of the comparison is returned.  The
564operands can be numeric or string valued.  One string operand
565forces the other to be converted to a string in necessary.
566.Tp Cx <
567.Va expr1
568.Cx >
569.Cx \&\ \&
570.Ic <
571.Cx \&\ \&
572.Cx <
573.Va expr2
574.Cx >,
575.Cx \&\ \&
576.Va expr1
577.Cx >
578.Cx \&\ \&
579.Ic >
580.Cx \&\ \&
581.Cx <
582.Va expr2
583.Cx >,
584.Cx \&\ \&
585.Va expr1
586.Cx >
587.Cx \&\ \&
588.Ic <=
589.Cx \&\ \&
590.Cx <
591.Va expr2
592.Cx >,
593.Cx
594Less than, greater than, less than or equal to,
595greater than or equal to.  Both numeric and string values, with
596automatic conversion as above.
597.Tp Cx <
598.Va expr1
599.Cx >
600.Cx \&\ \&
601.Ic <<
602.Cx \&\ \&
603.Cx <
604.Va expr2
605.Cx >,
606.Cx \&\ \&
607.Va expr1
608.Cx >
609.Cx \&\ \&
610.Ic >>
611.Cx \&\ \&
612.Cx <
613.Va expr2
614.Cx >
615.Cx
616If both operands are numbers,
617.Cx <
618.Va expr1
619.Cx >
620.Cx
621is bit
622shifted left (or right) by
623.Cx <
624.Va expr2
625.Cx >
626.Cx
627bits.  If
628.Cx <
629.Va expr1
630.Cx >
631.Cx
632is
633a string, then its first (or last)
634.Cx <
635.Va expr2
636.Cx >
637.Cx
638characters are
639returns (if
640.Cx <
641.Va expr2
642.Cx >
643.Cx
644is also a string, then its length is used
645in place of its value).
646.Tp Cx <
647.Va expr1
648.Cx >
649.Cx \&\ \&
650.Ic +
651.Cx \&\ \&
652.Cx <
653.Va expr2
654.Cx >,
655.Cx \&\ \&
656.Va expr1
657.Cx >
658.Cx \&\ \&
659.Ic -
660.Cx \&\ \&
661.Cx <
662.Va expr2
663.Cx >
664.Cx
665Addition and subtraction on numbers.  For ``+'', if one
666argument is a string, then the other is converted to a string,
667and the result is the concatenation of the two strings.
668.Tp Cx <
669.Va expr1
670.Cx >
671.Cx \&\ \&
672.Ic \&*
673.Cx \&\ \&<
674.Va expr2
675.Cx >,
676.Cx \&\ \&<
677.Va expr1
678.Cx >
679.Cx \&\ \&
680.Ic \&/
681.Cx \&\ \&<
682.Va expr2
683.Cx >,\&\ \&<
684.Va expr1
685.Cx >,
686.Cx \&\ \&<
687.Va expr1
688.Cx >
689.Cx \&\ \&
690.Ic \&%
691.Cx \&\ \&<
692.Va expr2
693.Cx >
694.Cx
695Multiplication, division, modulo.  Numbers only.
696.Tp Cx <
697.Va expr
698.Cx >,
699.Cx \&\ \&
700.Ic ~
701.Cx <
702.Va expr
703.Cx >,
704.Cx \&\ \&
705.Ic \&!
706.Cx <
707.Va expr
708.Cx >,
709.Cx \&\ \&
710.Ic \&$
711.Cx <
712.Va expr
713.Cx >,
714.Cx \&\ \&
715.Ic \&$?
716.Cx <
717.Va expr
718.Cx >
719.Cx
720The first three are unary minus, bitwise complement and logical complement
721on numbers only.  The operator, ``$'', takes
722.Cx <
723.Va expr
724.Cx >
725.Cx
726and returns
727the value of the variable of that name.  If
728.Cx <
729.Va expr
730.Cx >
731.Cx
732is numeric
733with value
734.Ar n
735and it appears within an alias macro (see below),
736then it refers to the nth argument of the alias invocation.  ``$?''
737tests for the existence of the variable
738.Cx <
739.Va expr
740.Cx >,
741.Cx
742and returns 1
743if it exists or 0 otherwise.
744.Tp Cx <
745.Va expr
746.Cx >(<
747.Ar arglist
748.Cx >)
749.Cx
750Function call.
751.Cx <
752.Va Expr
753.Cx >
754.Cx
755must be a string that is the unique
756prefix of the name of a builtin
757.Nm window
758function
759or the full name of a user defined alias macro.  In the case of a builtin
760function,
761.Cx <
762.Ar arglist
763.Cx >
764.Cx
765can be in one of two forms:
766.Dl <expr1>, <expr2>, ...
767.Dl argname1 = <expr1>, argname2 = <expr2>, ...
768The two forms can in fact be intermixed, but the result is
769unpredictable.  Most arguments can be omitted; default values will
770be supplied for them.  The
771.Ar argnames
772can be unique prefixes
773of the the argument names.  The commas separating
774arguments are used only to disambiguate, and can usually be omitted.
775.Pp
776Only the first argument form is valid for user defined aliases.  Aliases
777are defined using the
778.Ic alias
779builtin function (see below).  Arguments
780are accessed via a variant of the variable mechanism (see ``$'' operator
781above).
782.Pp
783Most functions return value, but some are used for side effect
784only and so must be used as statements.  When a function or an alias is used
785as a statement, the parenthesis surrounding
786the argument list may be omitted.  Aliases return no value.
787.Tp
788.Ss  Builtin Functions
789The arguments are listed by name in their natural
790order.  Optional arguments are in square brackets
791.Sq Op .
792Arguments
793that have no names are in angle brackets
794.Sq <> .
795An argument meant to be a boolean flag (often named
796.Ar flag )
797can be one of
798.Ar on ,
799.Ar off ,
800.Ar yes ,
801.Ar no ,
802.Ar true ,
803or
804.Ar false ,
805with
806obvious meanings, or it can be a numeric expression,
807in which case a non-zero value is true.
808.Tw Fl
809.Tp Cx Ic alias
810.Cx \&([<
811.Ar string
812.Cx ]>,
813.Cx \&\ \&[<
814.Ar  string\-list
815.Cx >]\&)
816.Cx
817If no argument is given, all currently defined alias macros are
818listed.  Otherwise,
819.Cx <
820.Ar string
821.Cx >
822.Cx
823is defined as an alias,
824with expansion
825.Cx <
826.Ar string\-list
827.Cx > .
828.Cx
829The previous definition of
830.Cx <
831.Ar string
832.Cx >,
833.Cx
834if any, is returned.  Default for
835.Cx <
836.Ar string\-list
837.Cx >
838.Cx
839is no change.
840.Tp Cx Ic close
841.Cx (<
842.Ar window\-list
843.Cx >)
844.Cx
845Close the windows specified in
846.Cx <
847.Ar window\-list
848.Cx >.
849.Cx
850If
851.Cx <
852.Ar window\-list
853.Cx >
854.Cx
855is the word
856.Ar all  ,
857than all windows are closed.  No value is returned.
858.Tp Cx Ic cursormodes
859.Cx \&(
860.Op Ar modes
861.Cx \&)
862.Cx
863Set the window cursor to
864.Ar modes  .
865.Ar Modes
866is the bitwise
867or of the mode bits defined as the variables
868.Ar m_ul
869(underline),
870.Ar m_rev
871(reverse video),
872.Ar m_blk
873(blinking),
874and
875.Ar m_grp
876(graphics, terminal dependent).  Return
877value is the previous modes.  Default is no change.
878For example,
879.Li cursor($m_rev$m_blk)
880sets the window cursors to blinking
881reverse video.
882.Tp Cx Ic default_nline
883.Cx \&(
884.Op Ar nline
885.Cx \&)
886.Cx
887Set the default buffer size to
888.Ar nline  .
889Initially, it is
89048 lines.  Returns the old default buffer size.  Default is
891no change.  Using a very large buffer can slow the program down
892considerably.
893.Tp Cx Ic default_shell
894.Cx \&([<
895.Ar string\-list
896.Cx >]\&)
897.Cx
898Set the default window shell program to
899.Cx <
900.Ar string\-list
901.Cx >.
902.Cx
903Returns
904the first string in the old shell setting.  Default is no change.  Initially,
905the default shell is taken from the environment variable
906.Ev SHELL  .
907.Tp Cx Ic default_smooth
908.Cx \&(
909.Op Ar flag
910.Cx \&)
911.Cx
912Set the default value of the
913.Ar smooth
914argument
915to the command
916.Nm window
917(see below).  The argument
918is a boolean flag (one of
919.Ar on  ,
920.Ar off  ,
921.Ar yes  ,
922.Ar no  ,
923.Ar true  ,
924.Ar false  ,
925or a number,
926as described above).  Default is no change.
927The old value (as a number) is returned.
928The initial value is 1 (true).
929.Tp Cx Ic echo
930.Cx \&(
931.Op Ar window
932.Cx \&,\&\ \&[<
933.Ar string\-list
934.Cx >]\&)
935.Cx
936Write the list of strings,
937.Cx <
938.Ar string-list
939.Cx >,
940.Cx
941to
942.Nm window  ,
943separated
944by spaces and terminated with a new line.  The strings are only
945displayed in the window, the processes in the window are not
946involved (see
947.Ic write
948below).  No value is returned.  Default
949is the current window.
950.Tp Cx Ic escape
951.Cx \&(
952.Op Ar escapec
953.Cx \&)
954.Cx
955Set the escape character to
956.Ar escape-char  .
957Returns the old
958escape character as a one-character string.  Default is no
959change.
960.Ar Escapec
961can be a string of a single character, or
962in the form
963.Fl ^X ,
964meaning
965Cx control\-
966.Ar X
967.Cx .
968.Cx
969.Tp Cx Ic foreground
970.Cx \&(
971.Op Ar window
972.Cx \&,
973.Op Ar flag
974.Cx \&)
975.Cx
976Move
977.Nm window
978in or out of foreground.
979.Ar Flag
980is a boolean value.  The old foreground flag
981is returned.  Default for
982.Nm window
983is the current window,
984default for
985.Ar flag
986is no change.
987.Tp Cx Ic label
988.Cx \&(
989.Op Ar window
990.Cx \&,
991.Op Ar label
992.Cx \&)
993.Cx
994Set the label of
995.Nm window
996to
997.Ar label  .
998Returns the old
999label as a string.  Default for
1000.Nm window
1001is the current
1002window, default for
1003.Ar label
1004is no change.  To turn
1005off a label, set it to an empty string ("").
1006.Tp Cx Ic list
1007.Cx \&( \&)
1008.Cx
1009No arguments.  List the identifiers and labels of all windows.  No
1010value is returned.
1011.Tp Cx Ic select
1012.Cx \&(
1013.Op Ar window
1014.Cx \&)
1015.Cx
1016Make
1017.Nm window
1018the current window.  The previous current window
1019is returned.  Default is no change.
1020.Tp Cx Ic source
1021.Cx \&(
1022.Ar filename
1023.Cx \&)
1024.Cx
1025Read and execute the long commands in
1026.Ar filename  .
1027Returns -1 if the file cannot be read, 0 otherwise.
1028.Tp Cx Ic terse
1029.Cx \&(
1030.Op flag
1031.Cx \&)
1032.Cx
1033Set terse mode to
1034.Ar flag  .
1035In terse mode, the command window
1036stays hidden even in command mode, and errors are reported by
1037sounding the terminal's bell.
1038.Ar Flag
1039can take on the same
1040values as in
1041.Ar foreground
1042above.  Returns the old terse flag.
1043Default is no change.
1044.Tp Cx Ic unalias
1045.Cx \&(
1046.Ar alias
1047.Cx \&)
1048.Cx
1049Undefine
1050.Ar alias  .
1051Returns -1 if
1052.Ar alias
1053does not exist,
10540 otherwise.
1055.Tp Cx Ic unset
1056.Cx \&(
1057.Ar variable
1058.Cx \&)
1059.Cx
1060Undefine
1061.Ar variable  .
1062Returns -1 if
1063.Ar variable
1064does not exist,
10650 otherwise.
1066.Tp Cx Ic variables
1067.Cx \&( \&)
1068.Cx
1069No arguments.  List all variables.  No value is returned.
1070.Tp Cx Ic window
1071.Cx \&(
1072.Op Ar row
1073.Cx \&,
1074.Cx \&\ \&
1075.Op Ar column
1076.Cx \&,
1077.Cx \&\ \&
1078.Op Ar nrow
1079.Cx \&,
1080.Cx \&\ \&
1081.Op Ar ncol
1082.Cx \&,
1083.Cx \&\ \&
1084.Op Ar nline
1085.Cx \&,
1086.Cx \&\ \&
1087.Op Ar label
1088.Cx \&,
1089.Cx \&\ \&
1090.Cx Op Ar pty
1091.Cx \&,
1092.Cx
1093.Op Ar frame
1094.Cx \&,
1095.Cx \&\ \&
1096.Op Ar mapnl
1097.Cx \&,
1098.Cx \&\ \&
1099.Op Ar keepopen
1100.Cx \&,
1101.Cx \&\ \&
1102.Op Ar smooth
1103.Cx \&,
1104.Cx \&\ \&
1105.Op Ar shell
1106.Cx \&).
1107.Cx
1108Open a window with upper left corner at
1109.Ar row  ,
1110.Ar column
1111and size
1112.Ar nrow  ,
1113.Ar ncol  .
1114If
1115.Ar nline
1116is specified,
1117then that many lines are allocated for the text buffer.  Otherwise,
1118the default buffer size is used.  Default values for
1119.Ar row  ,
1120.Ar column  ,
1121.Ar nrow  ,
1122and
1123.Ar ncol
1124are, respectively,
1125the upper, left-most, lower, or right-most extremes of the
1126screen.
1127.Ar Label
1128is the label string.
1129.Ar Frame  ,
1130.Ar pty  ,
1131and
1132.Ar mapnl
1133are flag values
1134interpreted in the same way as the argument to
1135.Ar foreground
1136(see above);
1137they mean, respectively, put a frame around this window (default true),
1138allocate pseudo-terminal for this window rather than socketpair (default
1139true), and map new line characters in this window to carriage return
1140and line feed (default true if socketpair is used, false otherwise).
1141Normally, a window is automatically closed when its process
1142exits.  Setting
1143.Ar keepopen
1144to true (default false) prevents this
1145action.  When
1146.Ar smooth
1147is true, the screen is updated more frequently
1148(for this window) to produce a more terminal-like behavior.
1149The default value of
1150.Ar smooth
1151is set by the
1152.Ar default_smooth
1153command (see above).
1154.Ar Shell
1155is a list of strings that will be used as the shell
1156program to place in the window (default is the program specified
1157by
1158.Ar default_shell  ,
1159see above).  The created window's identifier
1160is returned as a number.
1161.Tp Cx Ic write
1162.Cx \&(
1163.Op Ar window
1164.Cx \&,\&\ \&[<
1165.Ar string\-list
1166.Cx >]\&)
1167.Cx
1168Send the list of strings,
1169.Cx <
1170.Ar string-list
1171.Cx >,
1172.Cx
1173to
1174.Nm window  ,
1175separated
1176by spaces but not terminated with a new line.  The strings are actually
1177given to the window as input.  No value is returned.  Default
1178is the current window.
1179.Tp
1180.Ss Predefined Variables
1181These variables are for information only.  Redefining them does
1182not affect the internal operation of
1183.Nm window  .
1184.Tw Fl
1185.Tp Ar baud
1186The baud rate as a number between 50 and 38400.
1187.Tp Ar modes
1188The display modes (reverse video, underline, blinking, graphics)
1189supported by the physical terminal.  The value of
1190.Ar modes
1191is the bitwise or of some of the one bit values,
1192.Ar m_blk ,
1193.Ar m_grp ,
1194.Ar m_rev ,
1195and
1196.Ar m_ul
1197(see below).
1198These values are useful
1199in setting the window cursors' modes (see
1200.Ar cursormodes
1201above).
1202.Tp Ar m_blk
1203The blinking mode bit.
1204.Tp Ar m_grp
1205The graphics mode bit (not very useful).
1206.Tp Ar m_rev
1207The reverse video mode bit.
1208.Tp Ar m_ul
1209The underline mode bit.
1210.Tp Ar ncol
1211The number of columns on the physical screen.
1212.Tp Ar nrow
1213The number of rows on the physical screen.
1214.Tp Ar term
1215The terminal type.  The standard name, found in the second name
1216field of the terminal's
1217.Ev TERMCAP
1218entry, is used.
1219.Sh ENVIRONMENT
1220.Nm Window
1221utilizes these environment variables:
1222.Ev HOME ,
1223.Ev SHELL ,
1224.Ev TERM ,
1225.Ev TERMCAP ,
1226.Ev WINDOW_ID .
1227.Sh FILES
1228.Dw /dev/[pt]ty[pq]?
1229.Di L
1230.Dp Pa ~/.windowrc
1231startup command file.
1232.Dp Cx Pa /dev/
1233.Op Pa pt
1234.Cx ty
1235.Op Pa pq
1236.Cx ?
1237.Cx
1238pseudo-terminal devices.
1239.Dp
1240.Sh HISTORY
1241.Nm window
1242appeared in 4.3 BSD.
1243.Sh DIAGNOSTICS
1244Should be self explanatory.
1245