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