|
|
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.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.