Annotation of researchv9/jtools/man/man1/sam.1, revision 1.1

1.1     ! root        1: .ds a \fR*\ \fP
        !             2: .TH SAM 1
        !             3: .CT 1 editor
        !             4: .SH NAME
        !             5: sam \- screen editor with structural regular expressions 
        !             6: .SH SYNOPSIS
        !             7: .I sam
        !             8: [
        !             9: .B -d
        !            10: ]
        !            11: [
        !            12: .I files
        !            13: ]
        !            14: .PP
        !            15: .I sam
        !            16: .B -r
        !            17: .I machine
        !            18: .PP
        !            19: .B sam.save
        !            20: .SH DESCRIPTION
        !            21: .I Sam
        !            22: is a multi-file editor.
        !            23: It modifies a local copy of a Unix file.
        !            24: The copy is here called a
        !            25: .IR file ;
        !            26: a Unix file is distinguished by the trademarked
        !            27: adjective.
        !            28: The files are listed in a menu available through mouse button 3
        !            29: or the
        !            30: .B n
        !            31: command.
        !            32: Each file has an associated name, usually the name of the
        !            33: Unix file from which it was read, and a `modified' bit that indicates whether
        !            34: the editor's file agrees with the Unix file.
        !            35: The Unix file is not read into
        !            36: the editor's file until it first becomes the current file\(emthat to
        !            37: which editing commands apply\(emwhereupon its menu entry is printed.
        !            38: The option
        !            39: .B -d
        !            40: inhibits downloading of the software
        !            41: for the terminal, allowing editing using the command language on an
        !            42: ordinary terminal, much like
        !            43: .IR ed (1).
        !            44: Specifying
        !            45: .B -r
        !            46: .I machine
        !            47: (with no files) runs the host part of
        !            48: .I sam
        !            49: on the specified machine, with the terminal part loaded locally.
        !            50: The effect of this is to allow
        !            51: .I sam
        !            52: to edit files on machines that do not support bitmap graphics.
        !            53: .SS Regular expressions
        !            54: Regular expressions are as in
        !            55: .IR egrep 
        !            56: (see
        !            57: .IR grep (1)),
        !            58: with the addition of
        !            59: .B @
        !            60: and
        !            61: .BR \en .
        !            62: A regular expression may never contain a literal newline character.
        !            63: The elements of regular expressions are:
        !            64: .TP
        !            65: .B .
        !            66: Match any character except newline.
        !            67: .TP
        !            68: .B \en
        !            69: match newline.
        !            70: .TP
        !            71: .B \ex
        !            72: For any character except
        !            73: .B n
        !            74: match the character (here
        !            75: .BR x ).
        !            76: .TP
        !            77: .B @
        !            78: Match any character.
        !            79: .TP
        !            80: .B [abc]
        !            81: Match any character in the square brackets.
        !            82: .B \en
        !            83: may be mentioned.
        !            84: .TP
        !            85: .B [^abc]
        !            86: Match any character not in the square brackets, but never a newline.
        !            87: Both these forms accept a range of
        !            88: .SM ASCII
        !            89: characters indicated by
        !            90: a dash, as in
        !            91: .BR a-z .
        !            92: .TP
        !            93: .B ^
        !            94: Match the null string immediately after a newline.
        !            95: .TP
        !            96: .B $
        !            97: Match the null string immediately before a newline.
        !            98: .PP
        !            99: Any other character except newline matches itself.
        !           100: .PP
        !           101: In the following,
        !           102: .I r1
        !           103: and
        !           104: .I r2
        !           105: are regular expressions.
        !           106: .TP
        !           107: .BI ( r1 )
        !           108: Match what
        !           109: .I r1
        !           110: matches.
        !           111: .TP
        !           112: .IB r1 | r2
        !           113: Match what
        !           114: .I r1
        !           115: or what
        !           116: .IR r2
        !           117: matches.
        !           118: .TP
        !           119: .IB r1 *
        !           120: Match zero or more adjacent matches
        !           121: of
        !           122: .IR r1 .
        !           123: .TP
        !           124: .IB r1 +
        !           125: Match one or more adjacent matches of
        !           126: .IR r1 .
        !           127: .TP
        !           128: .B  r1 ?
        !           129: Match zero or one matches of
        !           130: .IR r1 .
        !           131: .PP
        !           132: The operators
        !           133: .BR * ,
        !           134: .B +
        !           135: and
        !           136: .B ?
        !           137: are highest precedence, then catenation, then
        !           138: .B |
        !           139: is lowest.
        !           140: The empty
        !           141: regular expression stands for the last complete expression encountered.
        !           142: A regular expression in
        !           143: .I sam
        !           144: matches the longest leftmost substring formally
        !           145: matched by the expression.
        !           146: Searching in the reverse direction is equivalent
        !           147: to searching backwards with the catenation operations reversed in
        !           148: the expression.
        !           149: .SS Addresses
        !           150: An address identifies a substring in a file.
        !           151: In the following, `character
        !           152: .IR n '
        !           153: means the null string
        !           154: before the
        !           155: .IR n -th
        !           156: character in the file, with 0 the
        !           157: first character in the file.
        !           158: `Line
        !           159: .IR n '
        !           160: means the
        !           161: .IR n -th
        !           162: match,
        !           163: starting at the beginning of the file, of the regular expression
        !           164: .L .*\en? .
        !           165: (The peculiar properties of a last line without a newline are
        !           166: temporarily undefined.)
        !           167: All files always have a current substring, called dot,
        !           168: that is the default address.
        !           169: .SS Simple Addresses
        !           170: .TP
        !           171: .BI # n
        !           172: The empty string after character
        !           173: .IR n ;
        !           174: .B #0
        !           175: is the beginning of the file.
        !           176: .TP
        !           177: .I n
        !           178: Line
        !           179: .IR n .
        !           180: .TP
        !           181: .BI  / regexp /
        !           182: .PD0
        !           183: .TP
        !           184: .BI ? regexp ?
        !           185: The substring that matches the regular expression,
        !           186: found by looking toward the end 
        !           187: .RB ( / )
        !           188: or beginning
        !           189: .RB ( ? )
        !           190: of the file,
        !           191: and if necessary continuing the search from the other end to the
        !           192: starting point of the search
        !           193: The matched substring may straddle
        !           194: the starting point.
        !           195: .PD
        !           196: .TP
        !           197: .B 0
        !           198: The string before the first full line
        !           199: This is not necessarily
        !           200: the null string; see
        !           201: .B +
        !           202: and
        !           203: .B -
        !           204: below.
        !           205: .TP
        !           206: .B $
        !           207: The null string at the end of the file.
        !           208: .TP
        !           209: .B .
        !           210: Dot.
        !           211: .TP
        !           212: .B \&'
        !           213: The mark in the file (see the
        !           214: .B k
        !           215: command below).
        !           216: .TP
        !           217: \f(CW"\f2regexp\f(CW"\f1\f1
        !           218: Preceding a simple address (default
        !           219: .BR . ),
        !           220: refers to the address evaluated in the unique file whose menu line
        !           221: matches the regular expression.
        !           222: .SS Compound Addresses
        !           223: In the following,
        !           224: .I a1
        !           225: and
        !           226: .I a2
        !           227: are addresses.
        !           228: .TP
        !           229: .IB a1 + a2
        !           230: The address
        !           231: .I a2
        !           232: evaluated starting at the end of
        !           233: .IR a1 .
        !           234: .TP
        !           235: .IB a1 - a2
        !           236: The address
        !           237: .I a2
        !           238: evaluated looking in the reverse direction
        !           239: starting at the beginning of
        !           240: .IR a1 .
        !           241: .TP
        !           242: .IB a1 , a2
        !           243: The substring from the beginning of
        !           244: .I a1
        !           245: to the end of
        !           246: .IR a2 .
        !           247: If
        !           248: .I a1
        !           249: is missing,
        !           250: .B 0
        !           251: is substituted
        !           252: If
        !           253: .I a2
        !           254: is missing,
        !           255: .B $
        !           256: is substituted.
        !           257: .TP
        !           258: .IB  a1 ; a2
        !           259: Like
        !           260: .IB a1 , a2,
        !           261: but with
        !           262: .I a2
        !           263: evaluated at the end of, and dot set to,
        !           264: .IR a1 .
        !           265: .PP
        !           266: The operators
        !           267: .B +
        !           268: and
        !           269: .B -
        !           270: are high precedence, while
        !           271: .B ,
        !           272: and
        !           273: .B ;
        !           274: are low precedence.
        !           275: .PP
        !           276: In both
        !           277: .B +
        !           278: and
        !           279: .B -
        !           280: forms, if
        !           281: .I a2
        !           282: is a line or character address with a missing
        !           283: number, the number defaults to 1.
        !           284: If
        !           285: .I a1
        !           286: is missing,
        !           287: .L .
        !           288: is substituted.
        !           289: If both
        !           290: .I a1
        !           291: and
        !           292: .I a2
        !           293: are present and distinguishable,
        !           294: .B +
        !           295: may be elided.
        !           296: .I a2
        !           297: may be a regular
        !           298: expression; if it is delimited by
        !           299: .LR ? 's,
        !           300: the effect of the
        !           301: .B +
        !           302: or
        !           303: .B -
        !           304: is reversed.
        !           305: .PP
        !           306: It is an error for a compound address to represent a malformed substring.
        !           307: Some useful idioms: 
        !           308: .IB a1 +- 
        !           309: .RI ( a1 \&\f5-+\fP )
        !           310: selects the line containing
        !           311: the end (beginning) of a1.
        !           312: .BI 0/ regexp /
        !           313: locates the first match of the expression in the file.
        !           314: (The form
        !           315: .B 0;//
        !           316: sets dot unnecessarily.)
        !           317: .BI ./ regexp /// 
        !           318: finds the second following occurrence of the expression,
        !           319: and
        !           320: .BI .,/ regexp /
        !           321: extends dot.
        !           322: .SS Commands
        !           323: In the following, text demarcated by slashes represents text delimited
        !           324: by any printable
        !           325: .SM ASCII
        !           326: character except alphanumerics.
        !           327: Any number of
        !           328: trailing delimiters may be elided, with multiple elisions then representing
        !           329: null strings, but the first delimiter must always
        !           330: be present.
        !           331: In any delimited text,
        !           332: newline may not appear literally;
        !           333: .B \en
        !           334: may be typed for newline; and
        !           335: .B \e/
        !           336: quotes the delimiter, here 
        !           337: .LR / .
        !           338: Backslash is otherwise interpreted literally, except in
        !           339: .B s
        !           340: commands.
        !           341: .PP
        !           342: Most commands may be prefixed by an address to indicate their range
        !           343: of operation.
        !           344: Those that may not are marked with a 
        !           345: .L *
        !           346: below.
        !           347: If a command takes
        !           348: an address and none is supplied, dot is used.
        !           349: The sole exception is
        !           350: the
        !           351: .B w
        !           352: command, which defaults to
        !           353: .BR 0,$ .
        !           354: In the description, `range' is used
        !           355: to represent whatever address is supplied.
        !           356: Many commands set the
        !           357: value of dot as a side effect.
        !           358: If so, it is always set to the `result'
        !           359: of the change: the empty string for a deletion, the new text for an
        !           360: insertion, etc. (but see the
        !           361: .B s
        !           362: and
        !           363: .B e
        !           364: commands).
        !           365: .br
        !           366: .ne 1.2i
        !           367: .SS Text commands
        !           368: .PD0
        !           369: .TP
        !           370: .BI a/ text /
        !           371: .TP
        !           372: or
        !           373: .TP
        !           374: .B  a
        !           375: .TP
        !           376: .I lines of text
        !           377: .TP
        !           378: .B .
        !           379: Insert the text into the file after the range.
        !           380: Set dot.
        !           381: .TP
        !           382: .B c\fP
        !           383: .br
        !           384: .ns
        !           385: .TP
        !           386: .B i\fP
        !           387: Same as
        !           388: .BR a ,
        !           389: but
        !           390: .B c
        !           391: replaces the text, while
        !           392: .B i
        !           393: inserts
        !           394: .I before
        !           395: the range.
        !           396: .TP
        !           397: .B d
        !           398: Delete the text in the range.
        !           399: Set dot.
        !           400: .TP
        !           401: .BI s/ regexp / text /
        !           402: Replace the match of the regular expression within the range by
        !           403: the text.
        !           404: In 
        !           405: .I text
        !           406: the character
        !           407: .B &
        !           408: stands for the string
        !           409: that matched the expression and 
        !           410: .B \e
        !           411: behaves as in regular expressions.
        !           412: If
        !           413: .I s
        !           414: is followed immediately by a
        !           415: number
        !           416: .IR n ,
        !           417: as in
        !           418: .BR s2/x/y/ ,
        !           419: the
        !           420: .IR n -th
        !           421: match is substituted
        !           422: If the
        !           423: command is followed by a
        !           424: .BR g ,
        !           425: as in
        !           426: .BR s/x/y/g ,
        !           427: all matches in the range
        !           428: are substituted.
        !           429: Set dot to the range.
        !           430: .TP
        !           431: .BI m " a1
        !           432: .br
        !           433: .ns
        !           434: .TP
        !           435: .BI t " a1
        !           436: Move the range to after
        !           437: .I a1
        !           438: .RB ( m ),
        !           439: or copies it
        !           440: .RB ( t ).
        !           441: Set dot.
        !           442: .SS Display commands
        !           443: .TP
        !           444: .B p
        !           445: Print the text in the range.
        !           446: Set dot.
        !           447: .TP
        !           448: .B =
        !           449: Print the line address and character address of the range.
        !           450: .TP
        !           451: .B =#
        !           452: Print just the character address of the range.
        !           453: .SS File commands
        !           454: .TP
        !           455: .BI \*ab " file-list
        !           456: Set the current file to the first file named in the list
        !           457: that
        !           458: .I sam
        !           459: also has in its menu.
        !           460: 
        !           461: The list may be expressed
        !           462: .BI < Unix-command
        !           463: in which case the file names are taken as words (in the shell sense)
        !           464: generated by the Unix command.
        !           465: (For peculiar, temporary reasons,
        !           466: .B b
        !           467: is ineffectual when downloaded.)
        !           468: .TP
        !           469: .BI \*aB " file-list
        !           470: Same as
        !           471: .BR b ,
        !           472: except that file names not in the menu are entered there,
        !           473: and all file names in the list are examined.
        !           474: .TP
        !           475: .B \*an
        !           476: Print a menu of files.
        !           477: The format is:
        !           478: .RS
        !           479: .TP \w'\ \ or\ blank\ \'u
        !           480: .BR ' " or blank
        !           481: indicating the file is modified or clean,
        !           482: .TP
        !           483: .BR - " or \&" +
        !           484: indicating the the file is unread or has been read
        !           485: (in the terminal,
        !           486: .B *
        !           487: means more than one window is open),
        !           488: .TP
        !           489: .BR . " or blank
        !           490: indicating the current file,
        !           491: .TP
        !           492: a blank,
        !           493: .TP
        !           494: and the file name.
        !           495: .RE
        !           496: .TP 0
        !           497: .BI \*aD " file-list
        !           498: Delete the named files from the menu.
        !           499: If no files are named, the current file is deleted.
        !           500: It is an error to
        !           501: .B D
        !           502: a modified file, but a subsequent
        !           503: .B D
        !           504: will delete such a file.
        !           505: .SS I/O Commands
        !           506: .TP
        !           507: .BI \*ae " filename
        !           508: Replace the file by the contents of the named Unix file.
        !           509: Set dot to the beginning of the file.
        !           510: .TP
        !           511: .BI r " filename
        !           512: Replace the text in the range by the contents of the named Unix file.
        !           513: Set dot.
        !           514: .TP
        !           515: .BI w " filename
        !           516: Write the range (default
        !           517: .BR 0,$ )
        !           518: to the named Unix file.
        !           519: .TP
        !           520: .BI \*af " filename
        !           521: Set the file name and print the resulting menu entry.
        !           522: .PP
        !           523: If the file name is absent from any of these, the current file name is used.
        !           524: .B e
        !           525: always sets the file name,
        !           526: .B r
        !           527: and
        !           528: .B w
        !           529: do so if the file has no name.
        !           530: .TP
        !           531: .BI < " Unix-command
        !           532: Replace the range by the standard output of the
        !           533: Unix command.
        !           534: .TP
        !           535: .BI > " Unix-command
        !           536: Sends the range to the standard input of the
        !           537: Unix command.
        !           538: .TP
        !           539: .BI | " Unix-command
        !           540: Send the range to the standard input, and replace it by
        !           541: the standard output, of the
        !           542: Unix command.
        !           543: .TP
        !           544: .BI \*a! " Unix-command
        !           545: Run the
        !           546: Unix command.
        !           547: .TP
        !           548: .BI \*acd " directory
        !           549: Change working directory.
        !           550: If no directory is specified,
        !           551: .B $HOME
        !           552: is used.
        !           553: .PP
        !           554: In any of
        !           555: .BR < ,
        !           556: .BR > ,
        !           557: .B |
        !           558: or
        !           559: .BR ! ,
        !           560: if the
        !           561: .I Unix command
        !           562: is omitted the last
        !           563: .I Unix command
        !           564: (of any type) is substituted.
        !           565: If
        !           566: .I sam
        !           567: is downloaded,
        !           568: .B !
        !           569: sets standard input to
        !           570: .FR /dev/null ,
        !           571: and otherwise
        !           572: unassigned output
        !           573: .RB ( stdout
        !           574: for
        !           575: .B !
        !           576: and
        !           577: .BR > ,
        !           578: .B stderr
        !           579: for all) is placed in
        !           580: .F $HOME/sam.err
        !           581: and the first few lines are printed.
        !           582: .SS Loops and Conditionals
        !           583: .TP
        !           584: .BI x/ regexp / " command
        !           585: For each match of the regular expression in the range, run the command
        !           586: with dot set to the match.
        !           587: Set dot to the last match.
        !           588: If the regular
        !           589: expression and its slashes are omitted, 
        !           590: .L /.*\en/
        !           591: is assumed.
        !           592: Null string matches potentially occur before every character
        !           593: of the range and at the end of the range.
        !           594: .TP
        !           595: .BI y/ regexp / " command
        !           596: Like
        !           597: .B x,
        !           598: but run the command for each substring that lies before, between,
        !           599: or after
        !           600: the matches that would be generated by
        !           601: .BR x .
        !           602: There is no default behavior.
        !           603: Null substrings potentially occur before every character
        !           604: in the range.
        !           605: .TP
        !           606: .BI \*aX/ regexp / " command
        !           607: For each file whose menu entry matches the regular expression,
        !           608: run the command.
        !           609: If the expression is omitted, the command is run
        !           610: in every file.
        !           611: .TP
        !           612: .BI \*aY/ regexp / " command
        !           613: Same as
        !           614: .BR X ,
        !           615: but for files that do not match the regular expression,
        !           616: and the expression is required.
        !           617: .TP
        !           618: .BI g/ regexp / " command
        !           619: .br
        !           620: .ns
        !           621: .TP
        !           622: .BI v/ regexp / " command
        !           623: If the range contains
        !           624: .RB ( g )
        !           625: or does not contain
        !           626: .RB ( v )
        !           627: a match for the expression,
        !           628: set dot to the range and run the command.
        !           629: .PP
        !           630: These may be nested arbitrarily deeply, but only one instance of either
        !           631: .B X
        !           632: or
        !           633: .B Y
        !           634: may appear in a \%single command.
        !           635: An empty command in an
        !           636: .B x
        !           637: or
        !           638: .B y
        !           639: defaults to
        !           640: .BR p ;
        !           641: an empty command in
        !           642: .B X
        !           643: or
        !           644: .B Y
        !           645: defaults to
        !           646: .BR f .
        !           647: .B g
        !           648: and
        !           649: .B v
        !           650: do not have defaults.
        !           651: .SS Miscellany
        !           652: .TP
        !           653: .B k
        !           654: Set the current file's mark to the range.  Does not set dot.
        !           655: .TP
        !           656: .B \*aq
        !           657: Quit.
        !           658: It is an error to quit with modified files, but a second
        !           659: .B q
        !           660: will succeed.
        !           661: .TP
        !           662: .BI \*au " n
        !           663: Undo the last
        !           664: .I n
        !           665: (default 1)
        !           666: top-level commands that changed the contents or name of the
        !           667: current file, and any other file whose most recent change was simultaneous
        !           668: with the current file's change.
        !           669: Successive
        !           670: .BR u 's
        !           671: move further back in time.
        !           672: The only commands for which u is ineffective are
        !           673: .BR cd ,
        !           674: .BR u ,
        !           675: .BR q ,
        !           676: .B w
        !           677: and
        !           678: .BR D .
        !           679: .TP
        !           680: (empty)
        !           681: If the range is explicit, set dot to the range.
        !           682: If
        !           683: .I sam
        !           684: is downloaded, the resulting dot is selected on the screen;
        !           685: otherwise it is printed.
        !           686: If no address is specified (the
        !           687: command is a newline) dot is extended in either direction to
        !           688: line boundaries and printed.
        !           689: If dot is thereby unchanged, it is set to
        !           690: .B .+1 
        !           691: and printed.
        !           692: .PD
        !           693: .SS Grouping and multiple changes
        !           694: Commands may be grouped by enclosing them in braces
        !           695: .BR {} .
        !           696: Commands within the braces must appear on separate lines (no backslashes are
        !           697: required between commands).
        !           698: Semantically, an opening brace is like a command:
        !           699: it takes an (optional) address and sets dot for each sub-command.
        !           700: Commands within the braces are executed sequentially, but changes made
        !           701: by one command are not visible to other commands (see the next section
        !           702: of this manual).
        !           703: Braces may be nested arbitrarily.
        !           704: .PP
        !           705: When a command makes a number of changes to a file, as in
        !           706: .BR x/re/c/text/ ,
        !           707: the addresses of all changes to the file are computed in the original file.
        !           708: The changes are then applied to the file in order of non-decreasing
        !           709: address of the change.
        !           710: It is an error for addresses of changes to overlap.
        !           711: Successive insertions at the same address are catenated into a single
        !           712: insertion composed of the several insertions in the order applied.
        !           713: .SS The terminal
        !           714: What follows refers to behavior of
        !           715: .I sam
        !           716: when downloaded, that is, when
        !           717: operating as a display editor on a bitmap display.
        !           718: This is the default
        !           719: behavior; invoking
        !           720: .I sam
        !           721: with the
        !           722: .B -d
        !           723: (no download) option provides access
        !           724: to the command language only.
        !           725: .PP
        !           726: Each file may have zero or more windows open.
        !           727: Each window is equivalent
        !           728: and is updated simultaneously with changes in other windows on the same file.
        !           729: Each window has an independent value of dot, indicated by a highlighted
        !           730: substring on the display.
        !           731: Dot may be in a region not within
        !           732: the window.
        !           733: There is usually a `current window',
        !           734: marked with a dark border, to which typed text and editing
        !           735: commands apply.
        !           736: Text may be typed and edited as in
        !           737: .IR sux (1);
        !           738: also the escape key (ESC) selects (sets dot to) text typed
        !           739: since the last mouse button hit.
        !           740: .PP
        !           741: The button 3 menu controls window operations.
        !           742: The top of the menu
        !           743: provides the following operators, each of which prompts with one or
        !           744: more
        !           745: .IR mux -like
        !           746: cursors to prompt for selection of a window or sweeping
        !           747: of a rectangle.
        !           748: `Sweeping' a null rectangle gets a large window, disjoint
        !           749: from the command window or the whole screen, depending on
        !           750: where the null rectangle is.
        !           751: .TF reshape
        !           752: .TP 
        !           753: .B new
        !           754: Create a new, empty file.
        !           755: .TP
        !           756: .B xerox
        !           757: Create a copy of an existing window.
        !           758: .TP
        !           759: .B reshape
        !           760: As in
        !           761: .I mux.
        !           762: .TP
        !           763: .B close
        !           764: Delete the window.
        !           765: In the last window of a file,
        !           766: .B close
        !           767: is equivalent to a
        !           768: .B D
        !           769: for the file.
        !           770: .TP
        !           771: .B write
        !           772: Equivalent to a
        !           773: .B w
        !           774: for the file.
        !           775: .PD
        !           776: .PP
        !           777: Below these operators is a list of available files, starting with
        !           778: .BR ~~sam~~ ,
        !           779: the command window.
        !           780: Selecting a file from the list makes the most recently
        !           781: used window on that file current, unless it is already current, in which
        !           782: case selections cycle through the open windows.
        !           783: If no windows are open
        !           784: on the file, the user is prompted to open one.
        !           785: Files other than
        !           786: .CW ~~sam~~
        !           787: are marked with one of the characters
        !           788: .B -+*
        !           789: according as zero, one, or more windows
        !           790: are open on the file.
        !           791: A further mark
        !           792: .L .
        !           793: appears on the file in the current window and
        !           794: a single quote,
        !           795: .BR ' ,
        !           796: on a file modified since last write.
        !           797: .PP
        !           798: Nothing can be done without a command window, for which
        !           799: .I sam
        !           800: prompts initially.
        !           801: The command window is an ordinary window except that text typed to it
        !           802: is interpreted as commands for the editor rather than passive text,
        !           803: and text printed by editor commands appears in it.
        !           804: The behavior is like
        !           805: .I mux,
        !           806: with a `command point' that separates commands being typed from
        !           807: previous output.
        !           808: Commands typed in the command window apply to the
        !           809: current open file\(emthe file in the most recently
        !           810: current window.
        !           811: .SS Manipulating text
        !           812: Button 1 changes selection, much like
        !           813: .I mux.
        !           814: Pointing to a non-current window with button 1 makes it current;
        !           815: within the current window, button 1 selects text, thus setting dot.
        !           816: Double-clicking selects text to the boundaries of words, lines,
        !           817: quoted strings or bracketed strings, depending on the text at the click.
        !           818: .PP
        !           819: Button 2 provides a menu of editing commands:
        !           820: .PD0
        !           821: .RS
        !           822: .TP
        !           823: .B cut
        !           824: Delete dot and save the deleted text in the snarf buffer.
        !           825: .TP
        !           826: .B paste
        !           827: Replace the text in dot by the contents of the snarf buffer.
        !           828: .TP
        !           829: .B snarf
        !           830: Save the text in dot in the snarf buffer.
        !           831: .TP
        !           832: .B look
        !           833: Search forward for the next occurrence of the literal text in dot.
        !           834: If dot is the null string, the text in the snarf buffer is
        !           835: used.
        !           836: The snarf buffer is unaffected.
        !           837: .TP
        !           838: .B <mux>
        !           839: Exchange
        !           840: .IR sam 's
        !           841: and
        !           842: .IR mux 's
        !           843: snarf buffers.
        !           844: .TP
        !           845: .BI / regexp
        !           846: Search forward for the next match of the last regular expression
        !           847: typed in a command.
        !           848: (Not in command window.)
        !           849: .TP
        !           850: .B send
        !           851: Send the text in dot, or the snarf buffer if
        !           852: dot is the null string, as if it were typed to the command window.
        !           853: Saves the sent text in the snarf buffer.
        !           854: (Command window only.) 
        !           855: .TP
        !           856: .B scroll
        !           857: .TP
        !           858: .B noscroll
        !           859: Select whether to reveal automatically text
        !           860: that appears off the end of the command window.
        !           861: (Command window only.)
        !           862: .RE
        !           863: .PD
        !           864: .SS Abnormal termination
        !           865: If
        !           866: .I sam
        !           867: terminates other than by a
        !           868: .B q
        !           869: command (by hangup, deleting its layer, etc.), modified
        !           870: files are saved in an
        !           871: executable file,
        !           872: .FR $HOME/sam.save .
        !           873: This program, when executed, asks whether to write
        !           874: each file back to a Unix file.
        !           875: The answer
        !           876: .L y
        !           877: causes writing; anything else skips the file.
        !           878: .SH FILES
        !           879: .F $HOME/sam.save
        !           880: .br
        !           881: .F $HOME/sam.err
        !           882: .SH SEE ALSO
        !           883: .IR ed (1),
        !           884: .IR sed (1),
        !           885: .IR vi (1),
        !           886: .IR grep (1)
        !           887: .SH BUGS
        !           888: The
        !           889: .B u
        !           890: command undoes characters\(emand backspaces\(emtyped directly
        !           891: into a file window in unpredictable increments.

unix.superglobalmegacorp.com

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