|
|
1.1 ! root 1: **** Menu for TED help **** ! 2: A: Introduction L: Multiple buffers ! 3: B: Characters M: Multiple windows ! 4: C: Short examples N: Incremental search ! 5: D: Keypad and function keys O: Macros ! 6: E: Moving the cursor P: Pattern matching ! 7: F: Moving and deleting text Q: Pattern matching summary ! 8: G: Searching R: Sorting ! 9: H: Init files S: Miscellaneous options ! 10: I: Running programs T: TED variables ! 11: J: Adjusting text U: Indenter variables ! 12: K: Multi-file buffers V: File names/backup/protection ! 13: X: XTED features ! 14: **** Menu for TED help **** ! 15: ! 16: **** Introduction **** ! 17: TED is a real-time editor written in CLU. It was inspired by the real-time ! 18: TECO developed at MIT. TED will work with just about any display terminal. ! 19: (However, TED seems to push terminals harder than Emacs, so you may find that ! 20: /etc/termcap does not specify enough padding for scrolling or insert/delete ! 21: line.) Originally written by Russ Atkinson, TED has been extensively modified ! 22: by Bob Scheifler (RWS) and Eliot Moss (EBM) at MIT-XX, and is currently ! 23: maintained by Bob Scheifler. ! 24: ! 25: To start a TED, just type ! 26: ted ! 27: at CSH level. TED will start up, clear the screen, and indicate that you are ! 28: using the Main buffer. If you want to edit an existing file (or group of ! 29: files), type ! 30: ted filespec ! 31: or ! 32: ted filespec ... filespec ! 33: Filespecs can only be given the first time you start up a TED. ! 34: ! 35: To get out of TED and back to CSH temporarily, type ^C. To continue TED from ! 36: CSH, use the FG command. To get out of TED permanently, type ^U0^C. ! 37: ! 38: TED is intended to manipulate ASCII text files. Files can be copied to a ! 39: buffer; the buffer can be changed by commands; and the buffer can be copied ! 40: back to files, possibly many times. ! 41: ! 42: While editing the buffer, a cursor is kept and displayed to indicate the ! 43: current position in the buffer. Common actions include inserting characters at ! 44: the cursor, deleting characters at the cursor, and moving the cursor. TED ! 45: attempts to display a portion of the buffer around the cursor to show the user ! 46: the text being edited. The displayed portion of the buffer is called the ! 47: window. ! 48: ! 49: Most characters typed are normally self-inserting. That is, as the character ! 50: is typed it is immediately inserted into the buffer and the display is changed ! 51: to show the insertion. All control characters (except ^M) are commands that ! 52: change the current position, change the buffer, or have more complicated ! 53: effects. For example, control-N (usually written as ^N) causes the cursor to ! 54: move to the start of the next line. Control characters can be inserted by ! 55: typing ^Q before typing the control character. ! 56: ! 57: Commands that take numeric arguments (the numeric argument is indicated by #) ! 58: usually have their numeric arguments set by the ^U command. ^U may be followed ! 59: by a signed number to explicitly specify the argument. If ^U is not followed ! 60: by a signed number then # becomes the previous # * 4. The default for # is 1. ! 61: A lone minus sign is equivalent to -1. As the number is typed it will be ! 62: displayed at the top of the screen. A number is terminated by a non-digit. ! 63: Most simple commands, and all self-inserting characters, will take a numeric ! 64: argument. For example, ^U10_ will cause ten underscores to be inserted, and ! 65: ^U^N will cause the cursor to move down four lines. For some commands, the ! 66: exact value of the numeric argument is not important, but whether it is greater ! 67: than one, or less than zero, or some similar condition. For example, ^A will ! 68: move the cursor to the start, but ^U^A (in fact, any numeric argument greater ! 69: than one) will move the cursor to the start of the buffer. ! 70: ! 71: Some commands require string or file name arguments, and will request them at ! 72: the bottom of the screen. String arguments and file names are terminated by ! 73: carriage return, with most control characters having normal editing effects ! 74: while typing in arguments. To insert a newline into the argument, type a ! 75: linefeed. A default string or file name is usually supplied, which will be ! 76: used if no argument is typed. ^R replaces the current argument with the ! 77: default, ^U^R inserts the default before the cursor, ^U-^R inserts the default ! 78: after the cursor, ^W replaces the default with the current argument, ^U^W ! 79: deletes the default, and ^G quits from the command. ! 80: ! 81: For file name arguments, the default is used to fill in any missing parts of ! 82: the file name(s). A file name is considered to consist of four components in ! 83: the form "dir/name.suffix.other", where the name and suffix parts do not ! 84: contain periods. The defaults are always used when modifying a file. When ! 85: reading a file, first all of the defaults are tried, then just the directory ! 86: default, then all but the directory default, and finally with no defaults. ! 87: Empty or relative directory fields are completed from the connected directory, ! 88: which is settable via ^\W. The last string or file name argument is always ! 89: remembered, and can be inserted at any time via ^VG. For example, if you try ! 90: to read in a file, but misspell its name, you can save typing the whole name ! 91: again by typing ^R^VG. Similarly, in the ^Z command, if the replace string is ! 92: similar to the search string, you can use ^VG in typing the replace string to ! 93: insert the search string. ! 94: ! 95: Some commands require a 1-character option (preceded by an optional numeric ! 96: argument). Examples of these are ^V, ^X, ^\, ^], and ^_. The optional numeric ! 97: argument defaults to 1 where applicable, and has an optional minus sign. The ! 98: actual numeric argument used will be the implicit argument (from a preceding ! 99: ^U) times any explicit argument given after the option. ^G will quit from the ! 100: option, ^L will re-display, and ? will type help for the options. The case of ! 101: the option character does not matter. ! 102: ! 103: Some commands require a Yes/No confirmation. A question will be displayed at ! 104: the top of the screen, to be answered by typing Y or N (case is unimportant). ! 105: ^G can also be typed to abort the command, so that no action is taken. ! 106: ! 107: Long lines are not displayed on multiple lines of the screen. If a line is ! 108: longer than the width of the screen, TED will display an exclamation mark (!) ! 109: in the last column to indicate that the line is too long to display completely. ! 110: ^V! can be used to (find and) display more of a long line. ! 111: ! 112: Every so often the buffer is saved to the file "_ted.sav.#" (where # is your ! 113: process id) in your login directory if the buffer has been changed. This is ! 114: intended to allow recovery from system crashes. In addition, if TED receives a ! 115: SIGHUP signal, a save will be performed if the buffer has been changed. ! 116: However, it is still a good idea to periodically write out your buffer ! 117: manually. The ^U-^H command can be used to turn saving on or off. ! 118: ! 119: Suppose that you want to create a text file from scratch. When TED starts up ! 120: you have an empty buffer. To insert normal text into the buffer, just type as ! 121: you would on a typewriter. The delete key (usually represented here as ^?) ! 122: will allow you to undo minor errors quickly. Then, to save the results of your ! 123: typing, use the ^W command to write the buffer to a file. For a new file you ! 124: must give a file name in order to save your work. ! 125: ! 126: If you want to edit an old file, use the ^R command to read it into the buffer ! 127: (the old contents of the buffer will be deleted). To insert (at the cursor) ! 128: the text of a file into the text of the existing buffer, use the ^U^R command. ! 129: To find a place that you want to change, you can search for text (using the ^S ! 130: command) that precedes the place you want changed. Then you can use ^D to ! 131: delete characters, or ^K to kill entire lines, and insert the correct text. ! 132: Again, to save the results of your editing, use the ^W command to write the ! 133: buffer to a file. If you do not give a file name in this case, the ^W command ! 134: will write out a new version of the file. To append the text of the buffer ! 135: onto the end of an existing file, use the ^U^W command. ! 136: ! 137: The best way to learn TED is to start a TED up and practice manipulating text. ! 138: Experimenting is encouraged, since you can see the effects of most characters ! 139: directly on the screen. TED has a built-in help command, ^H, which allows you ! 140: to view pieces of this file by selecting from a simple menu. ! 141: **** Introduction **** ! 142: ! 143: **** Characters **** ! 144: Char: Effect: (# is a numeric arg (default 1), % is a string arg) ! 145: ! 146: ^@ (#=1: escape to shell, #=0: terminate to shell, else: garbage collect) ! 147: ^A go to start of line (#>1: go to start of buffer) ! 148: ^B move back # chars ! 149: ^C (#=1: escape to shell, #=0: terminate to shell, else: garbage collect) ! 150: ^D delete # chars forward ! 151: ^E go to end of line (#>1: go to end of buffer) ! 152: ^F move forward # chars ! 153: ^G quit from numeric/string argument or subcommand option ! 154: ^H help command (#<0: toggle buffer saving, ! 155: #=0: flush help buffers, ! 156: #=1: TED help, ! 157: #>1: User-defined help) ! 158: ^I (TAB) insert # tabs ! 159: ^J (LF) run/continue interactive inferior (#>1: kill inferior) ! 160: ^K kill # lines (#=0: kill to end of line, #=-1: kill to start of line) ! 161: ^L clear screen & redisplay (#<1: redisplay, #>1: save buffer(s)) ! 162: ^M (CR) insert # newlines before cursor (terminates %) ! 163: ^N move down # lines ! 164: ^O insert # newlines after cursor ! 165: ^P move up # lines ! 166: ^Q insert next char typed # times ! 167: ^R read file(s) from % (#<1: insert new file(s), ! 168: #=1: discard current file(s) and read new file(s), ! 169: #>1: insert text of file(s)) ! 170: ^S search for % # times (#<0: search backwards, #=0: set case mode) ! 171: ^T set the mark at current cursor (#>1: swap mark & cursor) ! 172: ^U multiply # by number (default 4) ! 173: ^V text/cursor mover/saver ! 174: ^W write file(s) (#<0: write changed files of current buffer, ! 175: #=0: write current file if changed, ! 176: #=1: write current file to %, ! 177: #>1: append current file onto %) ! 178: ^X multiple buffers/windows, move by indent/region/list, pattern search, ! 179: macros, mail check, restrict buffer, draw, box, set modes/variables ! 180: ^Y ^Y^@c or ^U0^Yc to define macro for char 'c', ^Yc to execute ! 181: ^Z replace %1 by %2 in rest of current file (#>1: rest of buffer) ! 182: ^[ (ESC) escape for VT52 and Heath function and alternate keypad keys ! 183: ^\ compile, indent, format, mail ! 184: ^] adjust lines/marked-text/paragraph/comments ! 185: ^^ edit/scan/type/list matching files ! 186: ^_ delete/link/change-mode/rename files ! 187: ^? (DEL) delete # chars backwards (usually can't be typed as CTRL-?) ! 188: other chars insert themselves # times before cursor (#<0: after cursor) ! 189: **** Characters **** ! 190: ! 191: **** Short examples **** ! 192: ('$' stands for carriage-return) ! 193: ! 194: User types: Effect: ! 195: ! 196: ABC Insert "ABC" at cursor, move cursor over 3 characters. ! 197: ^Rfoo.clu$ Read the file foo.clu to the buffer, place cursor at buffer ! 198: start, display the current window. ! 199: ^Wfoo.clu$ Write the buffer to the file foo.clu, no change to the cursor. ! 200: ^W$ Write buffer to current file. ! 201: ^U^F Move cursor 4 characters forward. ! 202: ^U56^N Move cursor 56 lines forward. ! 203: ^U^V3F Move cursor 12 words forward. ! 204: ^A Move cursor to line start. ! 205: ^U^A Move cursor to buffer start. ! 206: ^E Move cursor to line end. ! 207: ^U^E Move cursor to buffer end. ! 208: ^Siter$ Search forward for "iter" 1 time. Sets default to "iter". ! 209: ^U-^S$ Search backward 1 time for the default. ! 210: **** Short examples **** ! 211: ! 212: **** Keypad and function keys **** ! 213: On VT52's, Heath's, and many other terminals the alternate keypad and function ! 214: keys can be used. Their corresponding escape sequences can also by typed ! 215: explicitly. (The keys listed below are for Heath's in shifted keypad mode.) ! 216: ! 217: Key: Seq: Meaning: ! 218: ! 219: esc esc redefine escape sequence (see below) ! 220: 7 esc @ move to end of # previous word (^V[) ! 221: 8,UP esc A move backward # pages (^V^P) ! 222: 2,DOWN esc B move forward # pages (^V^N) ! 223: 6,RIGHT esc C move forward # words (^V^F) ! 224: 4,LEFT esc D move backward # words (^V^B) ! 225: 5,HOME esc H enter alternate keypad mode ! 226: ERASE esc J pattern search # times for default (^X^P^M) ! 227: 1 esc L delete backward to end of # previous word (^V<) ! 228: 3 esc M delete forward to start of # next word (^V>) ! 229: 9 esc N move to start of # next word (^V]) ! 230: BLUE esc P delete # words forward (^V^D) ! 231: RED esc Q delete # words backwards (^V^?) ! 232: GREY esc R string search forward # times for default (^S^M) ! 233: f1 esc S string search backward # times for default (^U-^S^M) ! 234: f2 esc T set case mode for searches (^U0^S) ! 235: f3 esc U scroll window up # lines (^V-^J) ! 236: f4 esc V scroll window down # lines (^V^J) ! 237: f5 esc W reposition window at cursor (^U0^L) ! 238: esc ? ? print help ! 239: ENTER esc ? M garbage collect address space (^U^C) ! 240: . esc ? n exit to CSH (^C) ! 241: 0 esc ? p search backward # times for default (^U-^S^M) ! 242: esc ? q delete backward to end of # previous word (^V<) ! 243: esc ? r move forward # pages (^V^N) ! 244: esc ? s delete forward to start of # next word (^V>) ! 245: esc ? t move backward # words (^V^B) ! 246: shft 5 esc ? u exit alternate keypad mode (when in alternate keypad mode) ! 247: esc ? v move forward # words (^V^F) ! 248: esc ? w move to end of # previous word (^V[) ! 249: esc ? x move backward # pages (^V^P) ! 250: esc ? y move to start of # next word (^V]) ! 251: ! 252: The sequences "esc [ char" and "esc O char" are interpreted the same as ! 253: "esc ? char" when "char" is a lowercase letter, and otherwise are interpreted ! 254: the same as "esc char". ! 255: ! 256: It is also possible to redefine any escape sequence (and hence any function or ! 257: keypad key), to execute an arbitrary string. The string is executed just like ! 258: a macro definition, and has basically the same effect as if you typed the ! 259: characters of the string directly on the keyboard. An escape sequence can be ! 260: "undefined" back to its original meaning by defining it to the empty string. ! 261: ! 262: esc esc char to redefine esc char ! 263: esc esc ? char to redefine esc ? char ! 264: ! 265: Note that a function or keypad key can be redefined by typing ESC and then the ! 266: function or keypad key. ! 267: ! 268: Sequences which are "equivalent" to ^V deletion commands are not completely ! 269: equivalent, in that they do not save the deleted text in the implicit kill ! 270: area. If saving is important, these sequences can be redefined to explicitly ! 271: execute the appropriate ^V command. ! 272: **** Keypad and function keys **** ! 273: ! 274: **** Moving the cursor **** ! 275: There are many commands for moving the cursor around, almost all of which take ! 276: a numeric argument as a repetition count: ! 277: ! 278: ^U^A moves to the start of the buffer ! 279: ^U^E moves to the end of the buffer ! 280: ^A moves to the start of the current line ! 281: ^B moves to the previous character, wrapping to end of previous line ! 282: ^E moves to the end of the current line ! 283: ^F moves to the next character, wrapping to start of next line ! 284: ^N moves to the start of the next line ! 285: ^P moves to the start of the previous line ! 286: ^V^B moves to the start of the previous word ! 287: ^V^F moves to the end of the next word ! 288: ^V] moves to the start of the next word ! 289: ^V[ moves to the end of the previous word ! 290: ^Vspace skips forward over blanks ! 291: ^V#L moves to line # ! 292: ^V^N moves to the next screenful of text ! 293: ^V^P moves to the previous screenful of text ! 294: ^V! moves to the next (or current) line which extends off the screen ! 295: ^X^B^P moves to the previous start of paragraph ! 296: ^X^E^P moves to the next end of paragraph ! 297: ^X^F^P moves to the next start of paragraph ! 298: ^X^B^S moves to the previous start of sentence ! 299: ^X^E^S moves to the next end of sentence ! 300: ^X^F^S moves to the next start of sentence ! 301: ! 302: Normally, paragraphs are separated by "formatter" lines. Formatter lines are ! 303: blank lines, and any lines starting with a character in the "no_fill_starters" ! 304: string variable. This variable contains period and single quote by default, ! 305: for R20 text formatter command lines. It is also often useful to consider a ! 306: new paragraph to start at every line with leading spaces or tabs. This can be ! 307: obtained by setting the "pindent" number variable to a non-zero value (it is ! 308: zero by default). ! 309: ! 310: A sentence is terminated by a period, exclamation point, or question mark, ! 311: optionally followed by a single quote, double quote, or right "bracket" (round, ! 312: square, curly, or angle), followed by a newline, a tab, two spaces, a space and ! 313: a tab, or a space and a newline. Formatter lines also separate sentences. ! 314: ! 315: A word consists of letters and digits, plus certain special characters. By ! 316: default, the only special character is underscore. You can specify what the ! 317: special characters are by changing the "word_chars" string variable. ! 318: ! 319: The following commands move the cursor based on the indentation (amount of ! 320: leading space consumed by spaces and tabs) of lines in the buffer. These are ! 321: particularly useful in moving around in (reasonably formatted) CLU and Argus ! 322: code, but are useful for other languages and documents as well. Most move by ! 323: comparing the indentation of previous or following lines with the indentation ! 324: of the current line, and most take a numeric argument as a repetition count: ! 325: ! 326: ^X^I^B moves back to the next line with a different indentation ! 327: ^X^I^D moves to the next line with a greater indentation, provided ! 328: no line with a lesser indentation intervenes ! 329: ^X^I^E moves to the next line with a lesser indentation ! 330: ^X^I^F moves to the next line with a different indentation ! 331: ^X^I^H moves back to the next line with a greater indentation, provided ! 332: no line with a lesser indentation intervenes ! 333: ^X^I^N moves to the next line with the same indentation, provided ! 334: no line with a lesser indentation intervenes ! 335: ^X^I^P moves back to the next line with the same indentation, provided ! 336: no line with a lesser indentation intervenes ! 337: ^X^I^U moves back to the next line with a lesser indentation ! 338: ^X^I#^S moves to the next line indented # spaces ! 339: ^X^I#^^ moves back to the next line indented # spaces ! 340: ! 341: The following commands move the cursor based on nested "list" structure, i.e., ! 342: based on nested matching ()'s, []'s, {}'s, and <>'s, ignoring the contents of ! 343: string and character literals. The string variable "list_chars" should be some ! 344: subset of the characters (), [], {}, <>, ", and ', and defines the active list ! 345: and literal delimiters, with the default being all but <>. ! 346: ! 347: ^X^Z^A moves backward up # list levels ! 348: ^X^Z^B moves backward over # lists at the current nesting level ! 349: ^X^Z^D moves (#>0: forward, #<0: backward) down # list levels ! 350: ^X^Z^E moves forward up # list levels ! 351: ^X^Z^F moves forward over # lists at the current nesting level ! 352: ^X^Z^N moves forward up and down (^X^Z^E^X^Z^D) # times ! 353: ^X^Z^P moves backward up and down (^X^Z^A^X^Z-^D) # times ! 354: **** Moving the cursor **** ! 355: ! 356: **** Moving and deleting text **** ! 357: The following commands delete text, and take a numeric argument as a repetition ! 358: count: ! 359: ! 360: ^D deletes the next character ! 361: ^? (DEL) deletes the previous character ! 362: ^K deletes to the start of the next line ! 363: ^VK deletes the text between the mark and the cursor ! 364: ^V^D deletes to the end of the next word ! 365: ^V^? deletes to the start of the previous word ! 366: ^V^@ deletes blanks from the cursor forward ! 367: ^V> deletes to the start of the next word ! 368: ^V< deletes to the end of the previous word ! 369: ! 370: ^D and ^? do not save the deleted text, but the others do. The text deleted by ! 371: the last such command, or by the last sequence of ^K commands, is retained in ! 372: an invisible kill area, and can be reinserted anywhere by moving the cursor to ! 373: the point of insertion and typing ^V^R (to insert after the cursor) or ^V-^R ! 374: (to insert before the cursor). This is a simple way of moving text. ! 375: ! 376: ^V^Z deletes all lines in the buffer. ! 377: ! 378: Moving text from one portion of the buffer to another can also be done by ! 379: copying the text from where it is to an invisible save area using one of the ! 380: text-saving options of the ^V command, moving the cursor to the point of ! 381: insertion, and typing ^V^I (to insert after the cursor) or ^V-^I (to insert ! 382: before the cursor). The text-saving commands are: ! 383: ! 384: ^V#C saves the next # words following the cursor ! 385: ^V#^S saves the next # lines following the cursor ! 386: ^VS saves the text between the mark and the cursor ! 387: ^V#^W saves and deletes the next # lines following the cursor ! 388: ^VW saves and deletes the text between the mark and the cursor ! 389: ! 390: The ^T command is used to set an invisible mark in the buffer, which will ! 391: remain there until a subsequent ^T command moves it, or a ^U^T command ! 392: exchanges it with the cursor. ! 393: ! 394: Note that, as with the kill area, there is only one save area for ^V commands, ! 395: so that the second time a text-saving command is used the text saved by the ! 396: first command will no longer be in the save area. The ^V^R and ^V^I commands, ! 397: however, can be used to insert the same text as many times as desired in as ! 398: many places as desired. ! 399: ! 400: Multiple named save/kill areas can be obtained with multiple buffers commands. ! 401: **** Moving and deleting text **** ! 402: ! 403: **** Searching **** ! 404: Simple string searching is performed with the ^S command. Searching can be ! 405: done either forwards or backwards, depending on the numeric argument. For ! 406: example, ^U5^S will search forward for the fifth occurrence of some string, and ! 407: ^U-^S will search backwards for the first occurrence. A newline can be ! 408: included in the search string by typing linefeed. Upper/lower case ! 409: distinctions normally make a difference when searching, but can be ignored by ! 410: setting a flag with the ^U0^S command. This flag controls all searching ! 411: commands, not just ^S. ! 412: ! 413: Changing all (or some) occurrences of some string to another string is done by ! 414: the ^Z command. It will ask for the text string to change, and the string to ! 415: change it to. Then for each occurrence of the search string you can type Y to ! 416: change it to the default, or N to avoid changing it, or U to update all ! 417: remaining occurrences to the default. There are many other options as well. ! 418: At the end, you can either install the changes or leave the buffer as it was ! 419: originally. ! 420: ! 421: Various options of the ^^ command allow you to peruse or search a list of ! 422: files. The list is just like that for ^R when making a multi-file buffer. ^^T ! 423: simply displays the files one at a time, with commands for moving by pages, ! 424: searching, editing, and moving to the next or previous file. ^^S only displays ! 425: those files containing a particular string. ^^P only displays those files ! 426: containing a particular pattern. ^^R reads all of the files into a temporary ! 427: recursive editing buffer. ^^L simply lists the names of the files, and allows ! 428: you to select a particular one at a time for editing by placing the cursor on ! 429: the name of a file and typing ^R. Typing ^R on a directory file will cause a ! 430: recursive ^^L. ^^I simply inserts the names of the files into the current ! 431: buffer. ! 432: ! 433: There are also incremental searching modes and pattern matching search modes, ! 434: described separately. ! 435: **** Searching **** ! 436: ! 437: **** Init files **** ! 438: TED executes the file ".ted_init" in your login directory when it first starts ! 439: up. That is, it executes the characters in ".ted_init" just as if you typed ! 440: them at the keyboard. This allows you to set up various options any way you ! 441: want automatically. ! 442: ! 443: A typical ".ted_init" might be: ! 444: ! 445: ^X^SS^X^KS^V25%^]64W^]64B ! 446: ! 447: This particular example turns on incremental search mode and alternate ^K mode, ! 448: forces the last screenful of a file to display 25% blank (it is normally ! 449: displayed 70% blank), sets the paragraph fill width to 64 characters, and turns ! 450: on auto-break mode by setting the break limit at 64 characters. ! 451: ! 452: For readability, your ".ted_init" can be split into several lines. Newlines ! 453: are discarded, except that a blank line is converted to ^J. Hence, a ^J must ! 454: be represented by two ^J's. ! 455: ! 456: Note that these files must contain all of the ^Q's you would normally have to ! 457: type to get control characters into string arguments such as macro bodies and ! 458: search patterns. For example, to define ^Y^L to be ^U-^L, a file would have to ! 459: contain the following: ! 460: ! 461: ^Y^@^L^Q^U-^Q^L^M ! 462: **** Init files **** ! 463: ! 464: **** Running programs **** ! 465: The ^J command allows the user to run programs interactively from TED without ! 466: leaving the editor environment, so that TED can be used like a primitive shell. ! 467: The ^J command asks for a program name, and if there is currently no inferior ! 468: for the program, asks for a command line and then starts the program. If there ! 469: is an inferior for the program, the inferior is continued. The default program ! 470: name is the most recently stopped inferior. If there are no stopped inferiors, ! 471: the value of the string variable "default_fork" is used, with default value ! 472: "debug". The ^U^J command can be used to kill an inferior that cannot ! 473: otherwise be terminated. ! 474: ! 475: If the "pause" number variable is non-zero, TED will not clear the screen after ! 476: an inferior terminates until the next command is typed. This allows you to ! 477: look over the output of inferiors that you do not actually interact with. ! 478: ! 479: The ^\ command also allows the user to run certain kinds of programs from TED ! 480: without leaving the editor environment. The options of this command provide a ! 481: simple interface to allow the user to do the following: ! 482: ! 483: I,Q: Indent current file. ! 484: C,H,J,K,O,U: Compile files. ! 485: D,L,P,R,V,X: Format current file using R20. ! 486: E: Format current file using Scribe. ! 487: M: Makefile. ! 488: S: Send contents of current file as mail. ! 489: Y: Run arbitrary program with the contents of ! 490: the current file as input. ! 491: Z: Run arbitrary program with the name of ! 492: the current file as JCL, or with arbitrary JCL. ! 493: A,B: Type or insert the last report from the above. ! 494: W: Change working directory. ! 495: ! 496: Many of the options run separate programs. While a separate program is running ! 497: TED prints the amount of real time that has elapsed. A ^G typed at TED can ! 498: abort a runaway program (the user will be asked for definite confirmation). In ! 499: general, before running a separate program, if the current file has been ! 500: changed since it was last read or written, then the file is automatically ! 501: written to a new version. After executing an option, any results are ! 502: automatically displayed. These results are retained in a buffer named ! 503: "Result", and may be redisplayed later with the A option or inserted in the ! 504: current buffer with the B option. If the results contain errors keyed by line ! 505: number, you can move to a particular line with the ^V#L command. ! 506: ! 507: The CLU/Argus indenter operates either on the whole file (the I option) or on ! 508: the text starting to the right of the current cursor (the Q option), performing ! 509: fairly complete syntax checking of programs as well as attempting to indent ! 510: code attractively. Errors are reported as if a separate program were run, ! 511: although a separate program is not run. The Q option will indent a specified ! 512: number of textual "units", where a unit is basically a module, routine, equate, ! 513: statement, expression list, or expression. The text to the right of the cursor ! 514: should start such a unit. The indentation of the current line is assumed to be ! 515: correct; it is not derived from context. Indentation is controlled by a number ! 516: of variables, settable via ^XI. ! 517: ! 518: The CLU or Argus compiler can be run as an inferior process to compile ! 519: programs. The most common usage (the C option) is to compile the current ! 520: buffer contents, first writing them out if the buffer has been changed since it ! 521: was last read or written. The O option is like C, but causes an optimizing ! 522: compilation. The U option will write out all changed files and then run the ! 523: compiler on just those, all files, or all files with out-of-date binary files, ! 524: or files with out-of-date binaries from a specified list. There are a number ! 525: of options under the U option to specify the compilation mode (normal ! 526: compilation, optimization, type-check, etc.) Explicit compiler commands can be ! 527: passed to the compiler via the J option. Giving a zero argument with the J ! 528: option prevents the current file from being written out. For the C and O ! 529: options, the suffix must be "clu" (or "arg"), "equ", "xfile", "spc", or ""; ! 530: these cause COMPILE, CE, XFILE, SPECS, and COMPILE compiler commands, ! 531: respectively. The K option either keeps or kills a compiler. If the compiler ! 532: is kept, the type-checking will usually be more complete. The compiler should ! 533: generally be kept while compiling files from the same program. When finding ! 534: out-of-date binaries, the default suffix "bin", although this can be controlled ! 535: with the "binary_suffix" variable; the default directory is the source ! 536: directory, but this can be controlled with the "binary_dir" variable, which can ! 537: specify a directory relative to the source directory. The N option can be used ! 538: to change the name of the compiler. ! 539: ! 540: The text formatter "R" can be used to format the current file in six ways. The ! 541: D option formats it for the DIABLO, the L option formats it for the line ! 542: printer, the P option produces PRESS format, the X option formats it for the ! 543: XGP, the V options formats it for the Varian, and the R option allows the user ! 544: to give explicit commands. Giving a zero argument with the R option prevents ! 545: the current file from being written out. The name of the program R is defined ! 546: by the string variable "r_name", default value "r". The program name can ! 547: contain a directory specification. In addition, "r_name" can specify a ! 548: constant prefix to be added to the command line, by appending the prefix, ! 549: separated by a space, to the program name. ! 550: ! 551: The E option can be used to run the text formatter "Scribe". The name of the ! 552: program Scribe is defined by the string variable "scribe_name", default value ! 553: "scribe". The program name can contain a directory specification. ! 554: ! 555: The M option can be used to execute a "make" command. ! 556: ! 557: TED can be used to compose and send mail. Just type the text of the message ! 558: into the buffer, and then use ^\S. If you want a subject heading, just start ! 559: the first line of the message with "Subject: ". You will be prompted for the ! 560: addresses to send the message to. The name of the mail program is defined by ! 561: the string variable "mail_name", default value "/usr/lib/sendmail". The ! 562: program name can contain a directory specification. In addition, "mail_name" ! 563: can specify a constant prefix to be added to the command line, by appending the ! 564: prefix, separated by a space, to the program name. ! 565: ! 566: An (almost) arbitrary program can be run with the name of the current file as ! 567: JCL (but with no primary input) via the Z option. The program can be run with ! 568: arbitrary JCL via ^\0Z. The name of the program is defined by the string ! 569: variable "progz_name". The program name can contain a directory specification. ! 570: In addition, "progz_name" can specify a constant prefix to be added to the ! 571: command line, by appending the prefix, separated by a space, to the program ! 572: name. ! 573: ! 574: An (almost) arbitrary program can be run with arbitrary JCL and the contents of ! 575: the current file as primary input via the Y option. The name of the program is ! 576: defined by the string variable "progy_name". The program name can contain a ! 577: directory specification. In addition, "progy_name" can specify a constant ! 578: prefix to be added to the command line, by appending the prefix, separated by a ! 579: space, to the program name. Beware that a single process is sending input to ! 580: the program and collecting output, so it is possible to deadlock. ! 581: **** Running programs **** ! 582: ! 583: **** Adjusting text **** ! 584: Text can be adjusted simply in TED using the ^] command. The user can adjust a ! 585: marked region of text (M), a region of comments (contiguous lines with the same ! 586: initial non-blank character) (C), a paragraph (P), or a region of the next N ! 587: lines (N). In addition, the width to use when adjusting can be set (by default ! 588: it is 64) (W). The text is justified "ragged right" by default, in that no ! 589: extra spaces are inserted to align the text on the right margin. However, the ! 590: justification mode can be changed to insert extra spaces to produce even left ! 591: and right margins (J). Formatter lines (blank lines and lines starting with a ! 592: character in the "no_fill_starters" string variable) will not be adjusted. ! 593: Paragraph justification works only on non-indented paragraphs, i.e., only the ! 594: first line of the paragraph may contain leading spaces or tabs. ! 595: ! 596: Text (or comments) may also be justified as it is being entered. This is ! 597: auto-break mode, and may be set by specifying a width to break at when entering ! 598: text (B). A fill prefix may also be specified (A). ! 599: ! 600: The marked text can be left (L), right (R), or center (E) justified within a ! 601: fixed width field. The absolute value of the numeric argument specifies the ! 602: field width. When right or center justifying multiple lines, or when center ! 603: justifying the end of a single line, the field will not be padded out on the ! 604: right with spaces unless a negative argument is specified. ! 605: ! 606: There is also an auto-indent mode (I), in which typing carriage return causes ! 607: blank space, equal in width to the leading blank space of the current line, to ! 608: be inserted at the beginning of the new line. Blank space is also inserted at ! 609: the beginning of new lines created by auto-break mode. In addition, ^V#^U will ! 610: change the leading blank space of the current line to be equal in width to the ! 611: leading blank space of the previous line, plus # additional (or fewer, if # is ! 612: negative) spaces. ! 613: ! 614: The text between the mark and the cursor can be indented or "undented" with ! 615: ^V#H, where # is the number of spaces to add or subtract. ^V0H has the effect ! 616: of converting leading spaces to tabs where possible. The remainder of a line ! 617: starting at the cursor can be moved to start at a particular column with ^V^H. ! 618: **** Adjusting text **** ! 619: ! 620: **** Multi-file buffers **** ! 621: ^R, ^U^R, and ^U-^R can be used to read several files in to the buffer. The ! 622: argument to these commands is basically a list of file specifications, which ! 623: can have *'s in them, where * matches zero or more characters. A real * in a ! 624: file name can be represented with ^@. The specifications can be separated by ! 625: commas, spaces, tabs, or newlines. These separators can be included in ! 626: specifications be preceding them with a backslash (\). All files matching the ! 627: specifications are read in. Alternatively, a file name (with no *'s in it) may ! 628: be preceded by an @, in which case the named file is expected to contain a list ! 629: of file specifications (which can also have @'s in from of them). For ^R, if ! 630: there is only one matching file, it replaces the current file (the one the ! 631: cursor is in) in the buffer; if there is more than one matching file, the ! 632: entire buffer is first flushed. For ^U-^R, all matching files are simply ! 633: inserted into the buffer. For ^U^R, the text of each matching file is inserted ! 634: into the current file of the buffer. Note that the default file name applies ! 635: to all file specifications, including those in @-files. ! 636: ! 637: Each file appears in the buffer with a 3 line heading of the form: ! 638: ^L ! 639: % <file name> ! 640: <blank line> ! 641: These lines cannot be modified. ! 642: ! 643: Most TED commands work as before, with (at least) the following exceptions. ! 644: Text withdrawal only works within a given file; that is, one cannot withdraw ! 645: text containing parts (or all) of different files. (^U)^R, (^U)^W, and ^\I ! 646: only affect the current file, i.e., the file containing the cursor. ^Z acts on ! 647: the current file, and ^U^Z acts on the entire buffer. ! 648: ! 649: ^U-^W can be used to write out (only) changed files, with options of using the ! 650: existing file names or specifying new ones. There are a number of ^V options ! 651: related to multi-file buffers. ^VA moves to the start of the current file, ^VE ! 652: move to the end of the current file, ^VN moves to the start of the next file, ! 653: ^VP moves to the start of the previous file, ^V#@ moves to line # of the ! 654: buffer, ^V^K deletes the current file from the buffer, and ^VO inserts space ! 655: for a new file. ^VV displays the file number and name of the current file, the ! 656: file and buffer line numbers of the current cursor position, and the column and ! 657: character numbers of the current cursor position. There is also a ^\ option ! 658: related to multi-file buffers. ^\G takes the current file, which should be a ! 659: CLU or Argus file, and splits it into a several files, each containing one ! 660: module. ! 661: ! 662: While working on a multi-file buffer, all changed files will be written to the ! 663: ted save file. If the system crashes, simply reading in your ted save file ! 664: will not get you back to a multi-file buffer. To separate out individual ! 665: files, see "~CLU/restore.macro". ! 666: **** Multi-file buffers **** ! 667: ! 668: **** Multiple buffers **** ! 669: When you first start up a TED, you are working in a buffer named "Main". It is ! 670: possible to have multiple named buffers around, and to switch between them. ! 671: Only one buffer is displayed in a window at one time, and any buffer can have ! 672: multiple files in it. Multiple buffers are an alternative to multi-file ! 673: buffers, and both are useful on occasion. ! 674: ! 675: The multiple buffer commands are under ^X^H. There are commands for creating ! 676: and destroying buffers and for switching between them, for moving text between ! 677: buffers, and for displaying the status of all buffers. All buffers are kept in ! 678: a ring structure, and several commands work on the basis of ring order. ! 679: ! 680: ^B asks for a buffer name, and displays that buffer if it exists, else ! 681: creates and displays a new empty buffer of that name. ! 682: ^D displays a list of all buffers and the files in those buffers, and ! 683: indicates if they have been modified since last written. ! 684: ^F flips to the buffer previously displayed in the window, if any, else ! 685: the previous buffer in the ring. ! 686: ^H asks for a string and displays the next buffer in the ring whose name ! 687: contains that string as a substring. ! 688: ^K asks for a buffer name and kills the specified buffer unless it is ! 689: being displayed by another window. Confirmation must be given if the ! 690: buffer has been modified. If the buffer is being displayed in the ! 691: current window, a new buffer is chosen for display. ! 692: ^N displays the #'th next buffer in the ring ! 693: ^P displays the #'th previous buffer in the ring ! 694: ^R asks for a list of files, creates (if necessary) a buffer whose name is ! 695: derived from the list, reads the files into the buffer, and displays ! 696: the buffer. If the buffer already exists and has been modified, ! 697: confirmation must be given. For a single file specification, the ! 698: buffer name is the name.suffix pair of the file specification. For a ! 699: list of file specifications, a new buffer is always created, and will ! 700: be "Main" followed by digits. ! 701: ^S,S appends text from the current buffer to the end of a named buffer ! 702: (default "Temp"). ^S appends # lines, S appends the marked text. The ! 703: text is not deleted from the current buffer. The named buffer is ! 704: created if it does not exist. ! 705: ^W,W withdraws text from the current buffer and appends it to a named buffer ! 706: (default "Temp"). ^W withdraws # lines, W withdraws the marked text. ! 707: The named buffer is created if it does not exist. ! 708: C writes out all changed files in all buffers, prompting for a new name ! 709: for each file. Typing ^G for a particular file will not write it out. ! 710: If # is zero, existing names for files will be used with no prompting. ! 711: I inserts the text of the named buffer at the cursor of the current ! 712: buffer. The text is not removed from the named buffer. ! 713: **** Multiple buffers **** ! 714: ! 715: **** Multiple windows **** ! 716: In addition to multiple buffers, it is also possible to have multiple windows. ! 717: Each window displays a single buffer, but different windows can display the ! 718: same buffer if desired. Editing can only be done in one window at a time, ! 719: though other windows can be scrolled. The "cursor" is a per buffer notion, not ! 720: a per window notion. ! 721: ! 722: One possible use of multiple windows is during compilation or formatting. The ! 723: result of a ^\ command is saved in a buffer named "Result". When you get error ! 724: messages, you can create a second window and display the Result buffer in it. ! 725: Then you can fix the errors in one window while scrolling to new error messages ! 726: in the other window. This is often much more convenient than constantly ! 727: flipping back and forth with ^\A. ! 728: ! 729: The multiple window commands are under ^X^W. There are commands for splitting ! 730: the current window and killing the current window, for moving to a new window, ! 731: for changing the size of existing windows, and for scrolling windows. Windows ! 732: are kept in a ring structure, and several commands work on the basis of ring ! 733: order. ! 734: ! 735: ^B moves the bottom boundary of current window down # lines. A negative # ! 736: means move up. Fails on bottom window. ! 737: ^K kills the current window (but not the buffer it displayed). The new ! 738: editing window is the window above, if any, else the window below. ! 739: Space from the killed window is added to the new editing window. The ! 740: cursor will be moved if necessary to reside in the part of the buffer ! 741: currently displayed in the new editing window. ! 742: ^N selects a new editing window by moving down (and around) # windows. ! 743: The cursor will be moved if necessary to reside in the part of the ! 744: buffer currently displayed in that window. ! 745: ^P selects a new editing window by moving up (and around) # windows. The ! 746: cursor will be moved if necessary to reside in the part of the buffer ! 747: currently displayed in that window. ! 748: ^R asks for a list of files, creates (if necessary) a buffer whose name is ! 749: derived from the list, reads the files into the buffer, splits the ! 750: current window, and displays the new buffer in the new, lower window. ! 751: The new window contains |#| text lines if # is not 0 or 1, otherwise ! 752: the current window is split in half. The new window becomes the ! 753: editing window. If the buffer already exists and has been modified, ! 754: confirmation must be given. For a single file specification, the ! 755: buffer name is the name.suffix pair of the file specification. For a ! 756: list of file specifications, a new buffer is always created, and will ! 757: be "Main" followed by digits. ! 758: ^S asks for a buffer name, creates a new empty buffer of that name if one ! 759: does not exist, splits the current window, and displays the named ! 760: buffer in the new, lower window. The new window contains |#| text ! 761: lines if # is not 0 or 1, otherwise the current window is split in ! 762: half. The new window becomes the editing window. ! 763: ^T moves the top boundary of the current window up # lines. A negative # ! 764: means move down. Fails on the top window. ! 765: D selects a new editing window by moving down (and around) # windows. ! 766: The part of the buffer displayed in that window will be changed if ! 767: necessary to include the cursor. ! 768: N scrolls the next window down (and around) by # lines if |#|~=1, or by a ! 769: screenful if |#|=1. Does not move the cursor in any window, and does ! 770: not change windows. ! 771: P scrolls the previous window up (and around) by # lines if |#|~=1, or by ! 772: a screenful if |#|=1. Does not move the cursor in any window, and does ! 773: not change windows. ! 774: U selects a new editing window by moving up (and around) # windows. The ! 775: part of the buffer displayed in that window will be changed if ! 776: necessary to include the cursor. ! 777: **** Multiple windows **** ! 778: ! 779: **** Incremental search **** ! 780: Incremental search changes ^S so that it searches for a match dynamically as ! 781: you type the search string. It is also useful for counting occurrences of a ! 782: string. ! 783: ! 784: ^X^SS changes the search mode to incremental. ^S starts incremental search in ! 785: Initial mode. This displays a line at the bottom announcing incremental ! 786: search, and showing you the default. You now have a number of options, based ! 787: on what character you type: ! 788: ! 789: ^D asks for a new default search string. ! 790: ^H flips the search direction. ! 791: ^L clears the screen and redisplays. ! 792: ^O asks for a string and counts the number of occurrences of that string ! 793: in the rest of the buffer in the search direction. ! 794: ^S searches forward for the default and enters Search mode. ! 795: ^U reads a numeric argument as usual, to be applied to the next command ! 796: whether or not it exits incremental search. ! 797: ^Y flips sense of whether case is ignored in searches. ! 798: CR exits incremental search, leaving the cursor where it is. ! 799: ? displays help. ! 800: ! 801: All other control characters (except ^I and ^J) exit incremental search and ! 802: execute normally. Any other character becomes the first character of the ! 803: search string and enters Search mode. ! 804: ! 805: Once Search mode is entered, ^D and ^O no longer have their special meaning, ! 806: and ^H and ^Y additionally initiate a search. The only new functions are: ! 807: ! 808: ^? (DEL) deletes # characters from the search string and restores the ! 809: cursor and search direction to their previous values. ! 810: ^G exits incremental search if the search string is empty, else clears the ! 811: search string and restores the cursor and search direction to their ! 812: initial values. ! 813: ! 814: As characters are typed in, they are added to the end of the search string, and ! 815: searching in the current direction is continued. If the desired string is not ! 816: found, the bell is rung, and the character left in the search string, with an ! 817: indication that search failed. ! 818: ! 819: When incremental search is exited, the search default is set according to the ! 820: current search string if it is non-empty. ! 821: **** Incremental search **** ! 822: ! 823: **** Macros **** ! 824: TED has a simple macro facility. A macro is simply a string of characters; ! 825: executing a macro has basically the same effect as if you typed the characters ! 826: of the macro directly on the keyboard. There are no conditional or iteration ! 827: constructs. Commonly used sequences of commands can be turned into macros and ! 828: defined in your ".ted_init" file, and special macros can be defined on the fly. ! 829: ! 830: Macros can be given either string or character names. A character-named macro ! 831: is defined by typing ^Y^@c (or ^U0^Yc), where 'c' is the character to be used ! 832: as the name of the macro, followed by the text of the macro. The macro is ! 833: executed by typing ^Yc, where c is the character naming the macro. ^U#^Yc, ! 834: with #>0, will execute the macro # times. A string-named macro is defined by ! 835: typing ^X0^Y, followed by the macro name, followed by the macro body. The ! 836: macro is executed by typing ^X^Y, followed by the macro name. Typing ^X#^Y, ! 837: followed by the macro name, will execute the macro # times. ! 838: ! 839: During macro execution, an error (anything that would display an "Oops:..." at ! 840: the top of the screen) will cause the rest macro to be ignored. This is also ! 841: true of failing searches in incremental search mode. ! 842: ! 843: You can also place a macro body in a file, and execute it via the ^X^X command. ! 844: The format of such a file is the same as your ".ted_init" file, i.e., newlines ! 845: are discarded, except that a blank line is converted to ^J. Hence, a ^J must ! 846: be represented by two ^J's. ! 847: **** Macros **** ! 848: ! 849: **** Pattern matching **** ! 850: In addition to searching for strings, TED has a pattern matching search ! 851: command, ^X^P. There is also a command, ^^P, for scanning multiple files for a ! 852: pattern. Within a pattern, it is possible to specify textual deletions, ! 853: substitutions, and insertions. The grammar for a pattern is as follows: ! 854: ! 855: prim ::= sequence of "normal" and quoted characters (^Q char) ! 856: | ^A | ^B | ^D | ^F | ^J | ^L | ^P | ^X | ^Y | ^Z ! 857: | ^E^A | ^E^B | ^E^D | ^E^F | ^E^J | ^E^L | ^E^P | ^E^Y ! 858: | ^R char char | ^K char char | ^\ char ... char ^\ ! 859: | ^V char ! 860: | ^T text [^T] ! 861: | ^U name [^U] ! 862: | ^[ pattern ^] ! 863: expr ::= prim [^@ | ^^ | ^? | ^_] ! 864: unit ::= expr ! 865: | expr ^S text [^S] [^@ | ^^ | ^? | ^_] ! 866: | expr ^W char [^@ | ^^ | ^? | ^_] ! 867: | expr ^G macro-body ^G [^@ | ^^ | ^? | ^_] ! 868: | ^N unit ! 869: group ::= unit [group] ! 870: pattern ::= group [^O pattern] ! 871: ! 872: Things in square brackets ([]) are optional. All special characters are ! 873: defined below. All other characters are "normal" characters. Normal ! 874: characters match themselves. In addition, the case flag for searches also ! 875: applies to normal characters. ! 876: ! 877: ^A matches any alphanumeric character (0-9, A-Z, _, a-z). ! 878: ^B matches any blank character (space, tab). ! 879: ^D matches any digit (0-9). ! 880: ^E can be followed by one of (^A, ^B, ^D, ^F, ^J, ^L, ^P, ^Y), and matches ! 881: any character not in the range specified by that character. For ! 882: example, ^E^Y will match only newline. ! 883: ^F matches any formatting characters (space, tab, formfeed, newline). ! 884: ^G specifies arbitrary actions to be performed on the part of the buffer ! 885: matching the previous pattern, in the form of a sequence of characters ! 886: to be executed just as if they were typed from the terminal. A ^G ! 887: within the macro-body must be quoted with a ^Q, which will not be ! 888: removed. Note that the macro-body will not be executed unless the ! 889: overall pattern matches, and in no way affects the success or failure ! 890: of matching. The macro-body is executed on a separate buffer ! 891: containing the match, with the cursor initially at the start of the ! 892: buffer and the mark at the end of the buffer. The contents of this ! 893: buffer will be used to replace the match. Note that the macro-body ! 894: need not modify the buffer; it could, for example, copy the buffer to ! 895: the end of some other buffer. The macro-body should not generate any ! 896: errors. If an error does occur within the macro-body, the rest of the ! 897: macro-body will be ignored, and you will be left in a restricted buffer ! 898: named Pattern. You should then type ^^ to continue. ! 899: ^J matches itself, the newline character. Note that newline is not ! 900: considered a text character, and must be quoted inside ^S and ^T text ! 901: strings. ! 902: ^K matches any character not in the range specified by the next two ! 903: characters. For example, ^Kab would match any character except 'a' and ! 904: 'b'. The range must be specified with the smallest character first. ! 905: ^L matches any "letter" (A-Z, _, a-z). ! 906: ^N NOT construct. This will not actually match anything. It simply ! 907: guarantees that the following pattern will not match at this point. ! 908: Note that any text deletion or insertion specified within this ! 909: construct will be ignored. ! 910: ^O separates elements of an OR construct. The elements of an OR construct ! 911: are tried in parallel for the "closest" match. The possible matches ! 912: for a particular element are always tried in order. The possible ! 913: matches for all elements are shuffled such that a match M from element ! 914: E is tried before a match M' from element E' if and only if M is at ! 915: least as close as M' and E is less than E'. Closeness is determined by ! 916: the starting position of the match. Thus, if the OR construct must ! 917: match the immediately following text, the elements are simply tried in ! 918: order. ! 919: ^P matches any punctuation (non-alphanumeric) character except newline. ! 920: ^Q quotes the next character for use as a text character. For example, ! 921: ^Q^Q will match the character ^Q. Quoting can also be done inside ^G, ! 922: ^S, ^T, and ^U arguments. ! 923: ^R matches any character in the range specified by the next two ! 924: characters. For example, ^R^@^_ matches any control character. ! 925: ^S substitutes text for the part of the buffer matching the previous ! 926: pattern. The text can be explicitly terminated with ^S, but will be ! 927: terminated implicitly by any other special character except ^Q. Note ! 928: that no substitutions occur unless the overall pattern matches. ! 929: Substitutions in no way affect the success or failure of matching. ! 930: ^T inserts text into the buffer. The text can be explicitly terminated ! 931: with ^T, but will be terminated implicitly by any other special ! 932: character except ^Q. Note that no insertions occur unless the overall ! 933: pattern matches. Insertions in no way affect the success or failure of ! 934: matching. ! 935: ^U matches the string which is the value of the named string environment ! 936: variable. If no such variable exists, or is not a string variable, ! 937: then matches the empty string. The variable name can be explicitly ! 938: terminated with ^U, but will be terminated implicitly by any other ! 939: special character except ^Q. ! 940: ^V inserts the last partial match saved under the label defined by the ! 941: next character. If no match has been saved, the overall pattern is ! 942: aborted. ! 943: ^W deletes and saves the part of the buffer matching the previous pattern ! 944: under the label defined by the next character. The text can then be ! 945: inserted using ^V with the same character as the label. Any character ! 946: can be used as a label. Note that no deletions occur unless the ! 947: overall pattern matches. Deletions in no way affect the success of ! 948: failure of matching. ! 949: ^X matches any character. ! 950: ^Y matches any character except newline. ! 951: ^Z matches the end of the buffer. ! 952: ^@ P^@ matches smallest possible sequence of the pattern P. That is, the ! 953: patterns <empty>, P, PP, PPP, PPPP, ... are tried in order for the ! 954: first match that allows the overall pattern to match. For example, ! 955: ^Y^@ can be used to specify that the remainder of the overall pattern ! 956: must start matching somewhere on the current line. ^X^@ can be used to ! 957: specify that the remainder of the overall pattern can start matching ! 958: arbitrarily far forward in the buffer. ! 959: ^^ P^^ matches smallest possible non-empty sequence of the pattern P. ! 960: That is, the patterns P, PP, PPP, PPPP, ... are tried in order for the ! 961: first match that allows the overall pattern to match. P^^ is ! 962: equivalent to ^[^[P^]P^@^]. ! 963: ^? (DEL) P^? matches the largest sequence of the pattern P. P^? will ! 964: match either the longest sequence of P's, or the empty string, but ! 965: nothing else. For example, ^Y^? will match the rest of the line, and ! 966: ^X^? will match the rest of the buffer. In situations where ^? and ^@ ! 967: could both be used, ^? is much more efficient. ! 968: ^_ P^_ matches the largest non-empty sequence of the pattern P. P^_ will ! 969: match only the longest sequence of P's. P^_ is equivalent to ! 970: ^[^[P^]P^?^]. In situations where ^_ and ^^ could both be used, ^_ is ! 971: much more efficient. ! 972: ^\ ^\ delimits a set of characters; matches any character in the set. For ! 973: example, ^\+-*/^\ matches '+', '-', '*', or '/'. ! 974: ^[ ^] are parentheses used to delimit patterns. Used when the normal ! 975: precedence is not sufficient. ! 976: ! 977: Overall, pattern matching retry is performed depth first, right to left. For ! 978: example, matching the pattern ^[A^OB^]^[X^OY^] would involve, for each match of ! 979: ^[A^O^B^], trying all possible matches of ^[X^OY^]. ! 980: ! 981: ^X^P with a positive argument will always add a prefix of ^X^@ (i.e., the match ! 982: can start arbitrarily far forward in the buffer), and will search # times. ! 983: ^X^P with a negative argument will always force the match to start at the ! 984: cursor, and will search |#| times. ! 985: ! 986: ^X0^P can be used to turn on/off buffer change confirmation. When turned on, ! 987: every change to the buffer made under pattern search will have to be confirmed. ! 988: ! 989: Beware that it is quite easy to specify patterns that will go either ! 990: indefinitely or for a very long time before failing or matching the empty ! 991: string at the end of the buffer. ^G can be used to abort long pattern ! 992: searches, but you may have to wait a bit before the ^G will be noticed. ! 993: ! 994: As an example of the use of pattern matching, the following pattern, when ! 995: searched via ^X^P, will change the buffer to single spacing: ! 996: ! 997: ^[^J^J^_^S^X^@^]^? ! 998: ! 999: The following pattern, when searched via ^X-^P, will delete all lines not ! 1000: containing the string "begin_list" or the string "end_list" (providing the ! 1001: first line does not contain either string): ! 1002: ! 1003: ^[^[^X^@^J^]^S^Y^@^[begin_list^Oend_list^]^Y^?^J^]^?^X^?^S ! 1004: ! 1005: The following pattern, when searched via ^X^P, will change the next occurrence ! 1006: of ! 1007: if <expr1> cor <expr2> ! 1008: as a complete single line with arbitrary spacing to ! 1009: if <expr2> cand <expr1> ! 1010: with the same spacing: ! 1011: ! 1012: ^B^?if^B^_^Y^^^W1^[^B^_cor^Scand^B^_^]^W2^Y^_^V2^V1 ! 1013: **** Pattern matching **** ! 1014: ! 1015: **** Pattern matching summary **** ! 1016: ^A alphanumeric (0-9, A-Z, _, a-z) ! 1017: ^B blank (space, tab) ! 1018: ^D digit (0-9) ! 1019: ^E exclusive of (^A, ^B, ^D, ^F, ^J, ^L, ^P, ^Y) ! 1020: ^F format (space, tab, formfeed, newline) ! 1021: ^G execute macro-body ! 1022: ^J newline ! 1023: ^K exclusive of range ! 1024: ^L letter (A-Z, _, a-z) ! 1025: ^N not ! 1026: ^O or ! 1027: ^P punctuation (non-alphanumeric/non-newline) ! 1028: ^Q quote ! 1029: ^R range ! 1030: ^S substitute text ! 1031: ^T insert text ! 1032: ^U variable value ! 1033: ^V insert text saved under label ! 1034: ^W withdraw and save text under label ! 1035: ^X any char ! 1036: ^Y non-newline ! 1037: ^Z end of buffer ! 1038: ^@ zero or more ! 1039: ^^ one or more ! 1040: ^_ all in a row ! 1041: ^? all in a row or none ! 1042: ^\ ^\ char set ! 1043: ^[ ^] parentheses ! 1044: **** Pattern matching summary **** ! 1045: ! 1046: **** Sorting **** ! 1047: The ^XX command performs a TECO-like sort of the current file of the buffer. ! 1048: The file is divided into records of arbitrary length, each of which contains a ! 1049: sort key, again of arbitrary length and positioned anywhere within the record. ! 1050: The records may be sorted in increasing lexicographic order with ^XX, or in ! 1051: decreasing order with ^X-X. Case distinctions are ignored if the search flag ! 1052: is set to ignore case. The sort is stable (i.e., records with equal keys will ! 1053: remain in the same relative order), so multi-key sorting can be accomplished by ! 1054: sorting a key at a time, least significant key first. ! 1055: ! 1056: Records and keys are determined using three command strings, given as arguments ! 1057: to the sort command. The first command string is executed to get from the ! 1058: start of the current record to the start of its key. The sort will be aborted ! 1059: if this command string generates any errors. The second command string is ! 1060: executed to get from the start of the key to the end of the key (i.e., one ! 1061: character beyond the end of the key). In a failing string or pattern search, ! 1062: the end of the key (and the end of the record) is assumed to be the end of the ! 1063: file; any other errors will abort the sort. The third command string is ! 1064: executed to get from the end of the key to the start of the next record (and is ! 1065: only executed if the previous command string did not generate an error). In a ! 1066: failing string or pattern search, the end of the record is assumed to be the ! 1067: end of the file; any other errors will abort the sort. ! 1068: ! 1069: The start of the first record is assumed to be the start of the file. The ! 1070: command strings are repeatedly executed until the entire file has been divided ! 1071: into records. The command strings can contain arbitrary commands. The ! 1072: defaults are (1) the empty string, meaning the key starts at the beginning of ! 1073: the record, (2) ^E, meaning the end of the key is the end of the first line of ! 1074: the record, and (3) ^F, meaning the start of the next record is the start of ! 1075: the next line. This gives a line by line sort of the file. ! 1076: ! 1077: Sorting part of a file can be done using the restricted buffer option, ^XR. ! 1078: **** Sorting **** ! 1079: ! 1080: **** Miscellaneous options **** ! 1081: String and file name arguments normally appear at the bottom of the current ! 1082: window. Setting the "arg_display_mode" number variable to a non-zero value ! 1083: will force these arguments to always appear at the bottom of the screen. The ! 1084: size of the argument window is normally 2 lines. This can be controlled with ! 1085: the "arg_display_size" number variable. ! 1086: ! 1087: Help displays (from ^H and ?) and ^\ result displays normally occupy the entire ! 1088: screen. Setting the "sub_display_mode" number variable to 1 will cause only ! 1089: the current window to be used. Setting the variable to 2 will cause the larger ! 1090: of the two areas above and below the current window to be used, or the entire ! 1091: screen if there is only one window. Setting the variable to 3 or higher will ! 1092: cause that many lines at the bottom of the screen to be used. Setting the ! 1093: variable to 0 or a negative value will restore the use of the full screen. ! 1094: ! 1095: You can check the spelling of a word with ^XW. The default argument is the ! 1096: word containing the cursor, or the word to the left of the cursor if the cursor ! 1097: is between words. If the word appears to be misspelled, a list of suggested ! 1098: spellings will be displayed at the top of the screen. Spelling is checked ! 1099: using ISPELL. The ISPELL process is normally kept around for subsequent ! 1100: spelling checks, but may be killed off with the ^X0W command. ! 1101: ! 1102: ^_D will delete a list of files with a yes/no confirmation on each file, ^_0D ! 1103: will delete a list of files without confirmation, ^_L will make a link to a ! 1104: file, ^_S will make a symbolic link to a file, ^_M will change the mode of a ! 1105: list of files, and ^_R will rename a file. ! 1106: ! 1107: ^VT displays the current date and time, and ^V0T inserts the current date and ! 1108: time into the buffer. ^V^T displays the total CPU time used by TED so far, and ! 1109: the CPU time used since the last ^V^T command. ! 1110: ! 1111: The restricted buffer option (^XR) gives you the piece of the current buffer ! 1112: between the mark and the cursor as a separate buffer to work on. The changes ! 1113: get reflected in the original buffer when you exit (via ^^) from this mode. ! 1114: ! 1115: There is an alternate mode for ^K, settable via ^X^K, that will only delete to ! 1116: the end of the line (not through it), unless you are already at the end of the ! 1117: line or #~=1. There are alternate modes for ^N and ^P, settable via ^XM, that ! 1118: place the cursor after leading spaces and tabs in the line, a mode for trying ! 1119: to stay at a fixed column position, and a mode for trying to stay at the column ! 1120: you were at before the last sequence of ^N and ^P commands. ! 1121: ! 1122: There is a mode for text type-in (^XO) that will overwrite characters in the ! 1123: buffer, rather than inserting characters into the buffer. Type-in ! 1124: automatically reverts to insertion mode when at the end of a line. Newlines ! 1125: never overwrite characters; they are always inserted. ! 1126: ! 1127: There is a mode for making simple straight line drawings (^X^D). To draw a ! 1128: line, move the cursor (with ^A, ^E, ^F, ^B, ^N, ^P, ^Z) to the starting point ! 1129: and set the mark with ^T. Then move the cursor to the ending point and type ! 1130: the printing character (octal 40 to 176) you want to draw the line with. This ! 1131: will draw a line from the mark to the cursor, and set the mark to be the end of ! 1132: the line. To erase a line, just redraw the line with a blank. Drawing a line ! 1133: will overwrite previous characters unless you type ^U before typing the ! 1134: printing character. ! 1135: ! 1136: There is a command for drawing a box around a group of lines (^XB). The box ! 1137: can be centered or indented a fixed amount from the left. The shape of the box ! 1138: is controlled by various "box_*" string and number variables. ! 1139: ! 1140: ^XCU and ^XCL change the case of the marked to text to upper and lower case, ! 1141: respectively. ^XCC capitalizes the first letter of every word in the marked ! 1142: text. ! 1143: ! 1144: The meanings of the RED and BLUE function keys on Heaths and VT52s can be ! 1145: swapped with ^XE. ! 1146: ! 1147: New mail can be tested for with ^X^M. ! 1148: ! 1149: ^X#^R will force the # line down (up if negative) from the current (with ! 1150: respect to where the cursor ought to be, not with respect to where it really ! 1151: is) line to be redisplayed, and correctly repositions the cursor. This can be ! 1152: used to clean up lines that have been garbled by system messages or a noisy ! 1153: terminal line, and is particularly useful over a slow terminal line. ! 1154: ! 1155: When editing over a slow line where the system does not know the line speed, ! 1156: ^XT#B can be used to inform TED that the line speed is # baud. This will ! 1157: automatically adjust padding appropriately. This number will only be used when ! 1158: the system does not know the line speed. You can turn padding off with ^XT0P, ! 1159: and you can prevent TED from using full screen scrolling and insert/delete line ! 1160: with ^XT0S, although you should never have to do either of these. You can tell ! 1161: TED your terminal has a meta key with ^XTM, or doesn't have a meta key with ! 1162: ^XT0M; this controls whether the high bit of each character typed gets masked. ! 1163: Again, you should never have to do either of these, as the termcap entry should ! 1164: define this. ! 1165: ! 1166: The default position of the cursor on redisplay is 75% up from the bottom of ! 1167: the window. This percentage can be set with the ^V#^ command, with #<0 ! 1168: restoring the default. When displaying the end of the buffer, the default is ! 1169: to keep the window 70% blank. This percentage can be set with the ^V#% ! 1170: command, with #<0 restoring the default. When the cursor moves outside the ! 1171: current window, the default is to choose a new window around the cursor based ! 1172: on the above percentages. However, the ^V#= command can be used to alter this, ! 1173: so that the window will instead be scrolled until the cursor comes into view ! 1174: (at the top or bottom), provided that # percent of the original window will ! 1175: remain on the screen. ^V#= with #<0 restores the default (100%). ! 1176: ! 1177: You can create your own help file, to be displayed with the ^U^H command. The ! 1178: string variable "help_file" defines the name of this file, the default being ! 1179: "~/.ted_hlp". The file can be either a simple text file or a menu-driven file. ! 1180: For a menu-driven file, the first line must start with "**** Menu for ". The ! 1181: following lines, up to the next line starting with "**** Menu for ", make up ! 1182: the menu. Each line of the menu consists of one or more menu items, separated ! 1183: by tabs. Each menu item consists of an upper-case letter (for selection) ! 1184: followed by a colon and a space, followed by the name of the selection (e.g., ! 1185: "Multiple buffers"). The body of the selection is placed anywhere in the file, ! 1186: beginning and ending with a line of the form "**** N ****", where N is the name ! 1187: of the selection. ! 1188: ! 1189: The ^X#Z command can be used to control the frequency of garbage collections, ! 1190: setting a GC to go off every 2**(#-4) megabytes. ! 1191: **** Miscellaneous options **** ! 1192: ! 1193: **** TED variables **** ! 1194: The following list names the TED variables, their types, and what they are used ! 1195: for. Number and string variables can be set by ^XN and ^XS, respectively. ! 1196: ! 1197: Name Type Usage ! 1198: ! 1199: adjust_width N width to use in adjusting text (^]W). ! 1200: arg_display_mode N N=0: string arguments at bottom of current window. ! 1201: N~=0: string arguments at bottom of screen. ! 1202: arg_display_size N string argument window size. ! 1203: backup_name S directory and extension for backup file names (^W). ! 1204: binary_suffix S default suffix for compiled binaries (^\U*M,L). ! 1205: binary_dir S default directory for compiled binaries (^\U*M,L). ! 1206: box_hspace N space between sides and text of box (^XB). ! 1207: box_hwidth N N<0: fill field if centered box (^XB). ! 1208: N>=0: width of sides of box (^XB). ! 1209: box_indent N N<0: center box in field of -N (^XB). ! 1210: N>=0: indent box N from left (^XB). ! 1211: box_string S string to draw box with (^XB). ! 1212: box_vspace N lines between top/bottom and text of box (^XB). ! 1213: box_vwidth N width of top/bottom of box (^XB). ! 1214: careful N N~=0: confirm if buffers modified (^C). ! 1215: change_limit N # of changes to buffer between saves. ! 1216: comment_sep S placed between comment symbol and comment (^]C). ! 1217: compiler_name S name of compiler (^\). ! 1218: default S default for string/filename arguments. ! 1219: default_fork S default program name (^J). ! 1220: esc-* S escape sequence redefinitions (ESC ESC). ! 1221: exit_msg N N~=0: clear screen & type message when exiting (^C). ! 1222: N=0: leave as much text on screen as possible (^C). ! 1223: fill_prefix S fill prefix to use in auto-break mode (^]A). ! 1224: help_file S user-defined help file (^U^H). ! 1225: help_query N N~=0: confirm help request (^H,^U^H). ! 1226: host S host name. ! 1227: ignore_case N N=0: upper/lower case matters in searches (^U0^S). ! 1228: justify N N~=0: justify right margin (^]J). ! 1229: keep_count N # of old versions to keep, #<0: includes oldest (^W). ! 1230: keypad N N~=0: should be in alternate keypad mode (^[H). ! 1231: last_arg S last string/filename arg (^VG). ! 1232: last_result S name of last result buffer from ^\ command. ! 1233: list_chars S list and literal delimiters (^X^Z). ! 1234: mail_box S name of spooled mail file (^X^M). ! 1235: mail_name S name of mail program (^\S). ! 1236: max_width N maximum width of non-long lines (^V!). ! 1237: no_fill_starters S initial chars on line that inhibit adjusting (^]). ! 1238: pause N N~=0: pause at inferior termination (^J). ! 1239: pconfirm N N~=0: confirm pattern search buffer changes (^X0^P). ! 1240: pindent N N~=0: indented lines start new paragraphs (^]). ! 1241: progy_name S name of program to run under ^\Y. ! 1242: progz_name S name of program to run under ^\Z. ! 1243: psearch S last pattern search string (^X^P). ! 1244: r_name S name to use for R (^\). ! 1245: save_file S save file name. ! 1246: save_mode N octal mode bits for save file (^U^L). ! 1247: scribe_name S name to use for Scribe (^\). ! 1248: search S default search object (^S). ! 1249: sub_display_mode N N<=0: help and ^\ results use entire screen. ! 1250: N=1: use current window. ! 1251: N=2: use largest area above or below current window. ! 1252: N>2: use bottom N lines of screen. ! 1253: terminal S terminal name. ! 1254: umask N octal umask for inferior processes (^\,^J). ! 1255: word_chars S special chars included in words. ! 1256: write_check N check when using long file names (^W). ! 1257: write_mode N octal mode bits for new files (^W). ! 1258: write_style N backup-on-write mode (^W,^X^C). ! 1259: ^X^Y-* S macro definitions (^X^Y). ! 1260: ^Y-* S macro definitions (^Y). ! 1261: **** TED variables **** ! 1262: ! 1263: **** Indenter variables **** ! 1264: Indenter variables can be set via ^XI. All variables can be reset to their ! 1265: default values via ^XI*. The CLU variables are: ! 1266: ! 1267: Name Value Indents when starting line (unless noted) ! 1268: ! 1269: begin_body 4 BEGIN-END body ! 1270: bracket 4 (,{,[ if starts line but does not start expr ! 1271: elts of () {} [] if first element starts line ! 1272: right side of := ! 1273: close_bracket 1 ),},] if starts line ! 1274: cluster_body 4 CLUSTER body ! 1275: Argus: GUARDIAN ! 1276: do 2 DO ! 1277: elseif 1 ELSEIF ! 1278: end 0 END (0: indent END, ~0: don't indent END) ! 1279: except 3 EXCEPT ! 1280: for_body 4 FOR body ! 1281: head 2 RETURNS, SIGNALS, YIELDS ! 1282: is 8 IS ! 1283: Argus: HANDLES ! 1284: op 2 infix operators ! 1285: routine_body 4 PROC, ITER body ! 1286: Argus: CREATOR, HANDLER, BACKGROUND, RECOVER ! 1287: tag 3 TAG ! 1288: Argus: WTAG ! 1289: tag_body 4 TAG body ! 1290: Argus: WTAG ! 1291: then 3 THEN ! 1292: then_body 5 THEN body (if THEN also starts line) ! 1293: ELSE body ! 1294: thenx_body 3 THEN body (if THEN does not start line) ! 1295: when 3 WHEN ! 1296: when_body 5 WHEN body ! 1297: where 8 WHERE ! 1298: while_body 4 WHILE body ! 1299: ! 1300: The additional variables for Argus are: ! 1301: ! 1302: Name Value Indents when starting line (unless noted) ! 1303: ! 1304: argus 0 indenter mode (0: CLU, ~0: Argus) ! 1305: coenter_body 4 coarm body (if first coarm key starts line) ! 1306: coenter_key 4 ACTION, TOPACTION, PROCESS ! 1307: coenterx_body 4 coarm body ! 1308: (if first coenter_key does not start line) ! 1309: enter_body 4 ENTER body (if enter key starts line) ! 1310: enter_key 4 ACTION, TOPACTION ! 1311: enterx_body 4 ENTER body (if enter_key does not start line) ! 1312: foreach 7 FOREACH ! 1313: seize_body 4 SEIZE body ! 1314: ! 1315: A negative indentation step value means "go to next tab stop". ! 1316: **** Indenter variables **** ! 1317: ! 1318: **** File names/backup/protection **** ! 1319: TED accepts ~-form directory specifications and does *-matching. However, ! 1320: *-matching is a little different than the way the shell does it, in that "." ! 1321: and ".." are always ignored but other entries beginning with period are not ! 1322: ignored. ! 1323: ! 1324: You can define path name abbreviations with string variables. In file name and ! 1325: directory arguments, a prefix ending with two slashes (//) is taken to be the ! 1326: name of a string variable, and is replaced by the value of the variable. For ! 1327: example, if the string variable "man1//" is defined to be "/usr/man/man1/", ! 1328: then the file name "man1//csh.1" becomes "/usr/man/man1/csh.1". In ^\J, ^\M, ! 1329: ^\R, ^\Y, ^\Z, and ^J command lines, words ending with two slashes are also ! 1330: expanded this way. ! 1331: ! 1332: Since Unix does not support version numbers, there are a number of different ! 1333: ways of creating backup files when files are written. The particular method is ! 1334: set by the ^X^C command. The options are (N) do not create a backup, and ! 1335: (over)write directly to the file, (T) do not create a backup, but write to a ! 1336: temporary file and then rename it (R) always rename the current version of the ! 1337: file, (^R) rename the current version of the file if a backup does not exist, ! 1338: otherwise (over)write directly, (^T) rename the current version of the file if ! 1339: a backup does not exist, otherwise write to a temporary file and then rename ! 1340: it, (C) always copy the current version of the file before (over)writing ! 1341: directly, (^C) copy the current version of the file if a backup does not exist ! 1342: before (over)writing directly, (X) rename the current version of the file ! 1343: unless there are links to it, in which case copy the current version, and then ! 1344: (over)write directly, and (^X) if a backup does not exist, rename the current ! 1345: version of the file unless there are links to it, in which case copy the ! 1346: current version, and then (over)write directly. The initial mode is N. The ! 1347: name of the backup file generally is obtained by appending the value of the ! 1348: "backup_name" string variable to the current file name, with the default being ! 1349: ".old". However, the current file name may have to be truncated before ! 1350: appending if the new name exceeds 255 characters. Also, "backup_name" may ! 1351: contain a (possibly relative) directory where the backup file should be placed. ! 1352: So "backup_name" should have one of the forms "str", "dir/str", or "dir/". ! 1353: ! 1354: If the backup file extension is ".^V", then version numbered backup files are ! 1355: maintained. When version numbering, the backup-on-write modes ^R, ^T, ^C, and ! 1356: ^X are equivalent to R, T, C, and X respectively. The "keep_count" number ! 1357: variable specifies how many backup versions to maintain, with default value 1. ! 1358: If "keep_count" is N, the N highest versions are kept. If "keep_count" is -N, ! 1359: then the oldest version and the N-1 highest versions are kept. ! 1360: ! 1361: When writing to a file, if you specify a name longer than 255 characters, the ! 1362: number variable "write_check" controls what happens. If the variable is 0 (the ! 1363: default), the name is truncated in the usual way. If the variable is negative, ! 1364: the file is not written and an error message is generated. If the variable is ! 1365: positive, the part before the first dot is truncated, unless the part after the ! 1366: first dot is longer than 254 characters, in which case the file is not written ! 1367: and an error message is generated. ! 1368: ! 1369: The mode bits for new files are given by the "write_mode" octal number ! 1370: variable, the default being 666 masked by the initial umask. The umask is then ! 1371: cleared, but its value is saved in the "umask" octal number variable, for use ! 1372: when running inferiors. The mode bits for ted save files is given by the ! 1373: "save_mode" octal number variable, with the default being 600. ! 1374: **** File names/backup/protection **** ! 1375: ! 1376: **** XTED features **** ! 1377: This section is for those using the version of TED that runs under the X window ! 1378: system. ! 1379: ! 1380: The following are options that can be specified at the beginning of the command ! 1381: line when starting an XTED: ! 1382: -fn=FONT ! 1383: [-HOST]:DISPLAY ! 1384: =[WIDTH][xHEIGHT][{+-}XOFF[{+-}YOFF]] ! 1385: -rv (reverse video) ! 1386: -i (miniature icon) ! 1387: -fg=COLOR (text color) ! 1388: -bg=COLOR (background color) ! 1389: -cr=COLOR (text cursor color) ! 1390: -hl=COLOR (highlight color) ! 1391: -ms=COLOR (mouse cursor color) ! 1392: ! 1393: The []'s denote optional stuff, the {}'s surround alternatives. The default ! 1394: font is 8x13, the default display is controlled by the DISPLAY environment ! 1395: variable. WIDTH and HEIGHT are in number of characters, XOFF and YOFF are in ! 1396: pixels. WIDTH defaults to 80, HEIGHT to 24, XOFF and YOFF to 1. If you don't ! 1397: give XOFF and/or YOFF, then you must use the mouse to create the window. ! 1398: Pressing left button will give you a WIDTHxHEIGHT window that you can then move ! 1399: around to place until you release the button. Pressing the right button gives ! 1400: you a window WIDTH wide and to the bottom of the screen. Pressing the middle ! 1401: button defines one corner of the window, releasing the button defines the ! 1402: opposite corner. If you give XOFF and/or YOFF, then a WIDTHxHEIGHT window will ! 1403: automatically be creating without intervention. XOFF and YOFF specify deltas ! 1404: from a corner of the screen to the corresponding corner of the window, as ! 1405: follows: ! 1406: +XOFF+YOFF upper left to upper left ! 1407: -XOFF+YOFF upper right to upper right ! 1408: +XOFF-YOFF lower left to lower left ! 1409: -XOFF-YOFF lower right to lower right ! 1410: ! 1411: The following options are also read from the .Xdefaults file: BodyFont, ! 1412: BorderWidth, ReverseVideo, Foreground, Background, Cursor, Highlight, and ! 1413: Mouse. ! 1414: ! 1415: The ^C command does not suspend XTED, as suspending is useless. Instead, ^C ! 1416: should be typed after resizing the window, to reconfigure things. (Someday ! 1417: maybe this will be automatic.) ! 1418: ! 1419: The ^J command for interactive programs does not exist: run them in another ! 1420: window! ! 1421: ! 1422: The command ^XT0C will change the window to white text on a black background. ! 1423: The command ^XTC restores the window to black text on a white background. ! 1424: ! 1425: The escape sequences generated by mouse button events are as follows: ! 1426: ! 1427: &l left-down ! 1428: &L left-up ! 1429: &a CONTROL-left-down ! 1430: &A CONTROL-left-up ! 1431: &b SHIFT-left-down ! 1432: &B SHIFT-left-up ! 1433: &d META-left-down ! 1434: &D META-left-up ! 1435: &e CONTROL-SHIFT-left-down ! 1436: &E CONTROL-SHIFT-left-up ! 1437: &f META-SHIFT-left-down ! 1438: &F META-SHIFT-left-up ! 1439: &g CONTROL-META-left-down ! 1440: &G CONTROL-META-left-up ! 1441: ! 1442: &m middle-down ! 1443: &M middle-up ! 1444: &h CONTROL-middle-down ! 1445: &H CONTROL-middle-up ! 1446: &i SHIFT-middle-down ! 1447: &I SHIFT-middle-up ! 1448: &j META-middle-down ! 1449: &J META-middle-up ! 1450: &k CONTROL-SHIFT-middle-down ! 1451: &K CONTROL-SHIFT-middle-up ! 1452: &n META-SHIFT-middle-down ! 1453: &N META-SHIFT-middle-up ! 1454: &o CONTROL-META-middle-down ! 1455: &O CONTROL-META-middle-up ! 1456: ! 1457: &r right-down ! 1458: &R right-up ! 1459: &p CONTROL-right-down ! 1460: &P CONTROL-right-up ! 1461: &q SHIFT-right-down ! 1462: &Q SHIFT-right-up ! 1463: &s META-right-down ! 1464: &S META-right-up ! 1465: &u CONTROL-SHIFT-right-down ! 1466: &U CONTROL-SHIFT-right-up ! 1467: &v META-SHIFT-right-down ! 1468: &V META-SHIFT-right-up ! 1469: &x CONTROL-META-right-down ! 1470: &X CONTROL-META-right-up ! 1471: ! 1472: Note that META-L is shown as &L, etc. (On a VS100 keyboard, the Symbol key is ! 1473: the META key, so for example you type META-l by holding down the Symbol key and ! 1474: pressing the L key, and META-L by holding down the Shift key and the Symbol key ! 1475: and pressing the L key.) ! 1476: ! 1477: The default action for these escape sequences is to do nothing, but you can ! 1478: define them as any sequence of characters in the same way you would (re)define ! 1479: any escape sequence. Additional escape sequences are available for defining ! 1480: the buttons: ! 1481: &c scrolls the window so that the cursor ends up on the same line as the ! 1482: last/current button event. This line must be within the same window as ! 1483: the cursor or an error will result. ! 1484: &C sets the cursor to the position of the last/current button event. This ! 1485: position must be within the same window as the cursor or an error will ! 1486: result. ! 1487: &t turns on tracking of the mouse and highlighting of the text between the ! 1488: cursor and the mouse if #>0, and turns tracking off if #<=0. ! 1489: Highlighting is performed by underlining if #=1, and by inverse video ! 1490: if #>1. ! 1491: &T sets the mark to the position of the last/current button event. This ! 1492: position must be within the same window as the cursor or an error will ! 1493: result. ! 1494: &w is equivalent to doing a ^X^W#D into the window containing the ! 1495: last/current button event position. This position must be within some ! 1496: window or an error will result. ! 1497: &W is equivalent to doing a ^X^W#^N into the window containing the ! 1498: last/current button event position. This position must be within some ! 1499: window or an error will result. ! 1500: &Y inserts the window system global cut buffer |#| times at the cursor ! 1501: (#<0 inserts before the cursor ! 1502: &z stores the current saved text in the window system global cut buffer. ! 1503: &Z stores the current deleted text in the window system global cut buffer. ! 1504: ! 1505: For example, with the following lines in your .ted_init, you can delete a ! 1506: highlighted region of text by placing the mouse on the first character of the ! 1507: text, pressing the left button down, moving to just after the last character of ! 1508: the text, and raising the button: ! 1509: ! 1510: ^[^[&l^Q^[^Q&W^Q^[^Q&C^Q^[^Q&t^M ! 1511: ^[^[&L^Q^U0^Q^[^Q&t^Q^[^Q&T^Q^VW^M ! 1512: ! 1513: ! 1514: By default, the various function and keypad keys transmit the following ! 1515: characters. Note that the character META-c as a command gets interpreted the ! 1516: same as the sequence "ESC c". ! 1517: ! 1518: F1 &X ! 1519: F2 &T ! 1520: F3 &U ! 1521: F4 &V ! 1522: F5 &W ! 1523: F6 &a ! 1524: F7 &b ! 1525: F8 &c ! 1526: F9 &d ! 1527: F10 &e ! 1528: F11 esc ! 1529: F12 ^H ! 1530: F13 ^J ! 1531: F17 &f ! 1532: F18 &g ! 1533: F19 &h ! 1534: F20 &i ! 1535: E1 &1 ! 1536: E2 &2 ! 1537: E3 &3 ! 1538: E4 &4 ! 1539: E5 &5 ! 1540: E6 &6 ! 1541: , &l ! 1542: - &m ! 1543: . &n ! 1544: 0 &p ! 1545: 1 &q ! 1546: 2 &r ! 1547: 3 &s ! 1548: 4 &t ! 1549: 5 &u ! 1550: 6 &v ! 1551: 7 &w ! 1552: 8 &x ! 1553: 9 &y ! 1554: UP &A ! 1555: DOWN &B ! 1556: RIGHT &C ! 1557: LEFT &D ! 1558: ENTER &M ! 1559: PF1 &P ! 1560: PF2 &Q ! 1561: PF3 &R ! 1562: PF4 &S ! 1563: **** XTED features **** ! 1564:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.