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