|
|
1.1 ! root 1: .de eg ! 2: .ti .5i ! 3: .sp 1 ! 4: .bo \\$1 ! 5: .sp 1 ! 6: .. ! 7: .de ks ! 8: .sp ! 9: .ta .5i \\$1 ! 10: .in \\$1 ! 11: .. ! 12: .de dk \" Describe Key ! 13: .ti 0 ! 14: \t\\$1\t\c \" Flow into the paragraph ! 15: .. ! 16: .de ke \" Key list End ! 17: .in 0 ! 18: .. ! 19: .nr si 3n ! 20: .st 2 ! 21: .m1 3 ! 22: .m4 0 ! 23: .he '%''JOVE Manual for UNIX Users' ! 24: .bs "Introduction" ! 25: JOVE ! 26: .fb ! 27: JOVE stands for Jonathan's Own Version of Emacs. ! 28: .fe ! 29: is an advanced, self-documenting, customizable real-time display ! 30: editor. It is based on the original EMACS editor written at M.I.T. ! 31: by Richard Stallman. ! 32: .fb ! 33: Although JOVE is meant to be compatible with ! 34: EMACS, and indeed many of the basic commands are very similar, there ! 35: are some major differences between the two editors, and you should not ! 36: rely on their behaving identically. ! 37: .fe ! 38: .lp ! 39: We say that JOVE is a display editor because normally the text being ! 40: edited is visible on the screen and is updated automatically as you ! 41: type your commands. ! 42: .lp ! 43: We call it a real-time editor because the display is updated very ! 44: frequently, usually after each character or pair of characters you ! 45: type. This minimizes the amount of information you must keep in your ! 46: head as you edit. ! 47: .lp ! 48: We call JOVE advanced because it provides facilities that go beyond ! 49: simple insertion and deletion: filling of text; automatic indentations ! 50: of programs; view more than one file at once; and dealing in terms of ! 51: characters, words, lines, sentences and paragraphs. It is much easier ! 52: to type one command meaning "go to the end of the paragraph" than to ! 53: find the desired spot with repetition of simpler commands. ! 54: .lp ! 55: Self-documenting means that at almost any time you can type a key to ! 56: find out what a command does, or to find all the commands that pertain ! 57: to a topic. ! 58: .lp ! 59: Customizable means that you can change the definition of JOVE commands ! 60: in little ways. For example, you can rearrange the command set; if ! 61: you prefer to use arrow keys for the four basic cursor motion commands ! 62: (up, down, left and right), you can. Another sort of customization is ! 63: writing new commands by combining built in commands. ! 64: .es ! 65: .bs "The Organization of the Screen" ! 66: JOVE divides the screen up into several sections. The biggest of ! 67: these sections is used to display the text you ! 68: are editing. The terminal's cursor shows the position of \fIpoint\fR, ! 69: the location at which editing takes place. While the cursor appears ! 70: to point \fIat\fR a character, point should be thought of as between ! 71: characters; it points \fIbefore\fR the character that the cursor ! 72: appears on top of. Terminals have only one cursor, and when output is ! 73: in progress it must appear where the typing is being done. This ! 74: doesn't mean that point is moving; it is only that JOVE has no way of ! 75: showing you the location of point except when the terminal is idle. ! 76: .lp ! 77: The lines of the screen are usually available for displaying text but ! 78: sometimes are pre-empted by typeout from certain commands (such as, a ! 79: listing of all the editor functions). Most of the time, output from ! 80: commands like these is only desired for a short period of time, ! 81: usually just long enough to glance at it. When you have finished ! 82: looking at the output, you can type Space to make your text reappear. ! 83: (Usually typing a Space inserts itself, but when there is typeout on ! 84: the screen, it does nothing but get rid of that.) Any other command ! 85: executes normally, \fIafter\fR redrawing your text. ! 86: .bs "The Message Line" ! 87: The bottom line on the screen, called the \fImessage line\fR is ! 88: reserved for printing messages, and for accepting input from the user, ! 89: such as file names, or search strings. When JOVE prompts for input, ! 90: the cursor will temporarily appear on the bottom line, waiting for you ! 91: to type a string. When you have finished typing your input, you can ! 92: type a Return to send it to JOVE. If you change your mind about ! 93: running the command that is waiting for input, you can type ^G to ! 94: abort, and you can continue with your editing. ! 95: .lp ! 96: Sometimes you will see --more-- on the message line. This happens ! 97: when typeout from a command is too long to fit in the screen. It ! 98: means that if you type a Space the next screenful of typeout will be ! 99: printed. If you are not interested, typing anything but a Space will ! 100: cause the rest of the output to be discarded. Typing C-G will discard ! 101: the output and print Aborted where the --more-- was. Typing any other ! 102: command will discard the rest of the output and also do the command. ! 103: .es ! 104: .bs "The Mode Line" ! 105: At the bottom of the screen, but above the message line, is the ! 106: \fImode line\fR. The mode line format looks like this: ! 107: .sp 1 ! 108: \fBJOVE (major minor) Buffer: bufr "file" *\fR ! 109: .sp 1 ! 110: \fImajor\fR is the name of the current \fImajor mode\fR. At any time, ! 111: JOVE can be in only one of the possible major modes. Currently there ! 112: are only two major modes: Text and C. ! 113: .lp ! 114: \fIminor\fR is a list of the minor modes that are turned. "Fill" ! 115: means that Auto Fill mode is on; "Save" means Auto Save mode is on; ! 116: "OvrWt" means that Over Write mode is on. "Def" means that you are in ! 117: the process of defining a keyboard macro. This is not really a mode, ! 118: but it's useful to be reminded about. ! 119: .lp ! 120: \fIbufr\fR is the name of the currently selected \fIbuffer\fR. ! 121: Each buffer has its own name and holds a file being edited; this is ! 122: how JOVE can hold several files at once. But at any given time you ! 123: are editing only one of them, the \fIselected\fR buffer. When we ! 124: speak of what some command does to "the buffer", we are talking about ! 125: the currently selected buffer. Multiple buffers makes it easy to ! 126: switch around between several files, and then it is very useful that ! 127: the mode line tells you which one you are editing at any time. ! 128: .lp ! 129: \fIfile\fR is the name of the file that you are editing. This is the ! 130: default file name for commands that expect a file name as input. ! 131: .lp ! 132: The star at the end of the mode line means that there are changes in ! 133: the buffer that have not been saved in the file. If the file has not ! 134: been changed since it was read in or saved, there is no star. ! 135: .es ! 136: .es ! 137: .bs "Command Input Conventions" ! 138: .bs "Notational Conventions for ASCII Characters" ! 139: In this manual, "Control" characters (that is, characters that are ! 140: typed with the Control key and some other key at the same time) are ! 141: represented by "C-" followed by another character. Thus, C-A is the ! 142: character you get when you type A with the Control key (sometimes ! 143: labeled CTRL) down. Most control characters when present in the JOVE ! 144: buffer are displayed with a caret; thus, ^A for C-A. Rubout is ! 145: displayed as ^?. ! 146: .es ! 147: .bs "Commands, Functions, and Variables" ! 148: JOVE is composed of \fIfunctions\fR, which have long names such as ! 149: "next-line" and definitions which are programs that perform the ! 150: editing operations. Then \fIcommands\fR such as C-N are connected to ! 151: functions through the \fIcommand dispatch table\fR. When we say that ! 152: C-N moves the cursor down a line, we are glossing over a distinction ! 153: which is unimportant for ordinary use, but essential for simple ! 154: customization: it is the function next-line which knows how to move ! 155: down a line, and C-N moves down a line because it is connected to that ! 156: function. ! 157: .lp ! 158: Sometimes the description of a command will say "to change this, set ! 159: the variable mumble foo". A variable is a name used to remember a ! 160: value. JOVE contains variables which are there so that you can change ! 161: them if you want to customize. The variable's value is examined by ! 162: some command, and changing that value makes the command behave ! 163: differently. Until you are interesting in customizing, you can ignore ! 164: this information. ! 165: .es ! 166: .bs "Prefix Characters" ! 167: Because there are more function names than keys, JOVE provides ! 168: \fIprefix characters\fR to increase the number of functions that can ! 169: easily be invoked. When you type a prefix character JOVE will wait ! 170: for another character before deciding what to do. If you wait more ! 171: than a second or so, JOVE will print the prefix character on the ! 172: message line and leave the cursor down there until you type your next ! 173: character. There are two prefix characters built into JOVE: Escape ! 174: and Control-X. How the next character is interpreted depends on which ! 175: prefix character you typed. For example, if you type Escape followed ! 176: by F you'll run forward-word, but if you type Control-X followed by ! 177: B you'll run select-buffer. ! 178: .lp ! 179: To get a list of keys and their associated function, you type ESC X ! 180: describe-bindings. If you want to describe a single key, ESC X ! 181: describe-key will work. ! 182: .es ! 183: .es ! 184: .bs "Basic Editing Commands" ! 185: .bs "Inserting Text" ! 186: To insert printing characters into the text you are editing, just type ! 187: them. All printing characters your type are inserted into the text at ! 188: the cursor (that is, at \fIpoint\fR), and the cursor moves forward. ! 189: Any characters after the cursor move forward too. If the text in the ! 190: buffer is FOOBAR, with the cursor before the B, then if you type XX, ! 191: you get FOOXXBAR, with the cursor still before the B. ! 192: .lp ! 193: To correct text you have just inserted, you can use Rubout. Rubout ! 194: deletes the character \fIbefore\fR the cursor (not the one that the ! 195: cursor is on top of or under; that is the character \fIafter\fR the ! 196: cursor). The cursor and all characters after it move backwards. ! 197: Therefore, if you typing a printing character and then type Rubout, ! 198: they cancel out. ! 199: .lp ! 200: To end a line and start typing a new one, type Return. Return ! 201: operates by inserting a \fIline-separator\fR, so if you type Return in ! 202: the middle of a line, you break the line in two. Because a ! 203: line-separator is just a single character, you can type Rubout at the ! 204: beginning of a line to delete the line-separator and join it with the ! 205: preceding line. ! 206: .lp ! 207: If you add too many characters to one line, without breaking it with ! 208: Return, the line will grow too long to display on one screen line. ! 209: When this happens, JOVE puts an "!" at the extreme right margin, and ! 210: doesn't bother to display the rest of the line. The "!" is not part ! 211: of your text; conversely, even though you can't see the rest of your ! 212: line, it's still there, and if you break the line, the "!" will go ! 213: away. ! 214: .lp ! 215: Direct insertion works for printing characters and space, but other ! 216: characters act as editing commands and do not insert themselves. If ! 217: you need to insert a control character, Escape, or Rubout, you must ! 218: first \fIquote\fR it by typing the Control-Q command first. ! 219: .es ! 220: .bs "Moving the Cursor" ! 221: To do more than insert characters, you have to know how to move the ! 222: cursor. Here are a few of the commands for doing that. ! 223: .ks 1.5i ! 224: .dk C-A ! 225: Move to the beginning of the line. ! 226: .dk C-E ! 227: Move to the end of the line. ! 228: .dk C-F ! 229: Move forward over one character. ! 230: .dk C-B ! 231: Move backward over one character. ! 232: .dk C-N ! 233: Move down one line, vertically. If you start in the middle of one ! 234: line, you end in the middle of the next. ! 235: .dk C-P ! 236: Move up one line, vertically. ! 237: .dk "ESC <" ! 238: Move to the beginning of your text. ! 239: .dk "ESC >" ! 240: Move to the end of your text. ! 241: .ke ! 242: .es ! 243: .bs "Erasing Text" ! 244: .ks 1.5i ! 245: .dk Rubout ! 246: Delete the character before the cursor. ! 247: .dk C-D ! 248: Delete the character after the cursor. ! 249: .dk C-K ! 250: Kill to the end of the line. ! 251: .ke ! 252: .lp ! 253: You already know about the Rubout command which deletes the character ! 254: before the cursor. Another command, Control-D, deletes the character ! 255: after the cursor, causing the rest of the text on the line to shift ! 256: left. If Control-D is typed at the end of a line, that line and the ! 257: next line are joined together. ! 258: .lp ! 259: To erase a larger amount of text, use the Control-K command, which ! 260: kills a line at a time. If Control-K is done at the beginning or ! 261: middle of a line, it kills all the text up to the end of the line. If ! 262: Control-K is done at the end of a line, it joins that line and the ! 263: next line. ! 264: .es ! 265: .bs "Files - Saving Your Work" ! 266: The commands above are sufficient for creating text in the JOVE ! 267: buffer. The more advanced JOVE commands just make things easier. But ! 268: to keep any text permanently you must put it in a \fIfile\fR. Files ! 269: are the objects which UNIX uses for storing data for a length of ! 270: time. To tell JOVE to edit text in a file, choose a \fIfilename\fR, ! 271: such as foo.bar, and type C-X C-R foo.bar<cr>. This \fIreads\fR ! 272: the file foo.bar so that its contents appear on the screen for ! 273: editing. You can make changes, and then save the file by typing C-X ! 274: C-S. This makes the changes permanent and actually changes the file ! 275: foo.bar. Until then, the changes are only inside you JOVE, and the ! 276: file foo.bar is not really changed. If the file foo.bar doesn't ! 277: exist, and you want to create it, read it as if it did exist. When ! 278: you save your text with C-X C-S the file will be created. ! 279: .es ! 280: .es ! 281: .bs "Giving Numeric Arguments to JOVE Commands" ! 282: Any JOVE command can be given a \fInumeric argument\fR. Some commands ! 283: interpret the argument as a repetition count. For example, giving an ! 284: argument of ten to the C-F command (forward-character) moves forward ! 285: ten characters. With these commands, no argument is equivalent to an ! 286: argument of 1. ! 287: .lp ! 288: Some commands use the value of the argument, but do something peculiar ! 289: when there is no argument. For example, ESC G (goto-line) with an ! 290: argument \fBn\fR goes to the beginning of the \fBn'th\fR line. But ! 291: ESC G with no argument doesn't do anything. ! 292: .lp ! 293: The fundamental way of specifying an argument is to use ESC followed ! 294: by the digits of the argument. Negative arguments are allowed, ! 295: although not all of the commands know what to do with one. ! 296: .lp ! 297: Typing C-U means do the next command four times. Two such C-U's ! 298: multiply the next command by sixteen. Thus, C-U C-U C-F moves forward ! 299: sixteen characters. This is a good way to move forward quickly, since ! 300: it moves about 1/4 of a line on most terminals. Other useful ! 301: combinations are: C-U C-U C-N (move down a good fraction of the ! 302: screen), C-U C-U C-O (make "a lot" of blank lines), and C-U C-K (kill ! 303: four lines). ! 304: .lp ! 305: There are other, terminal-dependent ways of specifying arguments. ! 306: They have the same effect but may be easier to type. If your terminal ! 307: has a numeric keypad which sends something recognizably different from ! 308: the ordinary digits, it is possible to program JOVE to to allow use of ! 309: the numeric keypad for specifying arguments. ! 310: .es ! 311: .bs "The Mark and the Region" ! 312: In general, a command that processes an arbitray part of the buffer ! 313: must know where to start and where to stop. In JOVE, such commands ! 314: usually operate on the text between point and \fIthe mark\fR. This ! 315: range of text is called \fIthe region\fR. To specify a region, you ! 316: set point to one end of it and mark at the other. It doesn't matter ! 317: which one is set first \fIchronologically\fR, or which one comes ! 318: earlier in the text. ! 319: .ks 1.5i ! 320: .dk "C-@" ! 321: Set the mark where point is. ! 322: .dk "C-X C-X" ! 323: Interchange mark and point. ! 324: .ke ! 325: .lp ! 326: For example, if you wish to convert part of the buffer to all ! 327: upper-case, you can use the C-X C-U command, which operates on the ! 328: text in the region. You can first go to the beginning of the text to ! 329: be capitalized, put the mark there, move to the end, and then type C-X ! 330: C-U. Or, you can set the mark at the end of the text, move to the ! 331: beginning, and then type C-X C-U. C-X C-U runs the function ! 332: \fIcase-region-upper\fR, whose name signifies that the region, or ! 333: everything between point and mark, is to be capitalized. ! 334: .lp ! 335: The way to set the mark is with the C-@ command or the C-Space ! 336: command. They set the mark where point is. Then you can move point ! 337: away, leaving mark behind. ! 338: .lp ! 339: Since terminals have only one cursor, there is no way for JOVE to show ! 340: you where the mark is located. You have to remember. The usual ! 341: solution to this problem is to set the mark and then use it soon, ! 342: before you forget where it is. But you can see where the mark is with ! 343: the command C-X C-X which puts the mark where point was and point ! 344: where mark was. The extent of the region is unchanged, but the cursor ! 345: and point are now at the previous location of the mark. ! 346: .bs "The Ring of Marks" ! 347: Aside from delimiting the region, the mark is also useful for ! 348: remembering a spot that you may want to go back to. To make this ! 349: feature more useful, JOVE remembers 16 previous locations of the ! 350: mark. Most commands that set the mark push the old mark onto this ! 351: stack. To return to a marked location, use C-U C-@. This moves point ! 352: to where the mark was, and restores the mark from the stack of former ! 353: marks. So repeated use of this command moves point to all of the old ! 354: marks on the stack, one by one. Since the stack is actually a ring, ! 355: enough uses of C-U C-@ bring point back to where it was originally. ! 356: .lp ! 357: Some commands whose primary purpose is to move point a great distance ! 358: take advantage of the stack of marks to give you a way to undo the ! 359: command. The best example is ESC <, which moves to the beginning of ! 360: the buffer. If there are more than 22 lines between the beginning of ! 361: the buffer and point, ESC < sets the mark first, so that you can use ! 362: C-U C-@ or C-X C-X to go back to where you were. You can change the ! 363: 22 since it is kept in the variable \fImark-threshold\fR. By setting ! 364: it to 0, you can make these commands always set the mark. By setting ! 365: it to a very large number you can prevent these commands from ever ! 366: setting the mark. If a command desides to set the mark, it prints the ! 367: message Point Pushed. ! 368: .es ! 369: .es ! 370: .bs "Killing and Moving Text" ! 371: The most common way of moving or copying text with JOVE is to kill it, ! 372: and get it back again in one or more places. This is very safe ! 373: because the last several pieces of killed text are all remembered, and ! 374: it is versatile, because the many commands for killing syntactic units ! 375: can also be used for moving those units. There are also other ways of ! 376: moving text for special purposes. ! 377: .bs "Deletion and Killing" ! 378: Most commands which erase text from the buffer save it so that you can ! 379: get it back if you change your mind, or move or copy it to other parts ! 380: of the buffer. These commands are known as \fIkill\fR commands. The ! 381: rest of the commands that erase text do not save it; they are known as ! 382: \fIdelete\fR commands. The delete commands include C-D and Rubout, ! 383: which delete only one character at a time, and those commands that ! 384: delete only spaces or line separators. Commands that can destroy ! 385: significant amounts of nontrivial data generally kill. The commands' ! 386: names and individual descriptions use the words "kill" and "delete" to ! 387: say which they do. ! 388: .ks 1.8i ! 389: .dk C-D ! 390: Delete next character. ! 391: .dk Rubout ! 392: Delete previous character. ! 393: .dk "ESC \\\\" ! 394: Delete spaces and tabs around point. ! 395: .dk "C-X C-O" ! 396: Delete blank lines around the current line. ! 397: .dk "C-K" ! 398: Kill rest of line or one or more lines. ! 399: .dk "C-W" ! 400: Kill region (from point to the mark). ! 401: .dk "ESC D" ! 402: Kill word. ! 403: .dk "ESC Rubout" ! 404: Kill word backwards. ! 405: .dk "ESC K" ! 406: Kill to end of sentence. ! 407: .ke ! 408: .bs "Deletion" ! 409: The most basic delete commands are C-D and Rubout. C-D deletes the ! 410: character after the cursor, the one the cursor is "on top of" or ! 411: "underneath". The cursor doesn't move. Rubout deletes the character ! 412: before the cursor, and moves the cursor back. Line separators act ! 413: like normal characters when deleted. Actually, C-D and Rubout aren't ! 414: always delete commands; if you give an argument, they kill instead. ! 415: This prevents you from losing a great deal of text by typing a large ! 416: argument to a C-D or Rubout. ! 417: .lp ! 418: The other delete commands are those which delete only formatting ! 419: characters: spaces, tabs, and line separators. ESC \\ (delete white ! 420: space) deletes all the spaces and tab characters before and after ! 421: point. C-X C-O (delete blank lines) deletes all blank lines after the ! 422: current line, and if the current line is blank deletes all the blank ! 423: lines preceding the current line as well (leaving one blank line, the ! 424: current line). ! 425: .es ! 426: .bs "Killing by Lines" ! 427: The simplest kill command is the C-K command. If issued at the ! 428: beginning of a line, it kills all the text on the line, leaving it ! 429: blank. If given on a blank line, the blank line disappears. As a ! 430: consequence, if you go to the front of a non-blank line and type two ! 431: C-K's, the line disappears completely. ! 432: .lp ! 433: More generally, C-K kills from point up to the end of the line, unless ! 434: it is at the end of a line. In that case, it kills the line separator ! 435: following the line, thus merging the next line into the current one. ! 436: Invisible spaces and tabs at the end of the line are ignored when ! 437: deciding which case applies, so if point appears to be at the end of the ! 438: line, you can be sure the line separator will be killed. ! 439: .lp ! 440: C-K with an argument of zero kills all the text before point on the ! 441: current line. ! 442: .es ! 443: .bs "Other Kill Commands" ! 444: A kill command which is very general is C-W (kill-region), which kills ! 445: everything between point and the mark. With this command, you can ! 446: kill and contiguous characters, if you first set the mark at one end ! 447: of them and go to the other end. ! 448: .lp ! 449: Other syntactic units can be killed: words, with ESC Rubout and ESC D; ! 450: sentences, with ESC K. ! 451: .es ! 452: .es ! 453: .bs "Un-killing" ! 454: Un-killing is getting back text which was killed. The usual way to ! 455: move or copy text is to kill it and then un-kill it one or more times. ! 456: .ks 1.5i ! 457: .dk C-Y ! 458: Yank (re-insert) last killed text. ! 459: .dk "ESC Y" ! 460: Replace re-inserted killed text with the previously killed text. ! 461: .dk "ESC W" ! 462: Save region as last killed text without killing. ! 463: .ke ! 464: .lp ! 465: Killed text is pushed onto a \fIring buffer\fR called the \fIkill ! 466: ring\fR that remembers the last 10 blocks of text that were killed. ! 467: (Why it is called a ring buffer will be explained below.) The command ! 468: C-Y (yank) reinserts the text of the most recent kill. It leaves the ! 469: cursor at the end of the text, and puts the mark at the beginning. ! 470: Thus, a single C-W undoes the C-Y. ! 471: .lp ! 472: If you wish to copy a block of text, you might want to use ESC W ! 473: (copy-region), which copies the region into the kill ring without ! 474: removing it from the buffer. This is approximately equivalent to C-W ! 475: followed by C-Y, except that ESC W does not mark the buffer as ! 476: "changed" and does not temporarily change the screen. ! 477: .lp ! 478: There is only one kill ring, and switching buffers or files has no ! 479: effect on it. After visiting a new file, whatever was last killed in ! 480: the previous file is still on top of the kill ring. This is important ! 481: for moving text between files. ! 482: .bs "Appending Kills" ! 483: Normally, each kill command pushes a new block onto the kill ring. ! 484: However, two or more kill commands in a row combine their text into a ! 485: single entry on the ring, so that a single C-Y command gets it all ! 486: back as it was before it was killed. This means that you don't have ! 487: to kill all the text in one command; you can keep killing line after ! 488: line, or word after word, until you have killed it all, and you can ! 489: still get it all back at once. (Thus we join television in leading ! 490: people to kill thoughtlessly.) ! 491: .fe ! 492: .lp ! 493: Commands that kill forward from point add onto the end of the previous ! 494: killed text. Commands that kill backward from point add onto the ! 495: beginning. This way, any sequence of mixed forward and backward kill ! 496: commands puts all the killed text into one entry without rearrangement. ! 497: .es ! 498: .bs "Un-killing Earlier Kills" ! 499: To recover killed text that is no longer the most recent kill, you ! 500: need the ESC Y (yank-pop) command. The ESC Y command should be used ! 501: only after a C-Y command or another ESC Y. It takes the un-killed ! 502: text inserted by the C-Y and replaces it with the text from an earlier ! 503: kill. So, to recover the text of the next-to-the-last kill, you first ! 504: use C-Y to recover the last kill, and then use ESC Y to move back to ! 505: the previous kill. ! 506: .lp ! 507: You can think of all the last few kills as living on a ring. After a ! 508: C-Y command, the text at the front of the ring is also present in the ! 509: buffer. ESC Y "rotates" the ring bringing the previous string of text ! 510: to the front, and this text replaces the other text in the buffer as ! 511: well. Enough ESC Y commands can rotate any part of the ring to the ! 512: front, so you can get at any kiled text solong as it is recent enough ! 513: to be still in the ring. Eventually the ring rotates all the way ! 514: around and the most recent killed text comes to the front (and into ! 515: the buffer) again. ESC Y with a negative argument rotates the ring ! 516: backwards. ! 517: .lp ! 518: When the text you are looking for is brought into the buffer, you can ! 519: stop doing ESC Y's and it will stay there. It's really just a copy of ! 520: what's in at the front of the ring, so editing it does not change ! 521: what's in the ring. And the ring, once rotated, stays rotated, so ! 522: that doing another C-Y gets another copy of what you rotated to the ! 523: fron with ESC Y. ! 524: .lp ! 525: If you change you mind about un-killing, and C-W gets rid of the ! 526: un-killed text at any point, after any number of ESC Y's. C-W pushes ! 527: the text onto the ring again. ! 528: .es ! 529: .es ! 530: .es ! 531: .bs "Searching" ! 532: The search commands are useful for finding and moving to arbitrary ! 533: positions in the buffer in one swift motion. For example, if you just ! 534: ran the spell program on a paper and you want to correct some word, ! 535: you can use the search commands to move directly to that word. ! 536: .bs "Conventional Search" ! 537: .ks 1.5i ! 538: .dk "C-S" ! 539: Search forward. ! 540: .dk "C-R" ! 541: Search backward. ! 542: .ke ! 543: .lp ! 544: To search for the string "FOO" you type "C-S FOO<CR>". If JOVE finds ! 545: FOO it moves point to the end of it; otherwise JOVE prints an error ! 546: message and leaves point unchanged. C-S searches forward from point ! 547: so only occurrences of FOO after point are found. To search in the ! 548: other direction use C-R. It is exactly the same as C-S except it ! 549: searches in the opposite direction, and if it finds the string, it ! 550: leaves point at the beginning of it, not at the end as in C-S. ! 551: .lp ! 552: While JOVE is searching it prints the search string on the message ! 553: line line. This is so you know what JOVE is doing. When the system ! 554: is heavily loaded, when editing in exceptionally large buffers, ! 555: searches can take several (sometimes many) seconds. ! 556: .lp ! 557: JOVE remembers the last search string you used, so if you want to ! 558: search for the same string you can type "C-S <cr>". If you mistyped ! 559: the last search string, you can type C-S followed by C-R. C-R, as ! 560: usual inserts the default search string into the minibuffer, and then ! 561: you can fix it up. ! 562: .es ! 563: .bs "Incremental Search" ! 564: This search command is unusual in that is is \fIincremental\fR; it ! 565: begins to search before you have finished typing the search string. ! 566: As you type in the search string, JOVE shows you where it would be ! 567: found. WHen you have typed enough characters to identify the place ! 568: you want, you can stop. Depending on what you will do next, you may ! 569: or may not need to terminate the search explicitly with a Return ! 570: first. ! 571: .lp ! 572: The command to search is C-S (i-search-forward). ! 573: .fb ! 574: It is assumed that your JOVE has i-search-forward bound to C-S and ! 575: i-search-reverse bound to C-R. These are not the default bindings. ! 576: .fe ! 577: C-S reads in characters and positions the cursor at the first ! 578: occurrence of the characters that you have typed. If you type C-S and ! 579: then F, the cursor moves right after the first "F". Type an "O", and ! 580: see the cursor move to after the first "FO". After another "O", the ! 581: cursor is after the first "FOO" after the place where you started the ! 582: search. At the same time, the "FOO" has echoed on the message line. ! 583: .lp ! 584: If you type a mistaken character, you can rub it out. After the FOO, ! 585: typing a Rubout makes the "O" disappear from the message line, leaving ! 586: only "FO". The cursor moves back to the "FO". Rubbing out the "O" ! 587: and "F" moves the cursor back to where you started the search. ! 588: .lp ! 589: When you are satisfied with the place you have reached, you can type a ! 590: Return, which stops searching, leaving the cursor where the search ! 591: brought it. Also, any command not specially meaningful in searches ! 592: stops the searching and is then executed. Thus, typing C-A would exit ! 593: the search and then move to the beginning of the line. Return is ! 594: necessary only of the next character you want to type is a printing ! 595: character, Rubout, Return, or another search command, since those ar ! 596: ethe characters that have special meanings inside the search. ! 597: .lp ! 598: Sometimes you search for "FOO" and find it, but not the one you ! 599: expected to find. There was a second FOO that you forgot about, ! 600: before the one you were looking for. Then type another C-S and the ! 601: cursor will find the next FOO. This can be done any number of times. ! 602: If you overshoot, you can rub out the C-S's. ! 603: .lp ! 604: After you exist a search, you can search for the same string again by ! 605: typing just C-S C-S: one C-S command to start the search and then ! 606: another C-S to mean "search again". ! 607: .lp ! 608: If your string is not found at all, the message line says "Failing ! 609: I-search". The cursor is after the place where JOVE found as much of ! 610: your string as it could. Thus, if you search for FOOT, and there is ! 611: not FOOT, you might see the cursor after the FOO in FOOL. At this ! 612: point there are several things you can do. If your string was ! 613: mistyped, you can rub some of it out and correct it. If you like the ! 614: places you have found, you can type Return or some other JOVE command ! 615: to "accept what the search offered". Or you can type C-G, which ! 616: undoes the search altogether and positions you back where you started ! 617: the search. ! 618: .lp ! 619: You can also type C-R at any time to start searching backwards. If a ! 620: search fails because the place you started was too late in the file, ! 621: you should do this. Repeated C-R's keep looking formore occurrences ! 622: backwards. A C-S starts going forwards again. C-R's can be rubbed ! 623: out just like anything else. If you know that you want to start ! 624: search backwards, you can use C-R (i-search-reverse) to search ! 625: backward. ! 626: .es ! 627: .bs "Regular Expressions Search Strings" ! 628: I couldn't describe them if I tried! ! 629: .es ! 630: .es ! 631: .bs "Commands for English Text" ! 632: .bs "Word Commands" ! 633: JOVE has commands for moving over or operating on words. By ! 634: convention, they are all ESC commands. ! 635: .ks 1.7i ! 636: .dk "ESC F" ! 637: Move Forward over a word. ! 638: .dk "ESC B" ! 639: Move Backward over a word. ! 640: .dk "ESC D" ! 641: Kill up to the end of a word. ! 642: .dk "ESC Rubout" ! 643: Kill up to the beginning of a word. ! 644: .dk "ESC T" ! 645: Transpose two words; drag a word forward or backward across other words. ! 646: .ke ! 647: .lp ! 648: Notice how these commands form a group that parallels the character ! 649: base commands, C-F, C-B, C-D, Rubout, and C-T. ! 650: .lp ! 651: The commands ESC F and ESC B move forward and backward over words. ! 652: They are thus analogous to Control-F and Control-B, which move over ! 653: single characters. Like their Control- analogues, ESC F and ESC B ! 654: move several words if given an argument. ESC F with a negative ! 655: argument moves backward like ESC B, and ESC B with a negative argument ! 656: moves forward. Forward motion stops right after the last letter of ! 657: the word, while backward motion stops right before the first letter. ! 658: .lp ! 659: It is easy to kill a word at a time. ESC D kills the word after ! 660: point. To be precise, it kills everything from point to the place ESC ! 661: F would move to. Thus, if point is in the middle of a word, only the ! 662: part after point is killed. If some punctuation comes after point, ! 663: and before the next word, it is killed along with the word. If you ! 664: wish to kill only the next word but not the punctuation, simply do ESC ! 665: F to get to the end, and kill the word backwards with ESC Rubout. ESC ! 666: D takes arguments just like ESC F. ! 667: .lp ! 668: ESC Rubout kills the word before point. It kills everything from ! 669: point back to where ESC B would move to. If point is after the space ! 670: int "FOO, BAR", then "FOO, " is killed. If you wish to kill just ! 671: "FOO", then do a ESC B and a ESC D instead of a ESC Rubout. ! 672: .es ! 673: .bs "Sentence and Paragraph Commands" ! 674: The JOVE commands for manipulating sentences and paragraphs are ! 675: entirely ESC commands, so as to resemble the word-handling commands. ! 676: .ks 1.7i ! 677: .dk "ESC A" ! 678: Move back to the beginning of the sentence. ! 679: .dk "ESC E" ! 680: Move forward to the end of the sentence. ! 681: .dk "ESC K" ! 682: Kill forward to the end of the sentence." ! 683: .dk "ESC [" ! 684: Move back to previous paragraph beginning. ! 685: .dk "ESC ]" ! 686: Move forward to next paragraph end. ! 687: .dk "C-X Rubout" ! 688: Kill back to the beginning of the sentence. ! 689: .ke ! 690: .bs Sentences ! 691: The commands ESC A and ESC E move to the beginning and end of the ! 692: current sentence, respectively. They were chosen to resemble ! 693: Control-A and Control-E, which move to the beginning and end of a ! 694: line. Unlike them, ESC A and ESC E if repeated or given numeric ! 695: arguments move over successive sentences. JOVE considers a sentence ! 696: to end wherever there is a ".", "?", or "!" followed by the end of a ! 697: line, or one or more spaces. Neither ESC A nor ESC E moves past the ! 698: end of the line or spaces which delimit the sentence. ! 699: .lp ! 700: Just as C-A and C-E have a kill command, C-K, to go with them, so ESC ! 701: A and ESC E have a corrisponding kill command ESC K which kills from ! 702: point to the end of the sentence. With minus one as an argument it ! 703: kills back to the beginning of the sentence. Larger arguments serve ! 704: as a repeat count. ! 705: .lp ! 706: There is a special command, C-X Rubout for killing back to the ! 707: beginning of a sentence, because this is useful when you change your ! 708: mind in the middle of composing text. ! 709: .es ! 710: .bs Paragraphs ! 711: ESC [ moves to the beginning of the current or previous paragraph, ! 712: while ESC ] moves to the end of the current or next paragraph. Blank ! 713: lines and text justifier command lines separate paragraphs and are not ! 714: part of any paragraph. Also, an indented line starts a new ! 715: paragraph. A line beginning with a letter which can't be part of a ! 716: word, e.g., period, singlequote, "-", "\\", it is considered a ! 717: paragraph terminator. ! 718: .es ! 719: .es ! 720: .bs Indentation Commands for Text ! 721: .ks 1.7i ! 722: .dk "Tab" ! 723: Indent "appropriately" in a mode-dependent fashion. ! 724: .dk "LineFeed" ! 725: Is the same as Return, except it copies the indent of the line you ! 726: just left. ! 727: .dk "ESC M" ! 728: Moves to the line's first non-blank character. ! 729: .ke ! 730: .lp ! 731: The way to request indentation is with the Tab command. Its precise ! 732: effect depends on the major mode. In Text mode, it indents to the ! 733: next tab stop. In C mode, it indents to the "right" position for C ! 734: programs. ! 735: .lp ! 736: To move over the indentation on a line, do ESC M. This command, given ! 737: anywhere on a line, positions the cursor at the first nonblank ! 738: character on the line. ! 739: .es ! 740: .bs "Text Filling" ! 741: auto-fill mode lets you type in text that is \fIfilled\fR (broken up ! 742: into lines that fit ina specified width) as you go. If you alter ! 743: existing text and this cause it to cease to be properly filled, JOVE ! 744: can fill it again if you ask. ! 745: .lp ! 746: Entering auto-fill mode is done with ESC X auto-fill. From then on, ! 747: lines are broken automatically at spaces when they get longer than the ! 748: desired width. To leave auto-fill mode, execute ESC X auto-fill ! 749: again. When auto-fill mode is in effect, the word "Fill" appears in ! 750: the mode line. ! 751: .lp ! 752: If you edit the middle of a paragraph, it may no longer correctly be ! 753: filled. To refill a paragraph, use the command ESC J. It causes the ! 754: paragraph that point is inside to be filled. All the line breaks are ! 755: removed and then new ones are inserted where necessary. ! 756: .lp ! 757: The maximum line width for filling is in the variable right-margin. ! 758: Both ESC J and auto-fill make sure that no line exceeds this width. ! 759: right-margin is initially 72. ! 760: .es ! 761: .bs "Case Conversion Commands" ! 762: .ks 1.5i ! 763: .dk "ESC L" ! 764: Convert following word to lower case. ! 765: .dk "ESC U" ! 766: Convert following word to upper case. ! 767: .dk "ESC C" ! 768: Capitalize the following word. ! 769: .ke ! 770: .lp ! 771: The word conversion commands are most useful. ESC L converts the word ! 772: after point to lower case, moving past it. This, successive ESC L's ! 773: convert successive words. ESC U converts to all capitals instead, ! 774: while ESC C puts the first letter of the word into upper case and the ! 775: rest into lower case. All these commands convert several words at ! 776: once if given an argument. They are especially convenient for ! 777: converting a large amount of text from all upper case to mixed case, ! 778: because you can move through the test using ESC L, ESC U or ESC C on ! 779: each word as appropriate. ! 780: .lp ! 781: When given a negative argument, the word case conversion commands ! 782: apply to the appropriate number of words before point, but do not move ! 783: point. This is convenient when you have just typed a word in the ! 784: wrong case. You can give the case conversion command and continue ! 785: typing. ! 786: .lp ! 787: If a word case conversion command is given in the middle of a word, it ! 788: applies only to the part of the word which follows the cursor, ! 789: treating it as a whole word. ! 790: .lp ! 791: The other case conversion functions are case-region-upper and ! 792: case-region-lower, which convert everything between point and mark to ! 793: the specified case. Point and mark do not move. ! 794: .es ! 795: .es ! 796: .bs "Commands for Fixing Typos" ! 797: In this section we describe the commands that are especially useful ! 798: for the times when you catch a mistake on your text after you have ! 799: made it, or change your mind while composing text on line. ! 800: .ks 2.2i ! 801: .dk "Rubout" ! 802: Delete last character. ! 803: .dk "ESC Rubout" ! 804: Kill last word. ! 805: .dk "C-X Rubout" ! 806: Kill to beginning of sentence. ! 807: .dk "C-T" ! 808: Transpose two characters. ! 809: .dk "C-X C-T" ! 810: Transpose two lines. ! 811: .dk "ESC Minus ESC L" ! 812: Convert last word to lower case. ! 813: .dk "ESC Minus ESC U" ! 814: Convert last word to upper case. ! 815: .dk "ESC Minus ESC C" ! 816: Convert last word to lower case with capital initial. ! 817: .ke ! 818: .bs "Killing Your Mistakes" ! 819: The Rubout command is the most important correction command. When ! 820: used among printing (self-inserting) characters, it can be thought of ! 821: as canceling the last character typed. ! 822: .lp ! 823: When your mistake is longer than a couple of characters, it might be ! 824: more convenient to use ESC Rubout or C-X Rubout. ESC Rubout kills ! 825: back to the start of the last word, and C-X Rubout kills back to the ! 826: start of the last sentence. C-X Rubout is particularly useful when ! 827: you are thinking of what to write as you type it, in case you change ! 828: your mind about phrasing. ESC Rubout and C-X Rubout save the killed ! 829: text for C-Y and ESC Y to retrieve. ! 830: .lp ! 831: ESC Rubout is often useful even when you have typed only a few ! 832: characters wrong, if you know you are confused in your typing and ! 833: aren't sure what you typed. At such a time, you cannot correct with ! 834: Rubout except by looking at the screen to see what you did. It ! 835: requires less thought to kill the whole word and start over again, ! 836: especially if the system is heavily loaded. ! 837: .es ! 838: .bs "Transposition" ! 839: The command error of transposing two characters can be fixed, when ! 840: they are adjacent, with the C-T command. Normally, C-T transposes the ! 841: two characters on either side of the cursor. When given at the end of ! 842: a line, rather than switching the last character of the line with the ! 843: line separator, which would be useless, C-T transposees the last two ! 844: characters on the line. So, if you catch your transposition error ! 845: right away, you can fix it with just a C-T. If you don't catch it so ! 846: fast, you must move the cursor back to between the two characters. ! 847: .lp ! 848: To transpose two lines, use the C-X C-T command. ! 849: .es ! 850: .bs "Checking and Correcting Spelling" ! 851: When you write a paper, you should correct its spelling at some point ! 852: close the finishing it. To correct the entire buffer, do ESC X ! 853: spell-buffer. This invokes the UNIX spell program, which prints a list ! 854: of all the misspelled words. JOVE catches the list and places it in a ! 855: JOVE buffer called Spell, and then looks up each misspelled word and ! 856: remembers where it is in the buffer being corrected. Then you can go ! 857: forward to each misspelled word with C-X C-N (next-error) and backward ! 858: with C-X C-P (previous-error). See error parsing. ! 859: .es ! 860: .es ! 861: .bs "File Handling" ! 862: The basic unit of stored data is the file. Each program, each paper, ! 863: lives usually in its own file. To edit a program or paper, the editor ! 864: must be told the name of the file that contains it. This is called ! 865: \fIvisiting\fR a file. To make your changes to the file perminent on ! 866: disk, you must \fIsave\fR the file. ! 867: .bs "Visiting Files" ! 868: .ks 1.5i ! 869: .dk "C-X C-V" ! 870: Visit a file. ! 871: .dk "C-X C-R" ! 872: Same as C-X C-V. ! 873: .dk "C-X C-S" ! 874: Save the visited file. ! 875: .dk "ESC ~" ! 876: Tell JOVE to forget that the buffer has been changed. ! 877: .ke ! 878: .lp ! 879: \fIVisiting\fR a file means copying its contents into JOVE where you ! 880: can edit them. JOVE remembers the name of the file you visited. ! 881: Unless you use the multiple buffer or window features of JOVE, you can ! 882: only be visiting one file at a time. The name of the current selected ! 883: buffer is visible in the mode line. ! 884: .lp ! 885: The changes you make with JOVE are made in a copy inside JOVE. The ! 886: file itself is not changed. The changed test is not permanent until ! 887: you \fIsave\fR it in a file. The first time you change the text, a ! 888: star appears at the end of the mode line; this indicates that the text ! 889: contains fresh changes which will be lost unless you save them. ! 890: .lp ! 891: To visit a file, use the command C-X C-V. Follow the command with the ! 892: name of the file you wish to visit, terminated by a Return. You can ! 893: abort the command by typing C-G, or edit the filename with the many of ! 894: the standard JOVE commands (e.g., C-A, C-E, C-F, ESC F, ESC Rubout). ! 895: If the filename you wish to visit is similar to the filename in the ! 896: mode line (the default file name), you can type C-R to insert the ! 897: default and then edit it. If you do type a Return to finish the ! 898: command, the new file's text appears on the screen, and its name ! 899: appears in the mode line. In addition, its name becomes the new ! 900: default filename. ! 901: .lp ! 902: If you wish to save the file and make your changes permanent, type C-X ! 903: C-S. After the save is finished, C-X C-S prints the filename and the ! 904: number of characters and lines that it wrote to the file. If there ! 905: are no changes to save (no star at the end of the mode line), the file ! 906: is not saved; otherwise the changes saved and the star at the end of ! 907: the mode line will disappear. ! 908: .lp ! 909: Because a system crash can cause you to lose everything you have done ! 910: since the last save, we provide auto-save mode, which saves the files ! 911: you are visiting at regular intervals automatically. See auto-save. ! 912: .lp ! 913: What if you want to create a file? Just visit it. JOVE prints "(New ! 914: file)" but aside from that behaves as if you had visited an existing ! 915: empty file. If you make any changes and save them, the file is ! 916: created. If you visit a nonexistent file unintentionally (because you ! 917: typed the wrong filename), go ahead and visit the file you meant. If ! 918: you don't save the unwanted file, it is not created. ! 919: .lp ! 920: If you alter one file and then visit another in the same buffer, JOVE ! 921: offers to save the old one. If you answer YES, the old file is saved; ! 922: if you answer NO, all the changes you have made to it since the last ! 923: save are lost. You should not type ahead after a file visiting ! 924: command, because your type-ahead might answer an unexpected question ! 925: in a way that you would regret. ! 926: .lp ! 927: Sometimes you will change a buffer by accident. Even if you undo the ! 928: change by hand, JOVE still knows that "the buffer has been changed". ! 929: You can tell JOVE to belive that there have been no changes with the ! 930: ESC ~ command. This command simply clears the "modified" flag which ! 931: says that the buffer contains changes which need to be saved. Even if ! 932: the buffer really \fIis\fR changed JOVE will still act as if it were ! 933: not. ! 934: .lp ! 935: If JOVE is about to save a file and sees that the date of the version ! 936: on disk does not match what JOVE last read or wrote, JOVE notifies you ! 937: of this fact, and asks what to do, because this probably means that ! 938: something is wrong. For example, somebody else may have been editing ! 939: the same file. If this is so, there is a good chance that your work ! 940: or his work will be lost if you don't take the proper steps. You ! 941: should first find out exactly what is going on. If you determine that ! 942: somebody else has modified the file, save your file under a different ! 943: name and then DIFF the two files to merge the two sets of changes. ! 944: Also get in touch with the other person so that he doesn't continue ! 945: editing. ! 946: .es ! 947: .bs "How to Undo Drastic Changes to a File" ! 948: If you have made several extensive changes to a file and then change ! 949: your mind about them, and you haven't yet saved them, you can get rid ! 950: of them by reading in the previous version of the file. You can do ! 951: this with the C-X C-V command, to visit the unsaved version of the file. ! 952: .es ! 953: .bs "Auto Save Mode" ! 954: In auto-save mode, JOVE saves your file from time to time (based on ! 955: counting your commands) without being asked. This prevents you from ! 956: losing more than a limited amount of work in a disaster. ! 957: .lp ! 958: You can turn auto saving on or off in an individual buffer with ESC X ! 959: auto-save. In addition, you can have auto savng by default in all ! 960: buffers by putting the auto-save line in your initialization file. ! 961: See initialization files. The frequency of saving can be specified. ! 962: .lp ! 963: Once you have visited a file, you can turn auto saving on or off with ! 964: ESC X auto-save. Line other minor mode commands, ESC X auto-save ! 965: toggles. If you start typing a new file into a buffer without ! 966: visiting anything, auto-save mode is initially off, but you can turn ! 967: it on with ESC X auto-save. ! 968: .lp ! 969: When JOVE decides to do an auto-save, it doesn't save it under the ! 970: name you have visited; instead it saves it under some special "auto ! 971: save file name". This file name will be the same as your visited file ! 972: name except for having "+" appended to it. An error in the process of ! 973: auto saving prints "(Auto Save Error!)". When you leave the editor ! 974: normally, all auto saved files are removed. However, if there is an ! 975: internal error or the system crashes, the save files will not be ! 976: removed so that you salvage your work. ! 977: .lp ! 978: If you want to save your file "for real", use C-X C-S, as always. ! 979: .es ! 980: .bs "Miscellaneous File Operations" ! 981: .lp ! 982: ESC X write-named-file <file><cr> writes the contents of the buffer ! 983: into the file <file>, and then visits that file. It can be thought of ! 984: as a way of "changing the name" of the file you are visiting. Unlike ! 985: C-X C-S, write-file saves even if the buffer has not been changed. ! 986: C-X C-W is another way of getting this command. ! 987: .lp ! 988: ESC X insert-file <file><cr> inserts the contents of <file> into the ! 989: buffer at point, leaving point unchanged before the contents. You can ! 990: also use C-X C-I to get this command. ! 991: .lp ! 992: ESC X write-region <file><cr> writes the region (the text between ! 993: point and mark) to the specified file. It does not set the visited ! 994: filenames. The buffer is not changed. ! 995: .lp ! 996: ESC X append-region <file><cr> appends the region to <file>. The text ! 997: is added to the end of <file>. ! 998: .es ! 999: .es ! 1000: .bs "Using Multiple Buffers" ! 1001: When we speak of "the buffer", which contains the text you are ! 1002: editing, we have given the impression that there is only one. In ! 1003: fact, there may be many of them, each with its own body of text. At ! 1004: any time only one buffer can be \fIselected\fR and available for ! 1005: editing, but it isn't hard to switch to a different one. Each buffer ! 1006: individually remembers which file it is visiting, what modes are in ! 1007: effect, and whether there are any changes that need saving. ! 1008: .ks 1.3i ! 1009: .dk "C-X B" ! 1010: Select or create a buffer. ! 1011: .dk "C-X C-F" ! 1012: Visit a file in its own buffer. ! 1013: .dk "C-X C-B" ! 1014: List the existing buffers. ! 1015: .dk "C-X K" ! 1016: Kill a buffer. ! 1017: .ke ! 1018: .lp ! 1019: Each buffer in JOVE has a single name, which normally doesn't change. ! 1020: A buffer's name can be anylength. The name of the currently selected ! 1021: buffer, and the name of the file visited in it, are visible in the ! 1022: mode line when you are at top level. A newly started JOVE has only ! 1023: one buffer, named "Main". ! 1024: .bs "Creating and Selecting Buffers" ! 1025: To create a new buffer, you need only think of a name for it (say, ! 1026: FOO) and then do C-X B FOO<cr>, which is the command C-X B ! 1027: (select-buffer) followed by the name. This makes a new, empty buffer ! 1028: and selects it for editing. The new buffer is not visiting any file, ! 1029: so if you try to save it you will be asked for the filename to use. ! 1030: Each buffer as its own major mode; the new buffer's major mode is ! 1031: always Text mode. ! 1032: .lp ! 1033: To return to buffer FOO later after hacing switched to another, the ! 1034: same command C-X B FOO<cr> is used, since C-X B can atell whether a ! 1035: buffer named FOO exists already or not. C-X B Main<cr> reselects the ! 1036: buffer Main that JOVE started out with. Just C-X B<cr> reselects the ! 1037: previous buffer. Repeated C-X B<cr>'s alternate between the last two ! 1038: buffers selected. ! 1039: .lp ! 1040: You can also read a file into its own newly created buffer, all with ! 1041: one command: C-X C-F (find-file), followed by the filename. The name ! 1042: of the buffer is the last name in the element of the file's pathname. ! 1043: C-F stands for "Find", because if the specified file already resides ! 1044: in a buffer in your JOVE, that buffer is reselected. So you need not ! 1045: remember whether you have brought the file in already or not. A ! 1046: buffer created by C-X C-F can be reslected later with C-X B or C-X ! 1047: C-F, whichever you find more convenient. Nonexistent files can be ! 1048: created with C-X C-F just as they can with C-X C-V. ! 1049: .es ! 1050: .bs "Using Existing Buffers" ! 1051: To get a list of all the buffers that exist, do C-X C-B ! 1052: (list-buffers). Each buffer's type, name, and visited ! 1053: filenames are printed. A star before the buffer name indicates a ! 1054: buffer which contains changes that hav enot been saved. The number ! 1055: that appears at the beginning of a line in a C-X C-B listing is that ! 1056: buffer's \FIbuffer number\fR. You can select a buffer by typing its ! 1057: number in place of its name. If a buffer with that number doesn't ! 1058: already exist, a new buffer is created with that number as its name. ! 1059: .lp ! 1060: If several buffers have stars, you should save some of them with C-X ! 1061: C-M (write-modified-files). This finds all the buffers that need ! 1062: saving and then saves them. Saving the buffers this way is much ! 1063: easier and more efficient than selecting each one and typing C-X C-S. ! 1064: If a numeric argument is supplied, it asks whether to save each buffer, ! 1065: individually. ! 1066: .lp ! 1067: ESC X rename-buffer <new name><cr> changes the name of the currently ! 1068: selected buffer. ! 1069: .lp ! 1070: ESC X erase-buffer<buffer name><cr> erases the contents of the <buffer ! 1071: name> without deleting the buffer entirely. ! 1072: .es ! 1073: .bs "Killing Buffers" ! 1074: After you use a JOVE for a while, it may fill up with buffers which ! 1075: you no longer need. Eventually you can reach a point where trying to ! 1076: create any more results in an "out of memory" or "out of lines" ! 1077: error. When this happens you will want to kill some buffers with the ! 1078: C-X K (delete-buffer) command. You can kill the buffer FOO by doing ! 1079: C-X K FOO<cr>. If you type C-X K <cr> JOVe will kill the previously ! 1080: selected buffer. If you try to kill a buffer that needs saving JOVE ! 1081: will ask you to confirm it. ! 1082: .es ! 1083: .es ! 1084: .bs "Controlling the Display" ! 1085: Since only part of a large file fits on the screen, JOVE tries to show ! 1086: the part that is likely to be interesting. The display control ! 1087: commands allow you to see a different part of the file. ! 1088: .ks 1.5i ! 1089: .dk "C-L" ! 1090: Reposition point at a specified vertical position, OR clear and redraw ! 1091: the screen with point in the same place. ! 1092: .dk "C-V" ! 1093: Scroll forwards (a screen or a few lines). ! 1094: .dk "ESC V" ! 1095: Scroll backwards. ! 1096: .dk "C-Z" ! 1097: Scroll forward some lines. ! 1098: .dk "ESC Z" ! 1099: Scroll backwards some lines. ! 1100: .dk "ESC ," ! 1101: Beginning of screen. ! 1102: .dk "ESC ." ! 1103: End of screen. ! 1104: .ke ! 1105: .lp ! 1106: The terminal screen is rarely large enough to display all of your ! 1107: file. If the whole buffer doesn't fit on the screen, JOVE shows a ! 1108: contiguous portion of it, containing point. It continues to show ! 1109: approximately the same portion until point moves outside of it; then ! 1110: JOVE chooses a new portion centered the new point. This is JOVE's ! 1111: guess as to what you are most interested in seeing. But if the guess ! 1112: is wrong, you can use the display control commands to see a different ! 1113: portion. The finite area of screen through which you can see part of ! 1114: the buffer is called \fIthe window\fR, and the choice of where in the ! 1115: buffer to start displaying is also called \fIthe window\fR. ! 1116: .lp ! 1117: First we describe how JOVE chooses a new window position on its own. ! 1118: The goal is usually to place point half way down the screen. This is ! 1119: controlled by the variable scroll-step, whose value is the number of ! 1120: lines above the bottom or below the top of the window that the line ! 1121: containing point is placed. A value of 0 (the initial value) means ! 1122: center the screen. ! 1123: .lp ! 1124: The basic display control command is C-L (redraw-display). In its ! 1125: simplest form, with no argument, it tells JOVE to choose a new window ! 1126: position, centering point half way from the top as usual. ! 1127: .lp ! 1128: C-L with a positive argument chooses a new window so as to point point ! 1129: that many lines from the top. An argument of zero puts point on the ! 1130: very top line. Point does not move with respect to the text; rather, ! 1131: the text and point move rigidly on the screen. ! 1132: .lp ! 1133: If point stays on the same line, the screen is first cleared and then ! 1134: redrawn. Thus, two C-L's in a row are guarenteed to clear the screen. ! 1135: .lp ! 1136: The \fIscrolling\fR commands C-V, ESC V, C-Z, and ESC Z, let you move ! 1137: the whole display up or down a few lines. C-V (next-page) with an ! 1138: argument shows you that many more lines at the bottom of the screen, ! 1139: moving the text and point up together as C-L might. C-V with a ! 1140: negative argument shows you more lines at the top of the screen, as ! 1141: does ESC V with a positive argument. ! 1142: .lp ! 1143: To read the buffer a screenful at a time, use the C-V command with no ! 1144: argument. It takes the last line at the bottom of the screen and puts ! 1145: it at the top, followed by nearly a whole screenful of lines not ! 1146: visible before. Point is put at the top of the screen. Thus, each ! 1147: C-V shows the "next screenful", except for one line of overlap to ! 1148: provide continuity. To move backward, use ESC V without an argument, ! 1149: which moves a whole screenful backwards (again with overlap). ! 1150: .lp ! 1151: C-Z and ESC Z scroll one line forward and one line backward, ! 1152: respectively. These are convenient for moving in units of lines ! 1153: without having to type a numeric argument. ! 1154: .lp ! 1155: Use ESC , to move to the top of the window and ESC . to go to the ! 1156: end. Notice the similarity between ESC , and ESC <, and ESC . and ! 1157: ESC >. The only difference between them is how far they move. ! 1158: .es ! 1159: .bs "Multiple Windows" ! 1160: JOVE allows you to split the screen into two or more \fIwindows\fR and ! 1161: use them to display parts of different files, or different parts of ! 1162: the same file. ! 1163: .ks 1.5i ! 1164: .dk "C-X 2" ! 1165: Divide the current window into two smaller ones. ! 1166: .dk "C-X 1" ! 1167: Delete windows all but the current one. ! 1168: .dk "C-X N" ! 1169: Switch to the next window. ! 1170: .dk "C-X P" ! 1171: Switch to the previous window. ! 1172: .dk "C-X O" ! 1173: Same as C-X P. ! 1174: .dk "C-X ^" ! 1175: Make this window bigger. ! 1176: .dk "ESC C-V" ! 1177: Scroll the other window. ! 1178: .ke ! 1179: .lp ! 1180: When using \fImultiple window\fR mode, the text portion of the screen ! 1181: is divided into separate parts called \fIwindows\fR, which display ! 1182: different pieces of text. Each window can display different files, or ! 1183: parts of the same file. Only one of the windows is selected; that is ! 1184: the window which the cursor is in. Editing normally takes place in ! 1185: that window alone. To edit in another window, you would give a ! 1186: special command to move the cursor to the other window, and then edit ! 1187: there. ! 1188: .lp ! 1189: Each window displays a mode line for the buffer it's displaying. This ! 1190: is useful when we are editing different files and want to know which ! 1191: file the other window is displaying. In addition, all except the bottom ! 1192: window put dashes at the beginning and end of the mode line so that ! 1193: there is a clear seperator between windows. ! 1194: .lp ! 1195: The command C-X 2 (split-current-window) enters multiple window mode. ! 1196: A new mode line appears accross the middle of the screen, dividing the ! 1197: text display area into two halves. Both windows contain the same ! 1198: buffer and display the same position in it, namely where point was at ! 1199: the time you issued the command. The cursor moves to the second ! 1200: window. ! 1201: .lp ! 1202: To return to viewing only one window, use the command C-X 1 ! 1203: (delete-other-windows). The current window expands to fill the whole ! 1204: screen, and the other windows disappear until the next C-X 2. ! 1205: .lp ! 1206: While there is more than one window, you can use C-X N (next-window) ! 1207: to switch to the next window, and C-X P (previous-window) to switch to ! 1208: the previous one. If you are in the bottom window and you type C-X N, ! 1209: you will be placed in the top window, and the same kind of thing ! 1210: happens when you type C-X P in the top window, namely you will be ! 1211: placed in the bottom window. C-X O is the same as C-X P. It stands ! 1212: for other window because when there are only two windows, repeated use ! 1213: of this command with switch between the two windows. ! 1214: .lp ! 1215: Often you will be editing one window while using the other just for ! 1216: reference. Then, the command ESC C-V (page-next-window) is very ! 1217: useful. It scrolls the next window, as if you switched to the next ! 1218: window, typed C-V, and switched back, without your having to do all ! 1219: that. With a negative argument, ESC C-V will do an ESC V in the next ! 1220: window. ! 1221: .lp ! 1222: When a window splits, both halves are approximately the same size. ! 1223: You can redistribute the screen space between the windows with the C-X ! 1224: ^ (grow-window) command. It makes the currently selected window grow ! 1225: one line bigger, or as many lines as is specified with a numeric ! 1226: argument. Use ESC X shrink-window to make the current window smaller. ! 1227: .bs Multiple Windows and Mulitple Buffers ! 1228: Buffers can be selected independently in each window. The C-X B ! 1229: command selects a new buffer in whichever window the cursor is in. ! 1230: The other window's buffer does not change. ! 1231: .lp ! 1232: You can view the same buffer in more than one window. Although the ! 1233: same buffer appears in both windows, they have different values of ! 1234: point, so you can move around in one window while the other window ! 1235: continues to show the same text. Then, having found the place you ! 1236: wish to refer to, you can go back into the other window with C-X O to ! 1237: make your changes. ! 1238: .lp ! 1239: If you have the same buffer in both windows, you must beware of trying ! 1240: to visit a different file in one of the windows with C-X C-V, because ! 1241: if you bring a new file into this buffer, it will replaced the old ! 1242: file in \fIboth\fR windows. To view different files in differnent ! 1243: windows, you must switch buffers in one of the windows first (with C-X ! 1244: B or C-X C-F, perhaps). ! 1245: .lp ! 1246: A convenient "combination" command for viewing something in another ! 1247: window is C-X 4 (visit-in-other-window). With this command you can ! 1248: ask to see any specified buffer, file or tag in the other window. ! 1249: Follow the C-X 4 with either B and a buffer name, F and a file name, ! 1250: or T and a tag name. This switches to the other window and finds ! 1251: there what you specified. If you were previously in one-window mode, ! 1252: multiple-window mode is entered. C-X 4 B is similar to C-X 2 C-X B. ! 1253: C-X 4 F is similar to C-X 2 C-X C-F. C-X 4 T is similar to C-X 2 C-X ! 1254: T. The difference is one of efficiency, and also that C-X 4 works ! 1255: equally as well if you are already using two windows. ! 1256: .es ! 1257: .es ! 1258: .bs "Replacement Commands" ! 1259: Global search-and-replace operations are not needed as often in JOVE ! 1260: as they are in other editors, but they are available. In addition to ! 1261: the simple Replace operation which is like that found in most editors, ! 1262: there is a Query Replace operation which asks you, for each occurrence ! 1263: of the pattern, whether to replace it. ! 1264: .lp ! 1265: To replace every occurrence of FOO after point which BAR, you can do ! 1266: .eg "ESC R FOO<cr>BAR" ! 1267: Replacement occurs only after point, so if you want to cover the whole ! 1268: buffer you must go to the beginning first. Replacement continues to ! 1269: the end of the buffer. ! 1270: .bs "Query Replace" ! 1271: If you want to change only some of the occurrences of FOO, not all, ! 1272: then you cannot use and ordinary Replace. Instead, use ! 1273: .eg "ESC Q FOO<cr>BAR" ! 1274: This displays each occurrence of FOO and waits for you to say whether ! 1275: to replace it with a BAR. The things you can type when you are shown ! 1276: an occurrence of FOO are: ! 1277: .ks 1.3i ! 1278: .dk "Space" ! 1279: to replace the FOO. ! 1280: .dk "Rubout" ! 1281: to skip the next FOO without replacing this one. ! 1282: .dk "Return" ! 1283: to exit without doing any more replacements. ! 1284: .dk "Period" ! 1285: to replace this FOO and then exit. ! 1286: .dk "! or P" ! 1287: to replace all remaining FOO's without asking. ! 1288: .dk "C-R or R" ! 1289: to enter a recursive editing level, in case the FOO needs to be edited ! 1290: rather than just replaced with a BAR. When you are done, exit the ! 1291: recursive editing level with C-X C-C and the next FOO will be ! 1292: displayed. ! 1293: .dk "C-W" ! 1294: to delete the FOO, and then start editing the buffer. When you are ! 1295: finished editing whatever is to replace the FOO, exit the recursive ! 1296: editing level with C-X C-C and the next FOO will be displayed. ! 1297: .dk "U" ! 1298: move to the last replacement and undo it, and then enter a recursive ! 1299: editing level. When you have finished editing the FOO, exit the ! 1300: recursive editing level with C-X C-C and then next FOO will be ! 1301: displayed. ! 1302: .ke ! 1303: .es ! 1304: .es ! 1305: .bs "Processes Under JOVE" ! 1306: Another feature in JOVE is its ability to interact with UNIX in a ! 1307: useful way. You can run other UNIX commands from JOVE and catch their ! 1308: output in JOVE buffers. In this chapter we will discuss the different ! 1309: ways to run and interact with UNIX commands. ! 1310: .bs Non-interactive UNIX commands ! 1311: To run a UNIX command from JOVE just type "C-X !" followed by the name ! 1312: of the command terminated with Return. For example, to get a list of ! 1313: all the users on the system, you do: ! 1314: .eg "C-X ! who<cr>" ! 1315: Then JOVE picks a reasonable buffer in which the output from the ! 1316: command will be placed. E.g., "who" uses the buffer called "who", and ! 1317: "ps alx" uses "ps", and "fgrep -n foo *.c" uses "fgrep". If JOVE ! 1318: wants to use a buffer that already exists it first erases the old ! 1319: contents. If the buffer it selects holds a file, not output from a ! 1320: previous shell command, you must first delete that buffer with C-X K. ! 1321: .lp ! 1322: Once JOVE has picked a buffer it puts that buffer in a window so you ! 1323: can see the command's output as it is running. If there is only one ! 1324: window JOVE will automatically make another one. Otherwise, JOVE ! 1325: tries to pick the most convenient one window which isn't the current ! 1326: one. ! 1327: .lp ! 1328: It's not a good idea to type anything while the command is running. ! 1329: There are two reasons for this: ! 1330: .ks 1i ! 1331: .dk "(1)" ! 1332: JOVE won't see the characters (thus won't execute them) until the ! 1333: command finishes, so you may forget what you've typed. ! 1334: .dk "(2)" ! 1335: Although JOVE won't know what you've typed, it WILL know that you've ! 1336: typed something, and then it will try to be "smart" and not update the ! 1337: display until it's interpreted your what you've typed. But, of ! 1338: course, JOVE won't interpret what you type until the UNIX command ! 1339: completes, so you're left with the uneasy feeling you get when you ! 1340: don't know what the hell the computer is doing. ! 1341: .fb ! 1342: This is a bug and should be fixed, but probably won't be for a while. ! 1343: .fe ! 1344: .ke ! 1345: .lp ! 1346: If you want to interrupt the command for some reason (perhaps you ! 1347: mistyped it,or you changed your mind) you can type C-]. Typing this ! 1348: inside JOVE while a process is running is the same as type C-C when ! 1349: you are outside JOVE, namely the process stops in a hurry. ! 1350: .lp ! 1351: When the command finishes JOVE puts you back in the window you started ! 1352: in. Then it prints a message indicating whether or not the command ! 1353: completed successfully in its (the command's) opinion. That is, if ! 1354: the command had what it considers and error, JOVE will print an ! 1355: appropriate message. Interrupting a command with C-] is considered an ! 1356: error. ! 1357: .bs "Limitations of Non-Interactive Processes" ! 1358: The reason these are called non-interactive processes is that you ! 1359: can't type any input to them; you can't interact with them; they can't ! 1360: ask you questions because there is no way for you to answer. For ! 1361: example, you can't run a command interpreter (a shell) with C-X ! ! 1362: because there is no way to type it a command. Remember that JOVE is ! 1363: listening to your keyboard, not the process in the window, and JOVE ! 1364: doesn't see what you type until the process dies. ! 1365: .lp ! 1366: C-X ! is useful for running commands that do some output and then ! 1367: exit. For example, it's very useful to use with the C compiler to ! 1368: catch compilation error messages (see Compiling C Programs), or with ! 1369: the "grep" commands. ! 1370: .es ! 1371: .es ! 1372: .bs "Interactive Processes -- Run a Shell in a Window" ! 1373: Some versions of JOVE have the capability of running interative ! 1374: processes. This is more useful than non-interactive processes for ! 1375: certain types of jobs: ! 1376: .ks ! 1377: .dk "(1)" ! 1378: You can go off and do some editing while the command is running. This ! 1379: is useful for commands that do sporadic output and run for fairly long ! 1380: periods of time. ! 1381: .dk "(2)" ! 1382: Unlike non-interactive processes, you can type input to this type. In ! 1383: addition, you can edit what you type with the power of all the JOVE ! 1384: commands \fBbefore\fR you send the input to the process. This is a ! 1385: really important feature, and is especially useful for running a shell ! 1386: in a window. ! 1387: .dk "(3)" ! 1388: Because you can continue with normal editing while one of the ! 1389: processes is running, you can create a bunch of contexts and manage ! 1390: them (select them, delete them, or temporarily put them aside) with ! 1391: JOVE's window and buffer mechanisms. ! 1392: .ke ! 1393: .lp ! 1394: Although we've created an image of processes being attached to ! 1395: windows, in fact they are attached to buffers. Therefore, once an ! 1396: i-process is running you can select another buffer into that window, ! 1397: or if you wish you can delete the window altogether. If you reselect ! 1398: that buffer later it will be up to date. That is, even though the ! 1399: buffer wasn't visible it was still receiving output from the process. ! 1400: You don't have to worry about missing anything when the buffer isn't ! 1401: visible. ! 1402: .bs Advantages of Running Processes in JOVE Windows. ! 1403: There are several advantages to running a shell in a window. What you ! 1404: type isn't seen immediately by the process ; instead JOVE waits until ! 1405: you type an entire line before passing it on to the process to read. ! 1406: This means that before you type Return, all JOVE's editing ! 1407: capabilities are available for fixing typos on your input line. If ! 1408: you discover an error at the beginning of the line, rather than ! 1409: erasing it and starting over, you can simply move to the error, ! 1410: correct it, move back and continue typing. ! 1411: .lp ! 1412: Another feature is that you have the entire history of your session is ! 1413: a JOVE buffer. You don't have to worry about output from a command ! 1414: moving past the top of the screen. if you missed some output you can ! 1415: move back through it with ESC V and other command. In addition, you ! 1416: can save yourself retyping a command (or a similar one) by sending ! 1417: edited versions of previous ones. ! 1418: .es ! 1419: .bs "Differences between Normal and I-process Buffers" ! 1420: JOVE behaves differently in several ways when you are in an I-process ! 1421: buffer. The most obvious one is that Return does different things ! 1422: depending on both your position in the buffer and on the state of the ! 1423: process. In the normal case, when point is at the end of the buffer, ! 1424: Return does what you'd expect: it inserts a line-separator and then ! 1425: sends the line to the process. If you are somewhere else in the ! 1426: buffer, possibly positioned at a previous command that you want to ! 1427: edit, Return will place a copy of that line (with the prompt discarded ! 1428: if there is one) at the end of the buffer and move you there. Then ! 1429: you can edit the line and type Return as in the normal case. If the ! 1430: process has died for some reason, Return does nothing. It doesn't ! 1431: even insert itself. If that happens unexpectedly, you should type ESC ! 1432: X list-processes<cr> to get a list of each process and its state. If ! 1433: your process died abnormally, list-processes may help you figure out ! 1434: why. ! 1435: .es ! 1436: .bs "How to Run a Shell in a Window" ! 1437: Type ESC X i-shell<cr> to start up a shell. As with C-X !, JOVE will ! 1438: create a buffer, called \fBshell.1\fR, and select a window for this ! 1439: new buffer. But unlike C-X ! you will be left in the new window. Now, ! 1440: the shell process is said to be attached to shell.1, and it is ! 1441: considered an I-process buffer. ! 1442: .lp ! 1443: Needs work. ! 1444: .es ! 1445: .es ! 1446: .es ! 1447: ! 1448: .bs "Editing C Programs" ! 1449: .bs "Compiling Your Program" ! 1450: .es ! 1451: .bs "Indentation Commands" ! 1452: .es ! 1453: .bs "Parenthesis and Brace Matching" ! 1454: .es ! 1455: .bs "C Tags" ! 1456: .es ! 1457: .es ! 1458: .bs "Error Message Parsing" ! 1459: .es ! 1460: .bs "Simple Customization" ! 1461: .bs "Minor Modes" ! 1462: .es ! 1463: .bs "Variables" ! 1464: .es ! 1465: .bs "Key Re-binding" ! 1466: .es ! 1467: .bs "Keyboard Macros" ! 1468: .es ! 1469: .bs "Initialization Files" ! 1470: .es ! 1471: .es ! 1472: .TC ! 1473: .hy 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.