Annotation of 43BSDReno/usr.bin/window/window.1, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.