|
|
1.1 ! root 1: .NH 1 ! 2: Commands for English Text ! 3: .XS \n(PN ! 4: \*(SN Commands for English Text ! 5: .XE ! 6: .LP ! 7: \s-2JOVE\s0 has many commands that work on the basic units of English text: ! 8: words, sentences and paragraphs. ! 9: .NH 2 ! 10: Word Commands ! 11: .XS \n(PN 5n ! 12: \*(SN Word Commands ! 13: .XE ! 14: .LP ! 15: \s-2JOVE\s0 has commands for moving over or operating on words. ! 16: By convention, ! 17: they are all ESC commands. ! 18: .IP "ESC F" 20n ! 19: Move Forward over a word. ! 20: .IP "ESC B" 20n ! 21: Move Backward over a word. ! 22: .IP "ESC D" 20n ! 23: Kill forward to the end of a word. ! 24: .IP "ESC Rubout" 20n ! 25: Kill backward to the beginning of a word. ! 26: .LP ! 27: Notice how these commands form a group that parallels the character- ! 28: based commands, ! 29: C-F, ! 30: C-B, ! 31: C-D, ! 32: and Rubout. ! 33: .LP ! 34: The commands ESC F and ESC B move forward and backward over words. ! 35: They are thus analogous to Control-F and Control-B, ! 36: which move over single characters. ! 37: Like their Control- analogues, ! 38: ESC F and ESC B move several words if given an argument. ! 39: ESC F with a negative argument moves backward like ESC B, ! 40: and ESC B with a negative argument moves forward. ! 41: Forward motion stops right after the last letter of the word, ! 42: while backward motion stops right before the first letter. ! 43: .LP ! 44: It is easy to kill a word at a time. ! 45: ESC D kills the word after point. ! 46: To be precise, ! 47: it kills everything from point to the place ESC F would move to. ! 48: Thus, ! 49: if point is in the middle of a word, ! 50: only the part after point is killed. ! 51: If some punctuation comes after point, ! 52: and before the next word, ! 53: it is killed along with the word. ! 54: If you wish to kill only the next word but not the punctuation, ! 55: simply do ESC F to get to the end, ! 56: and kill the word backwards with ESC Rubout. ! 57: ESC D takes arguments just like ESC F. ! 58: .LP ! 59: ESC Rubout kills the word before point. ! 60: It kills everything from point back to where ESC B would move to. ! 61: If point is after the space in "FOO, BAR", ! 62: then "FOO, " is killed. ! 63: If you wish to kill just "FOO", ! 64: then do a ESC B and a ESC D instead of a ESC Rubout. ! 65: .NH 2 ! 66: Sentence Commands ! 67: .XS \n(PN 5n ! 68: \*(SN Sentence Commands ! 69: .XE ! 70: .LP ! 71: The \s-2JOVE\s0 commands for manipulating sentences and paragraphs are ! 72: mostly ESC commands, ! 73: so as to resemble the word-handling commands. ! 74: .IP "ESC A" 20n ! 75: Move back to the beginning of the sentence. ! 76: .IP "ESC E" 20n ! 77: Move forward to the end of the sentence. ! 78: .IP "ESC K" 20n ! 79: Kill forward to the end of the sentence. ! 80: .IP "C-X Rubout" 20n ! 81: Kill back to the beginning of the sentence. ! 82: .LP ! 83: The commands ESC A and ESC E move to the beginning and end of the ! 84: current sentence, ! 85: respectively. ! 86: They were chosen to resemble ! 87: Control-A and Control-E, ! 88: which move to the beginning and end of a line. ! 89: Unlike them, ! 90: ESC A and ESC E if repeated or given numeric arguments ! 91: move over successive sentences. ! 92: \s-2JOVE\s0 considers a sentence to end wherever there is a ".", ! 93: "?", or "!" followed by the end of a line ! 94: or by one or more spaces. ! 95: Neither ESC A nor ESC E moves past the ! 96: end of the line or spaces which delimit the sentence. ! 97: .LP ! 98: Just as C-A and C-E have a kill command, ! 99: C-K, ! 100: to go with them, ! 101: so ESC A and ESC E have a corresponding kill command ESC K which kills from ! 102: point to the end of the sentence. ! 103: With minus one as an argument it ! 104: kills back to the beginning of the sentence. ! 105: Positive arguments serve as a repeat count. ! 106: .LP ! 107: There is a special command, ! 108: C-X Rubout for killing back to the beginning of a sentence, ! 109: because this is useful when you change your ! 110: mind in the middle of composing text. ! 111: .NH 2 ! 112: Paragraph Commands ! 113: .XS \n(PN 5n ! 114: \*(SN Paragraph Commands ! 115: .XE ! 116: .LP ! 117: The \s-2JOVE\s0 commands for handling paragraphs are ! 118: .IP "ESC [" 20n ! 119: Move back to previous paragraph beginning. ! 120: .IP "ESC ]" 20n ! 121: Move forward to next paragraph end. ! 122: .LP ! 123: ESC [ moves to the beginning of the current or previous paragraph, while ! 124: ESC ] moves to the end of the current or next paragraph. Paragraphs are ! 125: delimited by lines of differing indent, or lines with text formatter ! 126: commands, or blank lines. \s-2JOVE\s0 knows how to deal with most indented ! 127: paragraphs correctly, although it can get confused by one- or two-line ! 128: paragraphs delimited only by indentation. ! 129: .NH 2 ! 130: Text Indentation Commands ! 131: .XS \n(PN 5n ! 132: \*(SN Text Indentation Commands ! 133: .XE ! 134: .LP ! 135: .IP "Tab" 20n ! 136: Indent "appropriately" in a mode-dependent fashion. ! 137: .IP "LineFeed" 20n ! 138: Is the same as Return, ! 139: except it copies the indent of the line you just left. ! 140: .IP "ESC M" 20n ! 141: Moves to the line's first non-blank character. ! 142: .LP ! 143: .LP ! 144: The way to request indentation is with the Tab command. ! 145: Its precise effect depends on the major mode. ! 146: In \fIText\fP mode, ! 147: it indents to the next tab stop. ! 148: In \fIC\fP mode, ! 149: it indents to the "right" position for C programs. ! 150: .LP ! 151: To move over the indentation on a line, ! 152: do ESC M (\fIfirst-non-blank\fP). ! 153: This command, ! 154: given anywhere on a line, ! 155: positions the cursor at the first non-blank, non-tab character on the line. ! 156: .NH 2 ! 157: Text Filling ! 158: .XS \n(PN 5n ! 159: \*(SN Text Filling ! 160: .XE ! 161: .LP ! 162: \fIAuto Fill\fP mode causes text to be \fIfilled\fP ! 163: (broken up into lines that fit in a specified width) ! 164: automatically as you type it in. ! 165: If you alter existing text so that it is no longer properly filled, ! 166: \s-2JOVE\s0 can fill it again if you ask. ! 167: .LP ! 168: Entering \fIAuto Fill\fP mode is done with ESC X \fIauto-fill-mode\fP. ! 169: From then on, ! 170: lines are broken automatically at spaces when they get longer than the ! 171: desired width. ! 172: To leave \fIAuto Fill\fP mode, ! 173: once again execute ESC X \fIauto-fill-mode\fP. ! 174: When \fIAuto Fill\fP mode is in effect, ! 175: the word \fBFill\fP appears in the mode line. ! 176: .LP ! 177: If you edit the middle of a paragraph, ! 178: it may no longer correctly be filled. ! 179: To refill a paragraph, ! 180: use the command ESC J (\fIfill-paragraph\fP). ! 181: It causes the paragraph that point is inside to be filled. ! 182: All the line breaks are removed and new ones inserted where necessary. ! 183: .LP ! 184: The maximum line width for filling is in the variable \fIright-margin\fP. ! 185: Both ESC J and auto-fill make sure that no line exceeds this width. ! 186: The value of \fIright-margin\fP is initially 78. ! 187: .LP ! 188: Normally ESC J figures out the indent of the paragraph and uses that same ! 189: indent when filling. If you want to change the indent of a paragraph you ! 190: set \fIleft-margin\fP to the new position and type C-U\ ESC\ J. ! 191: \fIfill-paragraph\fP, when supplied a numeric argument, uses the value of ! 192: \fIleft-margin\fP. ! 193: .LP ! 194: If you know where you want to set the right margin but you don't know the ! 195: actual value, move to where you want to set the value and use the ! 196: \fIright-margin-here\fP command. \fIleft-margin-here\fP does the same ! 197: for the \fIleft-margin\fP variable. ! 198: .NH 2 ! 199: Case Conversion Commands ! 200: .XS \n(PN 5n ! 201: \*(SN Case Conversion Commands ! 202: .XE ! 203: .LP ! 204: .IP "ESC L" 15n ! 205: Convert following word to lower case. ! 206: .IP "ESC U" 15n ! 207: Convert following word to upper case. ! 208: .IP "ESC C" 15n ! 209: Capitalize the following word. ! 210: .LP ! 211: .LP ! 212: The word conversion commands are most useful. ! 213: ESC L converts the word after point to lower case, ! 214: moving past it. ! 215: Thus, ! 216: successive ESC L's convert successive words. ! 217: ESC U converts to all capitals instead, ! 218: while ESC C puts the first letter of the word into upper case and the ! 219: rest into lower case. ! 220: All these commands convert several words at once if given an argument. ! 221: They are especially convenient for ! 222: converting a large amount of text from all upper case to mixed case, ! 223: because you can move through the test using ESC L, ! 224: ESC U or ESC C on each word as appropriate. ! 225: .LP ! 226: When given a negative argument, ! 227: the word case conversion commands apply to ! 228: the appropriate number of words before point, ! 229: but do not move point. ! 230: This is convenient when you have just typed a word in the wrong case. ! 231: You can give the case conversion command and continue typing. ! 232: .LP ! 233: If a word case conversion command is given in the middle of a word, ! 234: it applies only to the part of the word which follows the cursor, ! 235: treating it as a whole word. ! 236: .LP ! 237: The other case conversion functions are \fIcase-region-upper\fP and ! 238: \fIcase-region-lower\fP, ! 239: which convert everything between point and mark to the specified case. ! 240: Point and mark remain unchanged. ! 241: .NH 2 ! 242: Commands for Fixing Typos ! 243: .XS \n(PN 5n ! 244: \*(SN Commands for Fixing Typos ! 245: .XE ! 246: .LP ! 247: In this section we describe the commands that are especially useful ! 248: for the times when you catch a mistake on your text after you have made it, ! 249: or change your mind while composing text on line. ! 250: .IP "Rubout" 25n ! 251: Delete last character. ! 252: .IP "ESC Rubout" 25n ! 253: Kill last word. ! 254: .IP "C-X Rubout" 25n ! 255: Kill to beginning of sentence. ! 256: .IP "C-T" 25n ! 257: Transpose two characters. ! 258: .IP "C-X C-T" 25n ! 259: Transpose two lines. ! 260: .IP "ESC Minus ESC L" 25n ! 261: Convert last word to lower case. ! 262: .IP "ESC Minus ESC U" 25n ! 263: Convert last word to upper case. ! 264: .IP "ESC Minus ESC C" 25n ! 265: Convert last word to lower case with capital initial. ! 266: .LP ! 267: .NH 2 ! 268: Killing Your Mistakes ! 269: .XS \n(PN 5n ! 270: \*(SN Killing Your Mistakes ! 271: .XE ! 272: .LP ! 273: The Rubout command is the most important correction command. ! 274: When used among printing (self-inserting) characters, ! 275: it can be thought of as canceling the last character typed. ! 276: .LP ! 277: When your mistake is longer than a couple of characters, ! 278: it might be more convenient to use ESC Rubout or C-X Rubout. ! 279: ESC Rubout kills back to the start of the last word, ! 280: and C-X Rubout kills back to the start of the last sentence. ! 281: C-X Rubout is particularly useful when ! 282: you are thinking of what to write as you type it, ! 283: in case you change your mind about phrasing. ! 284: ESC Rubout and C-X Rubout save the killed text for C-Y and ESC Y to retrieve. ! 285: .LP ! 286: ESC Rubout is often useful even when you have typed only a few ! 287: characters wrong, ! 288: if you know you are confused in your typing and aren't sure what you typed. ! 289: At such a time, ! 290: you cannot correct with ! 291: Rubout except by looking at the screen to see what you did. ! 292: It requires less thought to kill the whole word and start over again, ! 293: especially if the system is heavily loaded. ! 294: .LP ! 295: If you were typing a command or command parameters, C-G will abort the ! 296: command with no further processing. ! 297: .NH 2 ! 298: Transposition ! 299: .XS \n(PN 5n ! 300: \*(SN Transposition ! 301: .XE ! 302: .LP ! 303: The common error of transposing two characters can be fixed ! 304: with the C-T (\fItranspose-characters\fP) command. ! 305: Normally, ! 306: C-T transposes the two characters on either side of the cursor ! 307: and moves the cursor forward one character. Repeating the command ! 308: several times "drags" a character to the right. ! 309: (Remember that \fIpoint\fP is considered to be between two characters, ! 310: even though the visible cursor in your terminal is on only one of them.) ! 311: When given at the end of a line, ! 312: rather than switching the last character of the line with the line separator, ! 313: which would be useless, ! 314: C-T transposes the last two characters on the line. ! 315: So, ! 316: if you catch your transposition error right away, ! 317: you can fix it with just a C-T. ! 318: If you don't catch it so fast, ! 319: you must move the cursor back to between the two characters. ! 320: .LP ! 321: To transpose two lines, ! 322: use the C-X C-T (\fItranspose-lines\fP) command. The line containing the ! 323: cursor is exchanged with the line above it; the cursor is left at the ! 324: beginning of the line following its original position. ! 325: .NH 2 ! 326: Checking and Correcting Spelling ! 327: .XS \n(PN 5n ! 328: \*(SN Checking and Correcting Spelling ! 329: .XE ! 330: .LP ! 331: When you write a paper, ! 332: you should correct its spelling at some point close to finishing it. ! 333: To correct the entire buffer, ! 334: do ESC X \fIspell-buffer\fP. ! 335: This invokes the ! 336: .UX ! 337: .I spell ! 338: program, ! 339: which prints a list of all the misspelled words. ! 340: \s-2JOVE\s0 catches the list and places it in a ! 341: \s-2JOVE\s0 buffer called \fBSpell\fP. ! 342: You are given an opportunity to delete from that buffer any words that ! 343: aren't really errors; ! 344: then \s-2JOVE\s0 looks up each misspelled word and ! 345: remembers where it is in the buffer being corrected. ! 346: Then you can go forward to each misspelled word with C-X C-N (\fInext-error\fP) ! 347: and backward with C-X C-P (\fIprevious-error\fP). ! 348: See the section entitled \fIError Message Parsing\fP. ! 349: .NH 1 ! 350: File Handling ! 351: .XS \n(PN ! 352: \*(SN File Handling ! 353: .XE ! 354: .LP ! 355: The basic unit of stored data is the file. ! 356: Each program, ! 357: each paper, ! 358: lives usually in its own file. ! 359: To edit a program or paper, ! 360: the editor must be told the name of the file that contains it. ! 361: This is called \fIvisiting\fP a file. ! 362: To make your changes to the file permanent on disk, ! 363: you must \fIsave\fP the file. ! 364: .NH 2 ! 365: Visiting Files ! 366: .XS \n(PN 5n ! 367: \*(SN Visiting Files ! 368: .XE ! 369: .LP ! 370: .IP "C-X C-V" 15n ! 371: Visit a file. ! 372: .IP "C-X C-R" 15n ! 373: Same as C-X C-V. ! 374: .IP "C-X C-S" 15n ! 375: Save the visited file. ! 376: .IP "ESC ~" 15n ! 377: Tell \s-2JOVE\s0 to forget that the buffer has been changed. ! 378: .LP ! 379: .LP ! 380: \fIVisiting\fP a file means copying its contents into \s-2JOVE\s0 where you ! 381: can edit them. ! 382: \s-2JOVE\s0 remembers the name of the file you visited. ! 383: Unless you use the multiple buffer feature of \s-2JOVE\s0, ! 384: you can only be visiting one file at a time. ! 385: The name of the current selected buffer is visible in the mode line. ! 386: .LP ! 387: The changes you make with \s-2JOVE\s0 are made in a copy inside \s-2JOVE\s0. ! 388: The file itself is not changed. ! 389: The changed text is not permanent until you \fIsave\fP it in a file. ! 390: The first time you change the text, ! 391: an asterisk appears at the end of the mode line; this indicates that the text ! 392: contains fresh changes which will be lost unless you save them. ! 393: .LP ! 394: To visit a file, ! 395: use the command C-X C-V. ! 396: Follow the command with the name of the file you wish to visit, ! 397: terminated by a Return. ! 398: You can abort the command by typing C-G, ! 399: or edit the filename with many of the standard \s-2JOVE\s0 commands ! 400: (e.g., C-A, C-E, C-F, ESC F, ESC Rubout). ! 401: If the filename you wish to visit is similar to the filename in the ! 402: mode line (the default filename), ! 403: you can type C-R to insert the default and then edit it. ! 404: If you do type a Return to finish the command, ! 405: the new file's text appears on the screen, ! 406: and its name appears in the mode line. ! 407: In addition, ! 408: its name becomes the new default filename. ! 409: .LP ! 410: If you wish to save the file and make your changes permanent, ! 411: type C-X C-S. ! 412: After the save is finished, ! 413: C-X C-S prints the filename and the ! 414: number of characters and lines that it wrote to the file. ! 415: If there are no changes to save (no asterisk at the end of the mode line), ! 416: the file is not saved; ! 417: otherwise the changes saved and the asterisk at the end of ! 418: the mode line will disappear. ! 419: .LP ! 420: What if you want to create a file? Just visit it. ! 421: \s-2JOVE\s0 prints ! 422: \fI(New file)\fP but aside from that behaves as if you had visited an existing ! 423: empty file. ! 424: If you make any changes and save them, ! 425: the file is created. ! 426: If you visit a nonexistent file unintentionally ! 427: (because you typed the wrong filename), ! 428: go ahead and visit the file you meant. ! 429: If you don't save the unwanted file, ! 430: it is not created. ! 431: .LP ! 432: If you alter one file and then visit another in the same buffer, ! 433: \s-2JOVE\s0 offers to save the old one. ! 434: If you answer YES, ! 435: the old file is saved; ! 436: if you answer NO, ! 437: all the changes you have made to it since the last save are lost. ! 438: You should not type ahead after a file visiting ! 439: command, ! 440: because your type-ahead might answer an unexpected question ! 441: in a way that you would regret. ! 442: .LP ! 443: Sometimes you will change a buffer by accident. ! 444: Even if you undo the effect of the change by editing, ! 445: \s-2JOVE\s0 still knows that "the buffer has been changed". ! 446: You can tell \s-2JOVE\s0 to pretend that there have been no changes with the ! 447: ESC \s+2~\s0 command (\fImake-buffer-unmodified\fP). ! 448: This command simply clears the "modified" flag which ! 449: says that the buffer contains changes which need to be saved. ! 450: Even if ! 451: the buffer really \fIis\fP changed \s-2JOVE\s0 will still act as if it were not. ! 452: .LP ! 453: If \s-2JOVE\s0 is about to save a file and sees that the date of the version ! 454: on disk does not match what \s-2JOVE\s0 last read or wrote, ! 455: \s-2JOVE\s0 notifies you of this fact, ! 456: and asks what to do, because this probably means that something is wrong. ! 457: For example, ! 458: somebody else may have been editing the same file. ! 459: If this is so, ! 460: there is a good chance that your work ! 461: or his work will be lost if you don't take the proper steps. ! 462: You should first find out exactly what is going on. ! 463: If you determine that somebody else has modified the file, ! 464: save your file under a different filename and then DIFF the two files ! 465: to merge the two sets of changes. (The "patch" command is useful for ! 466: applying the results of context diffs directly). ! 467: Also get in touch with the other person so that the files don't diverge ! 468: any further. ! 469: .NH 2 ! 470: How to Undo Drastic Changes to a File ! 471: .XS \n(PN 5n ! 472: \*(SN How to Undo Drastic Changes to a File ! 473: .XE ! 474: .LP ! 475: If you have made several extensive changes to a file and then change ! 476: your mind about them, ! 477: and you haven't yet saved them, ! 478: you can get rid of them by reading in the previous version of the file. ! 479: You can do this with the C-X C-V command, ! 480: to visit the unsaved version of the file. ! 481: .NH 2 ! 482: Recovering from system/editor crashes ! 483: .XS \n(PN 5n ! 484: \*(SN Recovering from system/editor crashes ! 485: .XE ! 486: .LP ! 487: JOVE does not have \fIAuto Save\fP mode, but it does provide a way to ! 488: recover your work in the event of a system or editor crash. JOVE saves ! 489: information about the files you're editing every so many changes to a ! 490: buffer to make recovery possible. Since a relatively small amount of ! 491: information is involved it's hardly even noticeable when JOVE does this. The ! 492: variable "sync-frequency" says how often to save the necessary ! 493: information, and the default is every 50 changes. 50 is a very ! 494: reasonable number: if you are writing a paper you will not lose more than ! 495: the last 50 characters you typed, which is less than the average length ! 496: of a line. ! 497: .NH 2 ! 498: Miscellaneous File Operations ! 499: .XS \n(PN 5n ! 500: \*(SN Miscellaneous File Operations ! 501: .XE ! 502: .LP ! 503: .LP ! 504: ESC X \fIwrite-file\fP <file><return> writes the contents of the buffer ! 505: into the file <file>, ! 506: and then visits that file. ! 507: It can be thought of as a way of "changing the name" of ! 508: the file you are visiting. ! 509: Unlike C-X C-S, ! 510: \fIwrite-file\fP saves even if the buffer has not been changed. ! 511: C-X C-W is another way of getting this command. ! 512: .LP ! 513: ESC X \fIinsert-file\fP <file><return> inserts the contents of <file> into the ! 514: buffer at point, ! 515: leaving point unchanged before the contents. ! 516: You can also use C-X C-I to get this command. ! 517: .LP ! 518: ESC X \fIwrite-region\fP <file><return> writes the region (the text between ! 519: point and mark) to the specified file. ! 520: It does not set the visited filename. ! 521: The buffer is not changed. ! 522: .LP ! 523: ESC X \fIappend-region\fP <file><return> appends the region to <file>. ! 524: The text is added to the end of <file>. ! 525: .NH 1 ! 526: Using Multiple Buffers ! 527: .XS \n(PN ! 528: \*(SN Using Multiple Buffers ! 529: .XE ! 530: .LP ! 531: When we speak of "the buffer", ! 532: which contains the text you are editing, ! 533: we have given the impression that there is only one. ! 534: In fact, ! 535: there may be many of them, ! 536: each with its own body of text. ! 537: At any time only one buffer can be \fIselected\fP and available for editing, ! 538: but it isn't hard to switch to a different one. ! 539: Each buffer individually remembers which file it is visiting, ! 540: what modes are in effect, ! 541: and whether there are any changes that need saving. ! 542: .IP "C-X B" 15n ! 543: Select or create a buffer. ! 544: .IP "C-X C-F" 15n ! 545: Visit a file in its own buffer. ! 546: .IP "C-X C-B" 15n ! 547: List the existing buffers. ! 548: .IP "C-X K" 15n ! 549: Kill a buffer. ! 550: .LP ! 551: Each buffer in \s-2JOVE\s0 has a single name, ! 552: which normally doesn't change. ! 553: A buffer's name can be any length. ! 554: The name of the currently selected buffer ! 555: and the name of the file visited in it ! 556: are visible in the mode line when you are at top level. ! 557: A newly started \s-2JOVE\s0 has only one buffer, ! 558: named \fBMain\fP, unless you specified files to edit in the ! 559: shell command that started \s-2JOVE\s0. ! 560: .NH 2 ! 561: Creating and Selecting Buffers ! 562: .XS \n(PN 5n ! 563: \*(SN Creating and Selecting Buffers ! 564: .XE ! 565: .LP ! 566: To create a new buffer, ! 567: you need only think of a name for it (say, FOO) ! 568: and then do C-X B FOO<return>, ! 569: which is the command C-X B (\fIselect-buffer\fP) followed by the name. ! 570: This makes a new, ! 571: empty buffer (if one by that name didn't previously exist) ! 572: and selects it for editing. ! 573: The new buffer is not visiting any file, ! 574: so if you try to save it you will be asked for the filename to use. ! 575: Each buffer has its own major mode; ! 576: the new buffer's major mode is \fIText\fP mode by default. ! 577: .LP ! 578: To return to buffer FOO later after having switched to another, ! 579: the same command C-X B FOO<return> is used, ! 580: since C-X B can tell whether a buffer named FOO exists already or not. ! 581: C-X B Main<return> reselects the buffer Main that \s-2JOVE\s0 started out with. ! 582: Just C-X B<return> reselects the previous buffer. ! 583: Repeated C-X B<return>'s alternate between the last two buffers selected. ! 584: .LP ! 585: You can also read a file into its own newly created buffer, ! 586: all with one command: C-X C-F (\fIfind-file\fP), ! 587: followed by the filename. ! 588: The name of the buffer is the last element of the file's pathname. ! 589: C-F stands for "Find", ! 590: because if the specified file already resides in a buffer in your \s-2JOVE\s0, ! 591: that buffer is reselected. ! 592: So you need not remember whether you have brought the file in already or not. ! 593: A buffer created by C-X C-F can be reselected later with C-X B or C-X C-F, ! 594: whichever you find more convenient. ! 595: Nonexistent files can be created with C-X C-F just as they can with C-X C-V. ! 596: .NH 2 ! 597: Using Existing Buffers ! 598: .XS \n(PN 5n ! 599: \*(SN Using Existing Buffers ! 600: .XE ! 601: .LP ! 602: To get a list of all the buffers that exist, ! 603: do C-X C-B (\fIlist-buffers\fP). ! 604: Each buffer's type, ! 605: name, ! 606: and visited filename is printed. ! 607: An asterisk before the buffer name indicates a ! 608: buffer which contains changes that have not been saved. The number ! 609: that appears at the beginning of a line in a C-X C-B listing is that ! 610: buffer's \fIbuffer number\fP. ! 611: You can select a buffer by typing its number in place of its name. ! 612: If a buffer with that number doesn't already exist, ! 613: a new buffer is created with that number as its name. ! 614: .LP ! 615: If several buffers have modified text in them, ! 616: you should save some of them with C-X C-M (\fIwrite-modified-files\fP). ! 617: This finds all the buffers that need saving and then saves them. ! 618: Saving the buffers this way is much ! 619: easier and more efficient (but more dangerous) ! 620: than selecting each one and typing C-X C-S. ! 621: If you give C-X C-M an argument, \s-2JOVE\s0 will ask for confirmation ! 622: before saving each buffer. ! 623: .LP ! 624: ESC X \fIrename-buffer\fP <new name><return> changes the name of the currently ! 625: selected buffer. ! 626: .LP ! 627: ESC X \fIerase-buffer\fP <buffer name><return> erases the contents of the ! 628: <buffer name> without deleting the buffer entirely. ! 629: .NH 2 ! 630: Killing Buffers ! 631: .XS \n(PN 5n ! 632: \*(SN Killing Buffers ! 633: .XE ! 634: .LP ! 635: After you use a \s-2JOVE\s0 for a while, ! 636: it may fill up with buffers which you no longer need. ! 637: Eventually you can reach a point where trying to ! 638: create any more results in an "out of memory" or "out of lines" ! 639: error. ! 640: When this happens you will want to kill some buffers with the ! 641: C-X K (\fIdelete-buffer\fP) command. ! 642: You can kill the buffer FOO by doing C-X K FOO<return>. ! 643: If you type C-X K <return> JOVE will kill the previously selected buffer. ! 644: If you try to kill a buffer that needs saving \s-2JOVE\s0 ! 645: will ask you to confirm it. ! 646: .LP ! 647: If you need to kill several buffers, use the command \fIkill-some-buffers\fP. ! 648: This prompts you with the name of each buffer and asks for confirmation ! 649: before killing that buffer. ! 650: .NH 1 ! 651: Controlling the Display ! 652: .XS \n(PN ! 653: \*(SN Controlling the Display ! 654: .XE ! 655: .LP ! 656: Since only part of a large file will fit on the screen, ! 657: \s-2JOVE\s0 tries to show the part that is likely to be interesting. ! 658: The display control commands allow you to see a different part of the file. ! 659: .IP "C-L" 15n ! 660: Reposition point at a specified vertical position, ! 661: OR clear and redraw the screen with point in the same place. ! 662: .IP "C-V" 15n ! 663: Scroll forwards (a screen or a few lines). ! 664: .IP "ESC V" 15n ! 665: Scroll backwards. ! 666: .IP "C-Z" 15n ! 667: Scroll forward some lines. ! 668: .IP "ESC Z" 15n ! 669: Scroll backwards some lines. ! 670: .LP ! 671: .LP ! 672: The terminal screen is rarely large enough to display all of your ! 673: file. ! 674: If the whole buffer doesn't fit on the screen, ! 675: \s-2JOVE\s0 shows a contiguous portion of it, ! 676: containing ! 677: .I point. ! 678: It continues to show approximately the same portion ! 679: until point moves outside of what is displayed; ! 680: then \s-2JOVE\s0 chooses a new portion centered around the new ! 681: .I point. ! 682: This is \s-2JOVE\s0's guess as to what you are most interested in seeing, ! 683: but if the guess is wrong, ! 684: you can use the display control commands to see a different portion. ! 685: The available screen area through which you can see part of ! 686: the buffer is called \fIthe window\fP, ! 687: and the choice of where in the ! 688: buffer to start displaying is also called \fIthe window\fP. (When ! 689: there is only one window, it plus the mode line and the input line take ! 690: up the whole screen). ! 691: .LP ! 692: First we describe how \s-2JOVE\s0 chooses a new window position on its own. ! 693: The goal is usually to place ! 694: .I point ! 695: half way down the window. ! 696: This is controlled by the variable \fIscroll-step\fP, ! 697: whose value is the number of ! 698: lines above the bottom or below the top of the window that the line ! 699: containing point is placed. ! 700: A value of 0 (the initial value) means center ! 701: .I point ! 702: in the window. ! 703: .LP ! 704: The basic display control command is C-L (\fIredraw-display\fP). ! 705: In its simplest form, ! 706: with no argument, ! 707: it tells \s-2JOVE\s0 to choose a new window position, ! 708: centering point half way from the top as usual. ! 709: .LP ! 710: C-L with a positive argument chooses a new window so as to put point ! 711: that many lines from the top. ! 712: An argument of zero puts point on the very top line. ! 713: Point does not move with respect to the text; rather, ! 714: the text and point move rigidly on the screen. ! 715: .LP ! 716: If point stays on the same line, ! 717: the window is first cleared and then redrawn. ! 718: Thus, ! 719: two C-L's in a row are guaranteed to clear the current window. ! 720: ESC C-L will clear and redraw the entire screen. ! 721: .LP ! 722: The \fIscrolling\fP commands C-V, ! 723: ESC V, ! 724: C-Z, ! 725: and ESC Z, ! 726: let you move the whole display up or down a few lines. ! 727: C-V (\fInext-page\fP) with an ! 728: argument shows you that many more lines at the bottom of the screen, ! 729: moving the text and point up together as C-L might. ! 730: C-V with a ! 731: negative argument shows you more lines at the top of the screen, ! 732: as does ESC V (\fIprevious-page\fP) with a positive argument. ! 733: .LP ! 734: To read the buffer a window at a time, ! 735: use the C-V command with no argument. ! 736: It takes the last line at the bottom of the window and puts ! 737: it at the top, ! 738: followed by nearly a whole window of lines not visible before. ! 739: Point is put at the top of the window. ! 740: Thus, each C-V shows the "next page of text", ! 741: except for one line of overlap to provide context. ! 742: To move backward, ! 743: use ESC V without an argument, ! 744: which moves a whole window backwards (again with a line of overlap). ! 745: .LP ! 746: C-Z and ESC Z scroll one line forward and one line backward, ! 747: respectively. ! 748: These are convenient for moving in units of lines ! 749: without having to type a numeric argument. ! 750: .NH 2 ! 751: Multiple Windows ! 752: .XS \n(PN 5n ! 753: \*(SN Multiple Windows ! 754: .XE ! 755: .LP ! 756: \s-2JOVE\s0 allows you to split the screen into two or more \fIwindows\fP and ! 757: use them to display parts of different files, ! 758: or different parts of the same file. ! 759: .IP "C-X 2" 15n ! 760: Divide the current window into two smaller ones. ! 761: .IP "C-X 1" 15n ! 762: Delete all windows but the current one. ! 763: .IP "C-X D" 15n ! 764: Delete current window. ! 765: .IP "C-X N" 15n ! 766: Switch to the next window. ! 767: .IP "C-X P" 15n ! 768: Switch to the previous window. ! 769: .IP "C-X O" 15n ! 770: Same as C-X P. ! 771: .IP "C-X ^" 15n ! 772: Make this window bigger. ! 773: .IP "ESC C-V" 15n ! 774: Scroll the other window. ! 775: .LP ! 776: .LP ! 777: When using \fImultiple window\fP mode, ! 778: the text portion of the screen ! 779: is divided into separate parts called \fIwindows\fP, ! 780: which can display different pieces of text. ! 781: Each window can display different files, ! 782: or parts of the same file. ! 783: Only one of the windows is ! 784: .I active; ! 785: that is ! 786: the window which the cursor is in. ! 787: Editing normally takes place in that window alone. ! 788: To edit in another window, ! 789: you would give a command to move the cursor to the other window, ! 790: and then edit there. ! 791: .LP ! 792: Each window displays a mode line for the buffer it's displaying. ! 793: This is useful to keep track of which window corresponds with which ! 794: file. In addition, the mode line serves as a separator between windows. ! 795: By setting the variable \fImode-line-should-standout\fP to "on" you can ! 796: have \s-2JOVE\s0 display the mode-line in reverse video (assuming your ! 797: particular terminal has the reverse video capability). ! 798: .LP ! 799: The command C-X 2 (\fIsplit-current-window\fP) enters multiple window mode. ! 800: A new mode line appears across the middle of the screen, ! 801: dividing the text display area into two halves. ! 802: Both windows contain the same buffer and display the same position in it, ! 803: namely where point was at the time you issued the command. ! 804: The cursor moves to the second window. ! 805: .LP ! 806: To return to viewing only one window, ! 807: use the command C-X 1 (\fIdelete-other-windows\fP). ! 808: The current window expands to fill the whole screen, ! 809: and the other windows disappear until the next C-X 2. ! 810: (The buffers and their contents are unaffected by any of the ! 811: window operations). ! 812: .LP ! 813: While there is more than one window, ! 814: you can use C-X N (\fInext-window\fP) to switch to the next window, ! 815: and C-X P (\fIprevious-window\fP) to switch to the previous one. ! 816: If you are in the bottom window and you type C-X N, ! 817: you will be placed in the top window, ! 818: and the same kind of thing happens when you type C-X P in the top window, ! 819: namely you will be placed in the bottom window. ! 820: C-X O is the same as C-X P. ! 821: It stands for "other window" because when there are only two windows, ! 822: repeated use of this command will switch between the two windows. ! 823: .LP ! 824: Often you will be editing one window while using the other just for reference. ! 825: Then, ! 826: the command ESC C-V (\fIpage-next-window\fP) is very useful. ! 827: It scrolls the next window, ! 828: as if you switched to the next window, ! 829: typed C-V, ! 830: and switched back, ! 831: without your having to do all that. ! 832: With a negative argument, ! 833: ESC C-V will do an ESC V in the next window. ! 834: .LP ! 835: When a window splits, ! 836: both halves are approximately the same size. ! 837: You can redistribute the screen space between the windows with ! 838: the C-X ^ (\fIgrow-window\fP) command. ! 839: It makes the currently selected window grow one line bigger, ! 840: or as many lines as is specified with a numeric argument. ! 841: Use ESC X \fIshrink-window\fP to make the current window smaller. ! 842: .NH 2 ! 843: Multiple Windows and Multiple Buffers ! 844: .XS \n(PN 5n ! 845: \*(SN Multiple Windows and Multiple Buffers ! 846: .XE ! 847: .LP ! 848: Buffers can be selected independently in each window. ! 849: The C-X B command selects a new buffer in whichever window contains ! 850: the cursor. ! 851: Other windows' buffers do not change. ! 852: .LP ! 853: You can view the same buffer in more than one window. ! 854: Although the same buffer appears in both windows, ! 855: they have different values of point, ! 856: so you can move around in one window while the other window ! 857: continues to show the same text. ! 858: Then, ! 859: having found one place you wish to refer to, you can go back into the ! 860: other window with C-X O or C-X P to make your changes. ! 861: .LP ! 862: If you have the same buffer in both windows, ! 863: you must beware of trying to visit a different file in one of ! 864: the windows with C-X C-V, ! 865: because if you bring a new file into this buffer, ! 866: it will replaced the old file in \fIboth\fP windows. ! 867: To view different files in different windows, ! 868: you must switch buffers in one of the windows first ! 869: (with C-X B or C-X C-F, perhaps). ! 870: .LP ! 871: A convenient "combination" command for viewing something in another ! 872: window is C-X 4 (\fIwindow-find\fP). ! 873: With this command you can ask to see any specified buffer, ! 874: file or tag in the other window. ! 875: Follow the C-X 4 with either B and a buffer name, ! 876: F and a filename, ! 877: or T and a tag name. ! 878: This switches to the other window and finds there what you specified. ! 879: If you were previously in one-window mode, ! 880: multiple-window mode is entered. ! 881: C-X 4 B is similar to C-X 2 C-X B. ! 882: C-X 4 F is similar to C-X 2 C-X C-F. ! 883: C-X 4 T is similar to C-X 2 C-X ! 884: T. ! 885: The difference is one of efficiency, ! 886: and also that C-X 4 works equally well if you are already using two windows. ! 887: .NH 1 ! 888: Processes Under \s-2JOVE\s0 ! 889: .XS \n(PN ! 890: \*(SN Processes Under \s-2JOVE\s0 ! 891: .XE ! 892: .LP ! 893: Another feature in \s-2JOVE\s0 is its ability to interact with ! 894: .UX ! 895: in a useful way. ! 896: You can run other ! 897: .UX ! 898: commands from \s-2JOVE\s0 and catch their output in \s-2JOVE\s0 buffers. ! 899: In this chapter we will discuss the different ! 900: ways to run and interact with ! 901: .UX ! 902: commands. ! 903: .NH 2 ! 904: Non-interactive ! 905: .UX ! 906: commands ! 907: .XS \n(PN 5n ! 908: \*(SN Non-interactive ! 909: .XE ! 910: .LP ! 911: To run a ! 912: .UX ! 913: command from \s-2JOVE\s0 just type "C-X !" followed by the name ! 914: of the command terminated with Return. ! 915: For example, ! 916: to get a list of all the users on the system, ! 917: you do: ! 918: .DS I ! 919: C-X ! who<return> ! 920: .DE ! 921: Then \s-2JOVE\s0 picks a reasonable buffer in which the output from the ! 922: command will be placed. ! 923: E.g., ! 924: "who" uses a buffer called \fBwho\fP; ! 925: "ps alx" uses \fBps\fP; ! 926: and "fgrep -n foo *.c" uses \fBfgrep\fP. ! 927: If \s-2JOVE\s0 ! 928: wants to use a buffer that already exists it first erases the old contents. ! 929: If the buffer it selects holds a file, ! 930: not output from a previous shell command, ! 931: you must first delete that buffer with C-X K. ! 932: .LP ! 933: Once \s-2JOVE\s0 has picked a buffer it puts that buffer in a window so you ! 934: can see the command's output as it is running. ! 935: If there is only one window \s-2JOVE\s0 will automatically make another one. ! 936: Otherwise, ! 937: \s-2JOVE\s0 ! 938: tries to pick the most convenient window which isn't the current one. ! 939: .LP ! 940: It's not a good idea to type anything while the command is running. ! 941: There are two reasons for this: ! 942: .IP (i) ! 943: \s-2JOVE\s0 won't see the characters (thus won't execute them) until the ! 944: command finishes, ! 945: so you may forget what you've typed. ! 946: .IP (ii) ! 947: Although \s-2JOVE\s0 won't know what you've typed, ! 948: it ! 949: .I will ! 950: know that you've typed something, ! 951: and then it will try to be "smart" and not update the ! 952: display until it's interpreted what you've typed. ! 953: But, ! 954: of course, ! 955: \s-2JOVE\s0 won't interpret what you type until the ! 956: .UX ! 957: command completes, ! 958: so you're left with the uneasy feeling you get when you ! 959: don't know what the hell the computer is doing*. ! 960: .FS ! 961: *This is a bug and should be fixed, ! 962: but probably won't be for a while. ! 963: .FE ! 964: .LP ! 965: If you want to interrupt the command for some reason (perhaps you ! 966: mistyped it, or you changed your mind) you can type C-]. ! 967: Typing this ! 968: inside \s-2JOVE\s0 while a process is running is the same as typing C-C when ! 969: you are outside \s-2JOVE\s0, ! 970: namely the process stops in a hurry. ! 971: .LP ! 972: When the command finishes, \s-2JOVE\s0 puts you back in the window in which ! 973: you started. ! 974: Then it prints a message indicating whether or not the command ! 975: completed successfully in its (the command's) opinion. ! 976: That is, ! 977: if the command had what it considers an error ! 978: (or you interrupt it with C-]) ! 979: \s-2JOVE\s0 will print an appropriate message. ! 980: ! 981: .NH 2 ! 982: Limitations of Non-Interactive Processes ! 983: .XS \n(PN 5n ! 984: \*(SN Limitations of Non-Interactive Processes ! 985: .XE ! 986: .LP ! 987: The reason these are called non-interactive processes is that you ! 988: can't type any input to them; you can't interact with them; they can't ! 989: ask you questions because there is no way for you to answer. ! 990: For example, ! 991: you can't run a command interpreter (a shell), or ! 992: .I mail ! 993: or ! 994: .I crypt ! 995: with C-X ! because there is no way to provide it with input. ! 996: Remember that \s-2JOVE\s0 (not the process in the window) ! 997: is listening to your keyboard, ! 998: and \s-2JOVE\s0 waits until the process dies before it looks at ! 999: what you type. ! 1000: .LP ! 1001: C-X ! is useful for running commands that do some output and then exit. ! 1002: For example, ! 1003: it's very useful to use with the C compiler to ! 1004: catch compilation error messages (see Compiling C Programs), ! 1005: or with the \fIgrep\fP commands. ! 1006: .NH 2 ! 1007: Interactive Processes \(em Run a Shell in a Window ! 1008: .XS \n(PN 5n ! 1009: \*(SN Interactive Processes \(em Run a Shell in a Window ! 1010: .XE ! 1011: .LP ! 1012: Some versions of \s-2JOVE\s0\(dg ! 1013: .FS ! 1014: \(dg For example, the version provided with 4.3BSD. ! 1015: .FE ! 1016: have the capability of running interactive ! 1017: processes. ! 1018: This is more useful than non-interactive processes for ! 1019: certain types of jobs: ! 1020: .IP (i) ! 1021: You can go off and do some editing while the command is running. ! 1022: This is useful for commands that do sporadic output and run for fairly long ! 1023: periods of time. ! 1024: .IP (ii) ! 1025: Unlike non-interactive processes, ! 1026: you can type input to these. ! 1027: In addition, ! 1028: you can edit what you type with the power of all the \s-2JOVE\s0 ! 1029: commands \fIbefore\fP you send the input to the process. ! 1030: This is a really important feature, ! 1031: and is especially useful for running a shell in a window. ! 1032: .IP (iii) ! 1033: Because you can continue with normal editing while one of the ! 1034: processes is running, ! 1035: you can create a bunch of contexts and manage them ! 1036: (select them, delete them, or temporarily put them aside) ! 1037: with \s-2JOVE\s0's window and buffer mechanisms. ! 1038: .LP ! 1039: Although we may have given an image of processes being attached to ! 1040: .I windows, ! 1041: in fact they are attached to ! 1042: .I buffers. ! 1043: Therefore, ! 1044: once an \fIi-process\fP is running you can select another buffer into that window, ! 1045: or if you wish you can delete the window altogether. ! 1046: If you reselect that buffer later it will be up to date. ! 1047: That is, ! 1048: even though the ! 1049: buffer wasn't visible it was still receiving output from the process. ! 1050: You don't have to worry about missing anything when the buffer isn't visible. ! 1051: .NH 2 ! 1052: Advantages of Running Processes in \s-2JOVE\s0 Windows. ! 1053: .XS \n(PN 5n ! 1054: \*(SN Advantages of Running Processes in \s-2JOVE\s0 Windows. ! 1055: .XE ! 1056: .LP ! 1057: There are several advantages to running a shell in a window. ! 1058: What you type isn't seen immediately by the process; ! 1059: instead \s-2JOVE\s0 waits until ! 1060: you type an entire line before passing it on to the process to read. ! 1061: This means that before you type <return> ! 1062: all of \s-2JOVE\s0's editing ! 1063: capabilities are available for fixing errors on your input line. ! 1064: If you discover an error at the beginning of the line, ! 1065: rather than erasing the whole line and starting over, ! 1066: you can simply move to the error, ! 1067: correct it, ! 1068: move back and continue typing. ! 1069: .LP ! 1070: Another feature is that you have the entire history of your session in ! 1071: a \s-2JOVE\s0 buffer. ! 1072: You don't have to worry about output from a command ! 1073: moving past the top of the screen. ! 1074: If you missed some output you can ! 1075: move back through it with ESC V and other commands. ! 1076: In addition, ! 1077: you can save yourself retyping a command (or a similar one) by sending ! 1078: edited versions of previous commands, or edit the output of one command ! 1079: to become a list of commands to be executed ("immediate shell scripts"). ! 1080: .NH 2 ! 1081: Differences between Normal and I-process Buffers ! 1082: .XS \n(PN 5n ! 1083: \*(SN Differences between Normal and I-process Buffers ! 1084: .XE ! 1085: .LP ! 1086: \s-2JOVE\s0 behaves differently in several ways when you are in an \fIi-process\fP ! 1087: buffer. ! 1088: Most obviously, <return> does different things ! 1089: depending on both your position in the buffer and on the state of the process. ! 1090: In the normal case, ! 1091: when point is at the end of the buffer, ! 1092: Return does what you'd expect: it inserts a line-separator and then ! 1093: sends the line to the process. ! 1094: If you are somewhere else in the buffer, ! 1095: possibly positioned at a previous command that you want to edit, ! 1096: Return will place a copy of that line ! 1097: (with the prompt discarded if there is one) ! 1098: at the end of the buffer and move you there. ! 1099: Then you can edit the line and type Return as in the normal case. ! 1100: If the process has died for some reason, ! 1101: Return does nothing. ! 1102: It doesn't even insert itself. ! 1103: If that happens unexpectedly, ! 1104: you should type ESC X \fIlist-processes\fP<return> ! 1105: to get a list of each process and its state. ! 1106: If your process died abnormally, ! 1107: \fIlist-processes\fP may help you figure out why. ! 1108: .NH 2 ! 1109: How to Run a Shell in a Window ! 1110: .XS \n(PN 5n ! 1111: \*(SN How to Run a Shell in a Window ! 1112: .XE ! 1113: .LP ! 1114: Type ESC X \fIshell\fP<return> to start up a shell. ! 1115: As with C-X !, ! 1116: \s-2JOVE\s0 will ! 1117: create a buffer, ! 1118: called \fB*shell*\-1\fP, ! 1119: and select a window for this new buffer. ! 1120: But unlike C-X ! you will be left in the new window. ! 1121: Now, ! 1122: the shell process is said to be attached to \fBshell\-1\fP.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.