xref: /original-bsd/usr.bin/window/window.1 (revision ff2bc52d)
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.roff%
8.\"
9.\"	@(#)window.1	6.15 (Berkeley) 07/26/91
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 ^S
298Stop output in the current window.
299.It Ic ^Q
300Start output in the current window.
301.It Ic :
302Enter a line to be executed as long commands.
303Normal line
304editing characters (erase character, erase word, erase line)
305are supported.
306.El
307.Ss Long Commands
308Long commands are a sequence of statements
309parsed much like a programming language, with a syntax
310similar to that of C.  Numeric and string expressions and variables
311are supported, as well as conditional statements.
312.Pp
313There are two data types: string and number.  A string is a sequence
314of letters or digits beginning with a letter.  ``_'' and ``.'' are
315considered letters.  Alternately, non-alphanumeric characters can
316be included in strings by quoting them in ``"'' or escaping them
317with ``\\''.  In addition, the ``\\'' sequences of C are supported,
318both inside and outside quotes (e.g., ``\\n'' is a new line,
319``\\r'' a carriage return).  For example, these are legal strings:
320abcde01234, "&#$^*&#", ab"$#"cd, ab\\$\\#cd, "/usr/ucb/window".
321.Pp
322A number is an integer value in one of three forms:
323a decimal number, an octal number preceded by ``0'',
324or a hexadecimal number preceded by ``0x'' or ``0X''.  The natural
325machine integer size is used (i.e., the signed integer type
326of the C compiler).  As in C, a non-zero number represents
327a boolean true.
328.Pp
329The character ``#'' begins a comment which terminates at the
330end of the line.
331.Pp
332A statement is either a conditional or an expression.  Expression
333statements are terminated with a new line or ``;''.  To continue
334an expression on the next line, terminate the first line with ``\\''.
335.Ss Conditional Statement
336.Nm Window
337has a single control structure:
338the fully bracketed if statement in the form
339.Pp
340.Bd -literal -offset indent -compact
341if <expr> then
342\t<statement>
343\t...
344elsif <expr> then
345\t<statement>
346\t...
347else
348\t<statement>
349\t...
350endif
351.Ed
352.Pp
353The
354.Ic else
355and
356.Ic elsif
357parts are optional, and the latter can
358be repeated any number of times.
359<Expr>
360must be numeric.
361.Ss Expressions
362Expressions in
363.Nm window
364are similar to those in the
365C language, with most C operators supported on numeric
366operands.  In addition, some are overloaded to operate on strings.
367.Pp
368When an expression is used as a statement, its value is discarded
369after evaluation.  Therefore, only expressions with side
370effects (assignments and function calls) are useful as statements.
371.Pp
372Single valued (no arrays) variables are supported, of both
373numeric and string values.  Some variables are predefined.  They
374are listed below.
375.Pp
376The operators in order of increasing precedence:
377.Bl -tag -width Fl
378.It Xo
379.Aq Va expr1
380.Ic =
381.Aq Va expr2
382.Xc
383Assignment.  The variable of name
384.Aq Va expr1 ,
385which must be string valued,
386is assigned the result of
387.Aq Va expr2 .
388Returns the value of
389.Aq Va expr2 .
390.It Xo
391.Aq Va expr1
392.Ic ?
393.Aq Va expr2
394.Ic :
395.Aq Va expr3
396.Xc
397Returns the value of
398.Aq Va expr2
399if
400.Aq Va expr1
401evaluates true
402(non-zero numeric value); returns the value of
403.Aq Va expr3
404otherwise.  Only
405one of
406.Aq Va expr2
407and
408.Aq Va expr3
409is evaluated.
410.Aq Va Expr1
411must
412be numeric.
413.It Xo
414.Aq Va expr1
415.Ic \&|\&|
416.Aq Va expr2
417.Xc
418Logical or.  Numeric values only.  Short circuit evaluation is supported
419(i.e., if
420.Aq Va expr1
421evaluates true, then
422.Aq Va expr2
423is not evaluated).
424.It Xo
425.Aq Va expr1
426.Ic \&&\&&
427.Aq Va expr2
428.Xc
429Logical and with short circuit evaluation.  Numeric values only.
430.It Xo
431.Aq Va expr1
432.Ic \&|
433.Aq Va expr2
434.Xc
435Bitwise or.  Numeric values only.
436.It Xo
437.Aq Va expr1
438.Ic ^
439.Aq Va expr2
440.Xc
441Bitwise exclusive or.  Numeric values only.
442.It Xo
443.Aq Va expr1
444.Ic \&&
445.Aq Va expr2
446.Xc
447Bitwise and.  Numeric values only.
448.It Xo
449.Aq Va expr1
450.Ic ==
451.Aq Va expr2 ,
452.Aq Va expr1
453.Ic !=
454.Aq expr2
455.Xc
456Comparison (equal and not equal, respectively).  The boolean
457result (either 1 or 0) of the comparison is returned.  The
458operands can be numeric or string valued.  One string operand
459forces the other to be converted to a string in necessary.
460.It Xo
461.Aq Va expr1
462.Ic <
463.Aq Va expr2 ,
464.Aq Va expr1
465.Ic >
466.Aq Va expr2 ,
467.Aq Va expr1
468.Ic <=
469.Aq Va expr2 ,
470.Xc
471Less than, greater than, less than or equal to,
472greater than or equal to.  Both numeric and string values, with
473automatic conversion as above.
474.It Xo
475.Aq Va expr1
476.Ic <<
477.Aq Va expr2 ,
478.Aq Va expr1
479.Ic >>
480.Aq Va expr2
481.Xc
482If both operands are numbers,
483.Aq Va expr1
484is bit
485shifted left (or right) by
486.Aq Va expr2
487bits.  If
488.Aq Va expr1
489is
490a string, then its first (or last)
491.Aq Va expr2
492characters are
493returns (if
494.Aq Va expr2
495is also a string, then its length is used
496in place of its value).
497.It Xo
498.Aq Va expr1
499.Ic +
500.Aq Va expr2 ,
501.Aq Va expr1
502.Ic -
503.Aq Va expr2
504.Xc
505Addition and subtraction on numbers.  For ``+'', if one
506argument is a string, then the other is converted to a string,
507and the result is the concatenation of the two strings.
508.It Xo
509.Aq Va expr1
510.Ic \&*
511.Aq Va expr2 ,
512.Aq Va expr1
513.Ic \&/
514.Aq Va expr2 ,
515.Aq Va expr1
516.Ic \&%
517.Aq Va expr2
518.Xc
519Multiplication, division, modulo.  Numbers only.
520.It Xo
521.Ic \- Ns Aq Va expr ,
522.Ic ~ Ns Aq Va expr ,
523.Ic \&! Ns Aq Va expr ,
524.Ic \&$ Ns Aq Va expr ,
525.Ic \&$? Ns Aq Va expr
526.Xc
527The first three are unary minus, bitwise complement and logical complement
528on numbers only.  The operator, ``$'', takes
529.Aq Va expr
530and returns
531the value of the variable of that name.  If
532.Aq Va expr
533is numeric
534with value
535.Ar n
536and it appears within an alias macro (see below),
537then it refers to the nth argument of the alias invocation.  ``$?''
538tests for the existence of the variable
539.Aq Va expr ,
540and returns 1
541if it exists or 0 otherwise.
542.It Xo
543.Ao Va expr Ac Ns Pq Aq Ar arglist
544.Xc
545Function call.
546.Aq Va Expr
547must be a string that is the unique
548prefix of the name of a builtin
549.Nm window
550function
551or the full name of a user defined alias macro.  In the case of a builtin
552function,
553.Aq Ar arglist
554can be in one of two forms:
555.Bd -literal -offset indent
556<expr1>, <expr2>, ...
557argname1 = <expr1>, argname2 = <expr2>, ...
558.Ed
559.Pp
560The two forms can in fact be intermixed, but the result is
561unpredictable.  Most arguments can be omitted; default values will
562be supplied for them.  The
563.Ar argnames
564can be unique prefixes
565of the the argument names.  The commas separating
566arguments are used only to disambiguate, and can usually be omitted.
567.Pp
568Only the first argument form is valid for user defined aliases.  Aliases
569are defined using the
570.Ic alias
571builtin function (see below).  Arguments
572are accessed via a variant of the variable mechanism (see ``$'' operator
573above).
574.Pp
575Most functions return value, but some are used for side effect
576only and so must be used as statements.  When a function or an alias is used
577as a statement, the parenthesis surrounding
578the argument list may be omitted.  Aliases return no value.
579.El
580.Ss  Builtin Functions
581The arguments are listed by name in their natural
582order.  Optional arguments are in square brackets
583.Sq Op .
584Arguments
585that have no names are in angle brackets
586.Sq <> .
587An argument meant to be a boolean flag (often named
588.Ar flag )
589can be one of
590.Ar on ,
591.Ar off ,
592.Ar yes ,
593.Ar no ,
594.Ar true ,
595or
596.Ar false ,
597with
598obvious meanings, or it can be a numeric expression,
599in which case a non-zero value is true.
600.Bl -tag -width Fl
601.It Xo
602.Ic alias Ns Po Bq Aq Ar string ,
603.Bq Aq Ar string\-list Pc
604.Xc
605If no argument is given, all currently defined alias macros are
606listed.  Otherwise,
607.Aq Ar string
608is defined as an alias,
609with expansion
610.Aq Ar string\-list > .
611The previous definition of
612.Aq Ar string ,
613if any, is returned.  Default for
614.Aq Ar string\-list
615is no change.
616.It Ic close Ns Pq Aq Ar window\-list
617Close the windows specified in
618.Aq Ar window\-list .
619If
620.Aq Ar window\-list
621is the word
622.Ar all  ,
623than all windows are closed.  No value is returned.
624.It Ic cursormodes Ns Pq Bq Ar modes
625Set the window cursor to
626.Ar modes  .
627.Ar Modes
628is the bitwise
629or of the mode bits defined as the variables
630.Ar m_ul
631(underline),
632.Ar m_rev
633(reverse video),
634.Ar m_blk
635(blinking),
636and
637.Ar m_grp
638(graphics, terminal dependent).  Return
639value is the previous modes.  Default is no change.
640For example,
641.Li cursor($m_rev$m_blk)
642sets the window cursors to blinking
643reverse video.
644.It Ic default_nline Ns Pq Bq Ar nline
645Set the default buffer size to
646.Ar nline  .
647Initially, it is
64848 lines.  Returns the old default buffer size.  Default is
649no change.  Using a very large buffer can slow the program down
650considerably.
651.It Ic default_shell Ns Pq Bq Aq Ar string\-list
652Set the default window shell program to
653.Aq Ar string\-list .
654Returns
655the first string in the old shell setting.  Default is no change.  Initially,
656the default shell is taken from the environment variable
657.Ev SHELL  .
658.It Ic default_smooth Ns Pq Bq Ar flag
659Set the default value of the
660.Ar smooth
661argument
662to the command
663.Nm window
664(see below).  The argument
665is a boolean flag (one of
666.Ar on  ,
667.Ar off  ,
668.Ar yes  ,
669.Ar no  ,
670.Ar true  ,
671.Ar false  ,
672or a number,
673as described above).  Default is no change.
674The old value (as a number) is returned.
675The initial value is 1 (true).
676.It Xo
677.Ic echo Ns ( Op Ar window ,
678.Bq Aq Ar string\-list )
679.Xc
680Write the list of strings,
681.Aq Ar string-list ,
682to
683.Nm window  ,
684separated
685by spaces and terminated with a new line.  The strings are only
686displayed in the window, the processes in the window are not
687involved (see
688.Ic write
689below).  No value is returned.  Default
690is the current window.
691.It Ic escape Ns Pq Bq Ar escapec
692Set the escape character to
693.Ar escape-char  .
694Returns the old
695escape character as a one-character string.  Default is no
696change.
697.Ar Escapec
698can be a string of a single character, or
699in the form
700.Fl ^X ,
701meaning
702.No control\- Ns Ar X .
703.It Xo
704.Ic foreground Ns ( Bq Ar window ,
705.Bq Ar flag )
706.Xc
707Move
708.Nm window
709in or out of foreground.
710.Ar Flag
711is a boolean value.  The old foreground flag
712is returned.  Default for
713.Nm window
714is the current window,
715default for
716.Ar flag
717is no change.
718.It Xo
719.Ic label Ns ( Bq Ar window ,
720.Bq Ar label )
721.Xc
722Set the label of
723.Nm window
724to
725.Ar label  .
726Returns the old
727label as a string.  Default for
728.Nm window
729is the current
730window, default for
731.Ar label
732is no change.  To turn
733off a label, set it to an empty string ("").
734.It Ic list Ns Pq
735No arguments.  List the identifiers and labels of all windows.  No
736value is returned.
737.It Ic select Ns Pq Bq Ar window
738Make
739.Nm window
740the current window.  The previous current window
741is returned.  Default is no change.
742.It Ic source Ns Pq Ar filename
743Read and execute the long commands in
744.Ar filename  .
745Returns \-1 if the file cannot be read, 0 otherwise.
746.It Ic terse Ns Pq Bq flag
747Set terse mode to
748.Ar flag  .
749In terse mode, the command window
750stays hidden even in command mode, and errors are reported by
751sounding the terminal's bell.
752.Ar Flag
753can take on the same
754values as in
755.Ar foreground
756above.  Returns the old terse flag.
757Default is no change.
758.It Ic unalias Ns Pq Ar alias
759Undefine
760.Ar alias  .
761Returns -1 if
762.Ar alias
763does not exist,
7640 otherwise.
765.It Ic unset Ns Pq Ar variable
766Undefine
767.Ar variable  .
768Returns -1 if
769.Ar variable
770does not exist,
7710 otherwise.
772.It Ic variables Ns Pq
773No arguments.  List all variables.  No value is returned.
774.It Xo
775.Ic window Ns ( Bq Ar row ,
776.Bq Ar column ,
777.Bq Ar nrow ,
778.Bq Ar ncol ,
779.Bq Ar nline ,
780.Bq Ar label ,
781.Bq Ar pty ,
782.Bq Ar frame ,
783.Bq Ar mapnl ,
784.Bq Ar keepopen ,
785.Bq Ar smooth ,
786.Bq Ar shell ) .
787.Xc
788Open a window with upper left corner at
789.Ar row  ,
790.Ar column
791and size
792.Ar nrow  ,
793.Ar ncol  .
794If
795.Ar nline
796is specified,
797then that many lines are allocated for the text buffer.  Otherwise,
798the default buffer size is used.  Default values for
799.Ar row  ,
800.Ar column  ,
801.Ar nrow  ,
802and
803.Ar ncol
804are, respectively,
805the upper, left-most, lower, or right-most extremes of the
806screen.
807.Ar Label
808is the label string.
809.Ar Frame  ,
810.Ar pty  ,
811and
812.Ar mapnl
813are flag values
814interpreted in the same way as the argument to
815.Ar foreground
816(see above);
817they mean, respectively, put a frame around this window (default true),
818allocate pseudo-terminal for this window rather than socketpair (default
819true), and map new line characters in this window to carriage return
820and line feed (default true if socketpair is used, false otherwise).
821Normally, a window is automatically closed when its process
822exits.  Setting
823.Ar keepopen
824to true (default false) prevents this
825action.  When
826.Ar smooth
827is true, the screen is updated more frequently
828(for this window) to produce a more terminal-like behavior.
829The default value of
830.Ar smooth
831is set by the
832.Ar default_smooth
833command (see above).
834.Ar Shell
835is a list of strings that will be used as the shell
836program to place in the window (default is the program specified
837by
838.Ar default_shell  ,
839see above).  The created window's identifier
840is returned as a number.
841.It Xo
842.Ic write Ns ( Bq Ar window ,
843.Bq Aq Ar string\-list )
844.Xc
845Send the list of strings,
846.Aq Ar string-list ,
847to
848.Nm window  ,
849separated
850by spaces but not terminated with a new line.  The strings are actually
851given to the window as input.  No value is returned.  Default
852is the current window.
853.El
854.Ss Predefined Variables
855These variables are for information only.  Redefining them does
856not affect the internal operation of
857.Nm window  .
858.Bl -tag -width modes
859.It Ar baud
860The baud rate as a number between 50 and 38400.
861.It Ar modes
862The display modes (reverse video, underline, blinking, graphics)
863supported by the physical terminal.  The value of
864.Ar modes
865is the bitwise or of some of the one bit values,
866.Ar m_blk ,
867.Ar m_grp ,
868.Ar m_rev ,
869and
870.Ar m_ul
871(see below).
872These values are useful
873in setting the window cursors' modes (see
874.Ar cursormodes
875above).
876.It Ar m_blk
877The blinking mode bit.
878.It Ar m_grp
879The graphics mode bit (not very useful).
880.It Ar m_rev
881The reverse video mode bit.
882.It Ar m_ul
883The underline mode bit.
884.It Ar ncol
885The number of columns on the physical screen.
886.It Ar nrow
887The number of rows on the physical screen.
888.It Ar term
889The terminal type.  The standard name, found in the second name
890field of the terminal's
891.Ev TERMCAP
892entry, is used.
893.Sh ENVIRONMENT
894.Nm Window
895utilizes these environment variables:
896.Ev HOME ,
897.Ev SHELL ,
898.Ev TERM ,
899.Ev TERMCAP ,
900.Ev WINDOW_ID .
901.Sh FILES
902.Bl -tag -width /dev/[pt]ty[pq]? -compact
903.It Pa ~/.windowrc
904startup command file.
905.It Pa /dev/[pt]ty[pq]?
906pseudo-terminal devices.
907.El
908.Sh HISTORY
909The
910.Nm window
911command appeared in
912.Bx 4.3 .
913.Sh DIAGNOSTICS
914Should be self explanatory.
915