|
|
1.1 ! root 1: This is Info file ../info/emacs, produced by Makeinfo-1.49 from the ! 2: input file emacs.texi. ! 3: ! 4: This file documents the GNU Emacs editor. ! 5: ! 6: Copyright (C) 1985, 1986, 1988, 1992 Richard M. Stallman. ! 7: ! 8: Permission is granted to make and distribute verbatim copies of this ! 9: manual provided the copyright notice and this permission notice are ! 10: preserved on all copies. ! 11: ! 12: Permission is granted to copy and distribute modified versions of ! 13: this manual under the conditions for verbatim copying, provided also ! 14: that the sections entitled "The GNU Manifesto", "Distribution" and "GNU ! 15: General Public License" are included exactly as in the original, and ! 16: provided that the entire resulting derived work is distributed under the ! 17: terms of a permission notice identical to this one. ! 18: ! 19: Permission is granted to copy and distribute translations of this ! 20: manual into another language, under the above conditions for modified ! 21: versions, except that the sections entitled "The GNU Manifesto", ! 22: "Distribution" and "GNU General Public License" may be included in a ! 23: translation approved by the author instead of in the original English. ! 24: ! 25: ! 26: File: emacs, Node: Lisp Eval, Next: Lisp Debug, Prev: Lisp Libraries, Up: Compiling/Testing ! 27: ! 28: Evaluating Emacs-Lisp Expressions ! 29: ================================= ! 30: ! 31: Lisp programs intended to be run in Emacs should be edited in ! 32: Emacs-Lisp mode; this will happen automatically for file names ending ! 33: in `.el'. By contrast, Lisp mode itself is used for editing Lisp ! 34: programs intended for other Lisp systems. Emacs-Lisp mode can be ! 35: selected with the command `M-x emacs-lisp-mode'. ! 36: ! 37: For testing of Lisp programs to run in Emacs, it is useful to be ! 38: able to evaluate part of the program as it is found in the Emacs ! 39: buffer. For example, after changing the text of a Lisp function ! 40: definition, evaluating the definition installs the change for future ! 41: calls to the function. Evaluation of Lisp expressions is also useful in ! 42: any kind of editing task for invoking noninteractive functions ! 43: (functions that are not commands). ! 44: ! 45: `M-ESC' ! 46: Read a Lisp expression in the minibuffer, evaluate it, and print ! 47: the value in the minibuffer (`eval-expression'). ! 48: ! 49: `C-x C-e' ! 50: Evaluate the Lisp expression before point, and print the value in ! 51: the minibuffer (`eval-last-sexp'). ! 52: ! 53: `C-M-x' ! 54: Evaluate the defun containing or after point, and print the value ! 55: in the minibuffer (`eval-defun'). ! 56: ! 57: `M-x eval-region' ! 58: Evaluate all the Lisp expressions in the region. ! 59: ! 60: `M-x eval-current-buffer' ! 61: Evaluate all the Lisp expressions in the buffer. ! 62: ! 63: `M-ESC' (`eval-expression') is the most basic command for evaluating ! 64: a Lisp expression interactively. It reads the expression using the ! 65: minibuffer, so you can execute any expression on a buffer regardless of ! 66: what the buffer contains. When the expression is evaluated, the current ! 67: buffer is once again the buffer that was current when `M-ESC' was typed. ! 68: ! 69: `M-ESC' can easily confuse users who do not understand it, ! 70: especially on keyboards with autorepeat where it can result from holding ! 71: down the ESC key for too long. Therefore, `eval-expression' is ! 72: normally a disabled command. Attempting to use this command asks for ! 73: confirmation and gives you the option of enabling it; once you enable ! 74: the command, confirmation will no longer be required for it. *Note ! 75: Disabling::. ! 76: ! 77: In Emacs-Lisp mode, the key `C-M-x' is bound to the function ! 78: `eval-defun', which parses the defun containing or following point as a ! 79: Lisp expression and evaluates it. The value is printed in the echo ! 80: area. This command is convenient for installing in the Lisp ! 81: environment changes that you have just made in the text of a function ! 82: definition. ! 83: ! 84: The command `C-x C-e' (`eval-last-sexp') performs a similar job but ! 85: is available in all major modes, not just Emacs-Lisp mode. It finds ! 86: the sexp before point, reads it as a Lisp expression, evaluates it, and ! 87: prints the value in the echo area. It is sometimes useful to type in an ! 88: expression and then, with point still after it, type `C-x C-e'. ! 89: ! 90: If `C-M-x' or `C-x C-e' is given a numeric argument, it prints the ! 91: value by insertion into the current buffer at point, rather than in the ! 92: echo area. The argument value does not matter. ! 93: ! 94: The most general command for evaluating Lisp expressions from a ! 95: buffer is `eval-region'. `M-x eval-region' parses the text of the ! 96: region as one or more Lisp expressions, evaluating them one by one. ! 97: `M-x eval-current-buffer' is similar but evaluates the entire buffer. ! 98: This is a reasonable way to install the contents of a file of Lisp code ! 99: that you are just ready to test. After finding and fixing a bug, use ! 100: `C-M-x' on each function that you change, to keep the Lisp world in ! 101: step with the source file. ! 102: ! 103: ! 104: File: emacs, Node: Lisp Debug, Next: Lisp Interaction, Prev: Lisp Eval, Up: Compiling/Testing ! 105: ! 106: The Emacs-Lisp Debugger ! 107: ======================= ! 108: ! 109: GNU Emacs contains a debugger for Lisp programs executing inside it. ! 110: This debugger is normally not used; many commands frequently get Lisp ! 111: errors when invoked in inappropriate contexts (such as `C-f' at the end ! 112: of the buffer) and it would be very unpleasant for that to enter a ! 113: special debugging mode. When you want to make Lisp errors invoke the ! 114: debugger, you must set the variable `debug-on-error' to non-`nil'. ! 115: Quitting with `C-g' is not considered an error, and `debug-on-error' ! 116: has no effect on the handling of `C-g'. However, if you set ! 117: `debug-on-quit' non-`nil', `C-g' will invoke the debugger. This can be ! 118: useful for debugging an infinite loop; type `C-g' once the loop has had ! 119: time to reach its steady state. `debug-on-quit' has no effect on ! 120: errors. ! 121: ! 122: You can also cause the debugger to be entered when a specified ! 123: function is called, or at a particular place in Lisp code. Use `M-x ! 124: debug-on-entry' with argument FUN-NAME to cause function FUN-NAME to ! 125: enter the debugger as soon as it is called. Use `M-x ! 126: cancel-debug-on-entry' to make the function stop entering the debugger ! 127: when called. (Redefining the function also does this.) To enter the ! 128: debugger from some other place in Lisp code, you must insert the ! 129: expression `(debug)' there and install the changed code with `C-M-x'. ! 130: *Note Lisp Eval::. ! 131: ! 132: When the debugger is entered, it displays the previously selected ! 133: buffer in one window and a buffer named `*Backtrace*' in another ! 134: window. The backtrace buffer contains one line for each level of Lisp ! 135: function execution currently going on. At the beginning of this buffer ! 136: is a message describing the reason that the debugger was invoked (such ! 137: as, what error message if it was invoked due to an error). ! 138: ! 139: The backtrace buffer is read-only, and is in a special major mode, ! 140: Backtrace mode, in which letters are defined as debugger commands. The ! 141: usual Emacs editing commands are available; you can switch windows to ! 142: examine the buffer that was being edited at the time of the error, and ! 143: you can also switch buffers, visit files, and do any other sort of ! 144: editing. However, the debugger is a recursive editing level (*note ! 145: Recursive Edit::.) and it is wise to go back to the backtrace buffer ! 146: and exit the debugger officially when you don't want to use it any ! 147: more. Exiting the debugger kills the backtrace buffer. ! 148: ! 149: The contents of the backtrace buffer show you the functions that are ! 150: executing and the arguments that were given to them. It has the ! 151: additional purpose of allowing you to specify a stack frame by moving ! 152: point to the line describing that frame. The frame whose line point is ! 153: on is considered the "current frame". Some of the debugger commands ! 154: operate on the current frame. Debugger commands are mainly used for ! 155: stepping through code an expression at a time. Here is a list of them. ! 156: ! 157: `c' ! 158: Exit the debugger and continue execution. In most cases, ! 159: execution of the program continues as if the debugger had never ! 160: been entered (aside from the effect of any variables or data ! 161: structures you may have changed while inside the debugger). This ! 162: includes entry to the debugger due to function entry or exit, ! 163: explicit invocation, quitting or certain errors. Most errors ! 164: cannot be continued; trying to continue one of them causes the ! 165: same error to occur again. ! 166: ! 167: `d' ! 168: Continue execution, but enter the debugger the next time a Lisp ! 169: function is called. This allows you to step through the ! 170: subexpressions of an expression, seeing what values the ! 171: subexpressions compute and what else they do. ! 172: ! 173: The stack frame made for the function call which enters the ! 174: debugger in this way will be flagged automatically for the ! 175: debugger to be called when the frame is exited. You can use the ! 176: `u' command to cancel this flag. ! 177: ! 178: `b' ! 179: Set up to enter the debugger when the current frame is exited. ! 180: Frames that will invoke the debugger on exit are flagged with ! 181: stars. ! 182: ! 183: `u' ! 184: Don't enter the debugger when the current frame is exited. This ! 185: cancels a `b' command on that frame. ! 186: ! 187: `e' ! 188: Read a Lisp expression in the minibuffer, evaluate it, and print ! 189: the value in the echo area. This is the same as the command ! 190: `M-ESC', except that `e' is not normally disabled like `M-ESC'. ! 191: ! 192: `q' ! 193: Terminate the program being debugged; return to top-level Emacs ! 194: command execution. ! 195: ! 196: If the debugger was entered due to a `C-g' but you really want to ! 197: quit, not to debug, use the `q' command. ! 198: ! 199: `r' ! 200: Return a value from the debugger. The value is computed by ! 201: reading an expression with the minibuffer and evaluating it. ! 202: ! 203: The value returned by the debugger makes a difference when the ! 204: debugger was invoked due to exit from a Lisp call frame (as ! 205: requested with `b'); then the value specified in the `r' command ! 206: is used as the value of that frame. ! 207: ! 208: The debugger's return value also matters with many errors. For ! 209: example, `wrong-type-argument' errors will use the debugger's ! 210: return value instead of the invalid argument; `no-catch' errors ! 211: will use the debugger value as a throw tag instead of the tag that ! 212: was not found. If an error was signaled by calling the Lisp ! 213: function `signal', the debugger's return value is returned as the ! 214: value of `signal'. ! 215: ! 216: ! 217: File: emacs, Node: Lisp Interaction, Next: External Lisp, Prev: Lisp Debug, Up: Compiling/Testing ! 218: ! 219: Lisp Interaction Buffers ! 220: ======================== ! 221: ! 222: The buffer `*scratch*' which is selected when Emacs starts up is ! 223: provided for evaluating Lisp expressions interactively inside Emacs. ! 224: Both the expressions you evaluate and their output goes in the buffer. ! 225: ! 226: The `*scratch*' buffer's major mode is Lisp Interaction mode, which ! 227: is the same as Emacs-Lisp mode except for one command, LFD. In ! 228: Emacs-Lisp mode, LFD is an indentation command, as usual. In Lisp ! 229: Interaction mode, LFD is bound to `eval-print-last-sexp'. This ! 230: function reads the Lisp expression before point, evaluates it, and ! 231: inserts the value in printed representation before point. ! 232: ! 233: Thus, the way to use the `*scratch*' buffer is to insert Lisp ! 234: expressions at the end, ending each one with LFD so that it will be ! 235: evaluated. The result is a complete typescript of the expressions you ! 236: have evaluated and their values. ! 237: ! 238: The rationale for this feature is that Emacs must have a buffer when ! 239: it starts up, but that buffer is not useful for editing files since a ! 240: new buffer is made for every file that you visit. The Lisp interpreter ! 241: typescript is the most useful thing I can think of for the initial ! 242: buffer to do. `M-x lisp-interaction-mode' will put any buffer in Lisp ! 243: Interaction mode. ! 244: ! 245: ! 246: File: emacs, Node: External Lisp, Prev: Lisp Interaction, Up: Compiling/Testing ! 247: ! 248: Running an External Lisp ! 249: ======================== ! 250: ! 251: Emacs has facilities for running programs in other Lisp systems. ! 252: You can run a Lisp process as an inferior of Emacs, and pass ! 253: expressions to it to be evaluated. You can also pass changed function ! 254: definitions directly from the Emacs buffers in which you edit the Lisp ! 255: programs to the inferior Lisp process. ! 256: ! 257: To run an inferior Lisp process, type `M-x run-lisp'. This runs the ! 258: program named `lisp', the same program you would run by typing `lisp' ! 259: as a shell command, with both input and output going through an Emacs ! 260: buffer named `*lisp*'. That is to say, any "terminal output" from Lisp ! 261: will go into the buffer, advancing point, and any "terminal input" for ! 262: Lisp comes from text in the buffer. To give input to Lisp, go to the ! 263: end of the buffer and type the input, terminated by RET. The `*lisp*' ! 264: buffer is in Inferior Lisp mode, a mode which has all the special ! 265: characteristics of Lisp mode and Shell mode (*note Shell Mode::.). ! 266: ! 267: For the source files of programs to run in external Lisps, use Lisp ! 268: mode. This mode can be selected with `M-x lisp-mode', and is used ! 269: automatically for files whose names end in `.l' or `.lisp', as most Lisp ! 270: systems usually expect. ! 271: ! 272: When you edit a function in a Lisp program you are running, the ! 273: easiest way to send the changed definition to the inferior Lisp process ! 274: is the key `C-M-x'. In Lisp mode, this runs the function ! 275: `lisp-send-defun', which finds the defun around or following point and ! 276: sends it as input to the Lisp process. (Emacs can send input to any ! 277: inferior process regardless of what buffer is current.) ! 278: ! 279: Contrast the meanings of `C-M-x' in Lisp mode (for editing programs ! 280: to be run in another Lisp system) and Emacs-Lisp mode (for editing Lisp ! 281: programs to be run in Emacs): in both modes it has the effect of ! 282: installing the function definition that point is in, but the way of ! 283: doing so is different according to where the relevant Lisp environment ! 284: is found. *Note Lisp Modes::. ! 285: ! 286: ! 287: File: emacs, Node: Abbrevs, Next: Picture, Prev: Compiling/Testing, Up: Top ! 288: ! 289: Abbrevs ! 290: ******* ! 291: ! 292: An "abbrev" is a word which "expands", if you insert it, into some ! 293: different text. Abbrevs are defined by the user to expand in specific ! 294: ways. For example, you might define `foo' as an abbrev expanding to ! 295: `find outer otter'. With this abbrev defined, you would be able to get ! 296: `find outer otter ' into the buffer by typing `f o o SPC'. ! 297: ! 298: Abbrevs expand only when Abbrev mode (a minor mode) is enabled. ! 299: Disabling Abbrev mode does not cause abbrev definitions to be forgotten, ! 300: but they do not expand until Abbrev mode is enabled again. The command ! 301: `M-x abbrev-mode' toggles Abbrev mode; with a numeric argument, it ! 302: turns Abbrev mode on if the argument is positive, off otherwise. *Note ! 303: Minor Modes::. `abbrev-mode' is also a variable; Abbrev mode is on ! 304: when the variable is non-`nil'. The variable `abbrev-mode' ! 305: automatically becomes local to the current buffer when it is set. ! 306: ! 307: Abbrev definitions can be "mode-specific"--active only in one major ! 308: mode. Abbrevs can also have "global" definitions that are active in ! 309: all major modes. The same abbrev can have a global definition and ! 310: various mode-specific definitions for different major modes. A mode ! 311: specific definition for the current major mode overrides a global ! 312: definition. ! 313: ! 314: Abbrevs can be defined interactively during the editing session. ! 315: Lists of abbrev definitions can also be saved in files and reloaded in ! 316: later sessions. Some users keep extensive lists of abbrevs that they ! 317: load in every session. ! 318: ! 319: A second kind of abbreviation facility is called the "dynamic ! 320: expansion". Dynamic abbrev expansion happens only when you give an ! 321: explicit command and the result of the expansion depends only on the ! 322: current contents of the buffer. *Note Dynamic Abbrevs::. ! 323: ! 324: * Menu: ! 325: ! 326: * Defining Abbrevs:: Defining an abbrev, so it will expand when typed. ! 327: * Expanding Abbrevs:: Controlling expansion: prefixes, canceling expansion. ! 328: * Editing Abbrevs:: Viewing or editing the entire list of defined abbrevs. ! 329: * Saving Abbrevs:: Saving the entire list of abbrevs for another session. ! 330: * Dynamic Abbrevs:: Abbreviations for words already in the buffer. ! 331: ! 332: ! 333: File: emacs, Node: Defining Abbrevs, Next: Expanding Abbrevs, Prev: Abbrevs, Up: Abbrevs ! 334: ! 335: Defining Abbrevs ! 336: ================ ! 337: ! 338: `C-x +' ! 339: Define an abbrev to expand into some text before point ! 340: (`add-global-abbrev'). ! 341: ! 342: `C-x C-a' ! 343: Similar, but define an abbrev available only in the current major ! 344: mode (`add-mode-abbrev'). ! 345: ! 346: `C-x -' ! 347: Define a word in the buffer as an abbrev ! 348: (`inverse-add-global-abbrev'). ! 349: ! 350: `C-x C-h' ! 351: Define a word in the buffer as a mode-specific abbrev ! 352: (`inverse-add-mode-abbrev'). ! 353: ! 354: `M-x kill-all-abbrevs' ! 355: After this command, there are no abbrev definitions in effect. ! 356: ! 357: The usual way to define an abbrev is to enter the text you want the ! 358: abbrev to expand to, position point after it, and type `C-x +' ! 359: (`add-global-abbrev'). This reads the abbrev itself using the ! 360: minibuffer, and then defines it as an abbrev for one or more words ! 361: before point. Use a numeric argument to say how many words before ! 362: point should be taken as the expansion. For example, to define the ! 363: abbrev `foo' as mentioned above, insert the text `find outer otter' and ! 364: then type `C-u 3 C-x + f o o RET'. ! 365: ! 366: An argument of zero to `C-x +' means to use the contents of the ! 367: region as the expansion of the abbrev being defined. ! 368: ! 369: The command `C-x C-a' (`add-mode-abbrev') is similar, but defines a ! 370: mode-specific abbrev. Mode specific abbrevs are active only in a ! 371: particular major mode. `C-x C-a' defines an abbrev for the major mode ! 372: in effect at the time `C-x C-a' is typed. The arguments work the same ! 373: as for `C-x +'. ! 374: ! 375: If the text of the abbrev you want is already in the buffer instead ! 376: of the expansion, use command `C-x -' (`inverse-add-global-abbrev') ! 377: instead of `C-x +', or use `C-x C-h' (`inverse-add-mode-abbrev') ! 378: instead of `C-x C-a'. These commands are called "inverse" because they ! 379: invert the meaning of the argument found in the buffer and the argument ! 380: read using the minibuffer. ! 381: ! 382: To change the definition of an abbrev, just add the new definition. ! 383: You will be asked to confirm if the abbrev has a prior definition. To ! 384: remove an abbrev definition, give a negative argument to `C-x +' or `C-x ! 385: C-a'. You must choose the command to specify whether to kill a global ! 386: definition or a mode-specific definition for the current mode, since ! 387: those two definitions are independent for one abbrev. ! 388: ! 389: `M-x kill-all-abbrevs' removes all the abbrev definitions there are. ! 390: ! 391: ! 392: File: emacs, Node: Expanding Abbrevs, Next: Editing Abbrevs, Prev: Defining Abbrevs, Up: Abbrevs ! 393: ! 394: Controlling Abbrev Expansion ! 395: ============================ ! 396: ! 397: An abbrev expands whenever it is present in the buffer just before ! 398: point and a self-inserting punctuation character (SPC, comma, etc.) is ! 399: typed. Most often the way an abbrev is used is to insert the abbrev ! 400: followed by punctuation. ! 401: ! 402: Abbrev expansion preserves case; thus, `foo' expands into `find ! 403: outer otter'; `Foo' into `Find outer otter', and `FOO' into `FIND OUTER ! 404: OTTER' or `Find Outer Otter' according to the variable ! 405: `abbrev-all-caps' (a non-`nil' value chooses the first of the two ! 406: expansions). ! 407: ! 408: These two commands are used to control abbrev expansion: ! 409: ! 410: `M-'' ! 411: Separate a prefix from a following abbrev to be expanded ! 412: (`abbrev-prefix-mark'). ! 413: ! 414: `C-x '' ! 415: Expand the abbrev before point (`expand-abbrev'). This is ! 416: effective even when Abbrev mode is not enabled. ! 417: ! 418: `M-x unexpand-abbrev' ! 419: Undo last abbrev expansion. ! 420: ! 421: `M-x expand-region-abbrevs' ! 422: Expand some or all abbrevs found in the region. ! 423: ! 424: You may wish to expand an abbrev with a prefix attached; for ! 425: example, if `cnst' expands into `construction', you might want to use ! 426: it to enter `reconstruction'. It does not work to type `recnst', ! 427: because that is not necessarily a defined abbrev. What does work is to ! 428: use the command `M-'' (`abbrev-prefix-mark') in between the prefix `re' ! 429: and the abbrev `cnst'. First, insert `re'. Then type `M-''; this ! 430: inserts a minus sign in the buffer to indicate that it has done its ! 431: work. Then insert the abbrev `cnst'; the buffer now contains ! 432: `re-cnst'. Now insert a punctuation character to expand the abbrev ! 433: `cnst' into `construction'. The minus sign is deleted at this point, ! 434: because `M-'' left word for this to be done. The resulting text is the ! 435: desired `reconstruction'. ! 436: ! 437: If you actually want the text of the abbrev in the buffer, rather ! 438: than its expansion, you can accomplish this by inserting the following ! 439: punctuation with `C-q'. Thus, `foo C-q -' leaves `foo-' in the buffer. ! 440: ! 441: If you expand an abbrev by mistake, you can undo the expansion ! 442: (replace the expansion by the original abbrev text) with `M-x ! 443: unexpand-abbrev'. `C-_' (`undo') can also be used to undo the ! 444: expansion; but first it will undo the insertion of the following ! 445: punctuation character! ! 446: ! 447: `M-x expand-region-abbrevs' searches through the region for defined ! 448: abbrevs, and for each one found offers to replace it with its expansion. ! 449: This command is useful if you have typed in text using abbrevs but ! 450: forgot to turn on Abbrev mode first. It may also be useful together ! 451: with a special set of abbrev definitions for making several global ! 452: replacements at once. This command is effective even if Abbrev mode is ! 453: not enabled. ! 454: ! 455: ! 456: File: emacs, Node: Editing Abbrevs, Next: Saving Abbrevs, Prev: Expanding Abbrevs, Up: Abbrevs ! 457: ! 458: Examining and Editing Abbrevs ! 459: ============================= ! 460: ! 461: `M-x list-abbrevs' ! 462: Print a list of all abbrev definitions. ! 463: ! 464: `M-x edit-abbrevs' ! 465: Edit a list of abbrevs; you can add, alter or remove definitions. ! 466: ! 467: The output from `M-x list-abbrevs' looks like this: ! 468: ! 469: (lisp-mode-abbrev-table) ! 470: "dk" 0 "define-key" ! 471: (global-abbrev-table) ! 472: "dfn" 0 "definition" ! 473: ! 474: (Some blank lines of no semantic significance, and some other abbrev ! 475: tables, have been omitted.) ! 476: ! 477: A line containing a name in parentheses is the header for abbrevs in ! 478: a particular abbrev table; `global-abbrev-table' contains all the global ! 479: abbrevs, and the other abbrev tables that are named after major modes ! 480: contain the mode-specific abbrevs. ! 481: ! 482: Within each abbrev table, each nonblank line defines one abbrev. The ! 483: word at the beginning is the abbrev. The number that appears is the ! 484: number of times the abbrev has been expanded. Emacs keeps track of ! 485: this to help you see which abbrevs you actually use, in case you decide ! 486: to eliminate those that you don't use often. The string at the end of ! 487: the line is the expansion. ! 488: ! 489: `M-x edit-abbrevs' allows you to add, change or kill abbrev ! 490: definitions by editing a list of them in an Emacs buffer. The list has ! 491: the same format described above. The buffer of abbrevs is called ! 492: `*Abbrevs*', and is in Edit-Abbrevs mode. This mode redefines the key ! 493: `C-c C-c' to install the abbrev definitions as specified in the buffer. ! 494: The command that does this is `edit-abbrevs-redefine'. Any abbrevs ! 495: not described in the buffer are eliminated when this is done. ! 496: ! 497: `edit-abbrevs' is actually the same as `list-abbrevs' except that it ! 498: selects the buffer `*Abbrevs*' whereas `list-abbrevs' merely displays ! 499: it in another window. ! 500: ! 501: ! 502: File: emacs, Node: Saving Abbrevs, Next: Dynamic Abbrevs, Prev: Editing Abbrevs, Up: Abbrevs ! 503: ! 504: Saving Abbrevs ! 505: ============== ! 506: ! 507: These commands allow you to keep abbrev definitions between editing ! 508: sessions. ! 509: ! 510: `M-x write-abbrev-file' ! 511: Write a file describing all defined abbrevs. ! 512: ! 513: `M-x read-abbrev-file' ! 514: Read such a file and define abbrevs as specified there. ! 515: ! 516: `M-x quietly-read-abbrev-file' ! 517: Similar but do not display a message about what is going on. ! 518: ! 519: `M-x define-abbrevs' ! 520: Define abbrevs from buffer. ! 521: ! 522: `M-x insert-abbrevs' ! 523: Insert all abbrevs and their expansions into the buffer. ! 524: ! 525: `M-x write-abbrev-file' reads a file name using the minibuffer and ! 526: writes a description of all current abbrev definitions into that file. ! 527: The text stored in the file looks like the output of `M-x list-abbrevs'. ! 528: This is used to save abbrev definitions for use in a later session. ! 529: ! 530: `M-x read-abbrev-file' reads a file name using the minibuffer and ! 531: reads the file, defining abbrevs according to the contents of the file. ! 532: `M-x quietly-read-abbrev-file' is the same except that it does not ! 533: display a message in the echo area saying that it is doing its work; it ! 534: is actually useful primarily in the `.emacs' file. If an empty ! 535: argument is given to either of these functions, the file name used is ! 536: the value of the variable `abbrev-file-name', which is by default ! 537: `"~/.abbrev_defs"'. ! 538: ! 539: Emacs will offer to save abbrevs automatically if you have changed ! 540: any of them, whenever it offers to save all files (for `C-x s' or `C-x ! 541: C-c'). This feature can be inhibited by setting the variable ! 542: `save-abbrevs' to `nil'. ! 543: ! 544: The commands `M-x insert-abbrevs' and `M-x define-abbrevs' are ! 545: similar to the previous commands but work on text in an Emacs buffer. ! 546: `M-x insert-abbrevs' inserts text into the current buffer before point, ! 547: describing all current abbrev definitions; `M-x define-abbrevs' parses ! 548: the entire current buffer and defines abbrevs accordingly. ! 549: ! 550: ! 551: File: emacs, Node: Dynamic Abbrevs, Prev: Saving Abbrevs, Up: Abbrevs ! 552: ! 553: Dynamic Abbrev Expansion ! 554: ======================== ! 555: ! 556: The abbrev facility described above operates automatically as you ! 557: insert text, but all abbrevs must be defined explicitly. By contrast, ! 558: "dynamic abbrevs" allow the meanings of abbrevs to be determined ! 559: automatically from the contents of the buffer, but dynamic abbrev ! 560: expansion happens only when you request it explicitly. ! 561: ! 562: `M-/' ! 563: Expand the word in the buffer before point as a "dynamic abbrev", ! 564: by searching in the buffer for words starting with that ! 565: abbreviation (`dabbrev-expand'). ! 566: ! 567: For example, if the buffer contains `does this follow ' and you type ! 568: `f o M-/', the effect is to insert `follow' because that is the last ! 569: word in the buffer that starts with `fo'. A numeric argument to `M-/' ! 570: says to take the second, third, etc. distinct expansion found looking ! 571: backward from point. Repeating `M-/' searches for an alternative ! 572: expansion by looking farther back. After the part of the buffer ! 573: preceding point has been considered, the part of the buffer after point ! 574: is searched. ! 575: ! 576: Dynamic abbrev expansion is completely independent of Abbrev mode; ! 577: the expansion of a word with `M-/' is completely independent of whether ! 578: it has a definition as an ordinary abbrev. ! 579: ! 580: ! 581: File: emacs, Node: Picture, Next: Sending Mail, Prev: Abbrevs, Up: Top ! 582: ! 583: Editing Pictures ! 584: **************** ! 585: ! 586: If you want to create a picture made out of text characters (for ! 587: example, a picture of the division of a register into fields, as a ! 588: comment in a program), use the command `edit-picture' to enter Picture ! 589: mode. ! 590: ! 591: In Picture mode, editing is based on the "quarter-plane" model of ! 592: text, according to which the text characters lie studded on an area that ! 593: stretches infinitely far to the right and downward. The concept of the ! 594: end of a line does not exist in this model; the most you can say is ! 595: where the last nonblank character on the line is found. ! 596: ! 597: Of course, Emacs really always considers text as a sequence of ! 598: characters, and lines really do have ends. But in Picture mode most ! 599: frequently-used keys are rebound to commands that simulate the ! 600: quarter-plane model of text. They do this by inserting spaces or by ! 601: converting tabs to spaces. ! 602: ! 603: Most of the basic editing commands of Emacs are redefined by Picture ! 604: mode to do essentially the same thing but in a quarter-plane way. In ! 605: addition, Picture mode defines various keys starting with the `C-c' ! 606: prefix to run special picture editing commands. ! 607: ! 608: One of these keys, `C-c C-c', is pretty important. Often a picture ! 609: is part of a larger file that is usually edited in some other major ! 610: mode. `M-x edit-picture' records the name of the previous major mode, ! 611: and then you can use the `C-c C-c' command (`picture-mode-exit') to ! 612: restore that mode. `C-c C-c' also deletes spaces from the ends of ! 613: lines, unless given a numeric argument. ! 614: ! 615: The commands used in Picture mode all work in other modes (provided ! 616: the `picture' library is loaded), but are not bound to keys except in ! 617: Picture mode. Note that the descriptions below talk of moving "one ! 618: column" and so on, but all the picture mode commands handle numeric ! 619: arguments as their normal equivalents do. ! 620: ! 621: Turning on Picture mode calls the value of the variable ! 622: `picture-mode-hook' as a function, with no arguments, if that value ! 623: exists and is non-`nil'. ! 624: ! 625: * Menu: ! 626: ! 627: * Basic Picture:: Basic concepts and simple commands of Picture Mode. ! 628: * Insert in Picture:: Controlling direction of cursor motion ! 629: after "self-inserting" characters. ! 630: * Tabs in Picture:: Various features for tab stops and indentation. ! 631: * Rectangles in Picture:: Clearing and superimposing rectangles. ! 632: ! 633: ! 634: File: emacs, Node: Basic Picture, Next: Insert in Picture, Prev: Picture, Up: Picture ! 635: ! 636: Basic Editing in Picture Mode ! 637: ============================= ! 638: ! 639: Most keys do the same thing in Picture mode that they usually do, ! 640: but do it in a quarter-plane style. For example, `C-f' is rebound to ! 641: run `picture-forward-column', which is defined to move point one column ! 642: to the right, by inserting a space if necessary, so that the actual end ! 643: of the line makes no difference. `C-b' is rebound to run ! 644: `picture-backward-column', which always moves point left one column, ! 645: converting a tab to multiple spaces if necessary. `C-n' and `C-p' are ! 646: rebound to run `picture-move-down' and `picture-move-up', which can ! 647: either insert spaces or convert tabs as necessary to make sure that ! 648: point stays in exactly the same column. `C-e' runs ! 649: `picture-end-of-line', which moves to after the last nonblank character ! 650: on the line. There is no need to change `C-a', as the choice of screen ! 651: model does not affect beginnings of lines. ! 652: ! 653: Insertion of text is adapted to the quarter-plane screen model ! 654: through the use of Overwrite mode (*note Minor Modes::.). ! 655: Self-inserting characters replace existing text, column by column, ! 656: rather than pushing existing text to the right. RET runs ! 657: `picture-newline', which just moves to the beginning of the following ! 658: line so that new text will replace that line. ! 659: ! 660: Deletion and killing of text are replaced with erasure. DEL ! 661: (`picture-backward-clear-column') replaces the preceding character with ! 662: a space rather than removing it. `C-d' (`picture-clear-column') does ! 663: the same thing in a forward direction. `C-k' (`picture-clear-line') ! 664: really kills the contents of lines, but does not ever remove the ! 665: newlines from the buffer. ! 666: ! 667: To do actual insertion, you must use special commands. `C-o' ! 668: (`picture-open-line') still creates a blank line, but does so after the ! 669: current line; it never splits a line. `C-M-o', `split-line', makes ! 670: sense in Picture mode, so it is not changed. LFD ! 671: (`picture-duplicate-line') inserts below the current line another line ! 672: with the same contents. ! 673: ! 674: Real deletion can be done with `C-w', or with `C-c C-d' (which is ! 675: defined as `delete-char', as `C-d' is in other modes), or with one of ! 676: the picture rectangle commands (*note Rectangles in Picture::.). ! 677: ! 678: ! 679: File: emacs, Node: Insert in Picture, Next: Tabs in Picture, Prev: Basic Picture, Up: Picture ! 680: ! 681: Controlling Motion after Insert ! 682: =============================== ! 683: ! 684: Since "self-inserting" characters in Picture mode just overwrite and ! 685: move point, there is no essential restriction on how point should be ! 686: moved. Normally point moves right, but you can specify any of the eight ! 687: orthogonal or diagonal directions for motion after a "self-inserting" ! 688: character. This is useful for drawing lines in the buffer. ! 689: ! 690: `C-c <' ! 691: Move left after insertion (`picture-movement-left'). ! 692: ! 693: `C-c >' ! 694: Move right after insertion (`picture-movement-right'). ! 695: ! 696: `C-c ^' ! 697: Move up after insertion (`picture-movement-up'). ! 698: ! 699: `C-c .' ! 700: Move down after insertion (`picture-movement-down'). ! 701: ! 702: `C-c `' ! 703: Move up and left ("northwest") after insertion ! 704: (`picture-movement-nw'). ! 705: ! 706: `C-c '' ! 707: Move up and right ("northeast") after insertion ! 708: (`picture-movement-ne'). ! 709: ! 710: `C-c /' ! 711: Move down and left ("southwest") after insertion ! 712: (`picture-movement-sw'). ! 713: ! 714: `C-c \' ! 715: Move down and right ("southeast") after insertion ! 716: (`picture-movement-se'). ! 717: ! 718: Two motion commands move based on the current Picture insertion ! 719: direction. The command `C-c C-f' (`picture-motion') moves in the same ! 720: direction as motion after "insertion" currently does, while `C-c C-b' ! 721: (`picture-motion-reverse') moves in the opposite direction. ! 722: ! 723: ! 724: File: emacs, Node: Tabs in Picture, Next: Rectangles in Picture, Prev: Insert in Picture, Up: Picture ! 725: ! 726: Picture Mode Tabs ! 727: ================= ! 728: ! 729: Two kinds of tab-like action are provided in Picture mode. ! 730: Context-based tabbing is done with `M-TAB' (`picture-tab-search'). ! 731: With no argument, it moves to a point underneath the next "interesting" ! 732: character that follows whitespace in the previous nonblank line. ! 733: "Next" here means "appearing at a horizontal position greater than the ! 734: one point starts out at". With an argument, as in `C-u M-TAB', this ! 735: command moves to the next such interesting character in the current ! 736: line. `M-TAB' does not change the text; it only moves point. ! 737: "Interesting" characters are defined by the variable ! 738: `picture-tab-chars', which contains a string whose characters are all ! 739: considered interesting. Its default value is `"!-~"'. ! 740: ! 741: TAB itself runs `picture-tab', which operates based on the current ! 742: tab stop settings; it is the Picture mode equivalent of ! 743: `tab-to-tab-stop'. Normally it just moves point, but with a numeric ! 744: argument it clears the text that it moves over. ! 745: ! 746: The context-based and tab-stop-based forms of tabbing are brought ! 747: together by the command `C-c TAB', `picture-set-tab-stops'. This ! 748: command sets the tab stops to the positions which `M-TAB' would ! 749: consider significant in the current line. The use of this command, ! 750: together with TAB, can get the effect of context-based tabbing. But ! 751: `M-TAB' is more convenient in the cases where it is sufficient. ! 752: ! 753: ! 754: File: emacs, Node: Rectangles in Picture, Prev: Tabs in Picture, Up: Picture ! 755: ! 756: Picture Mode Rectangle Commands ! 757: =============================== ! 758: ! 759: Picture mode defines commands for working on rectangular pieces of ! 760: the text in ways that fit with the quarter-plane model. The standard ! 761: rectangle commands may also be useful (*note Rectangles::.). ! 762: ! 763: `C-c C-k' ! 764: Clear out the region-rectangle (`picture-clear-rectangle'). With ! 765: argument, kill it. ! 766: ! 767: `C-c C-w R' ! 768: Similar but save rectangle contents in register R first ! 769: (`picture-clear-rectangle-to-register'). ! 770: ! 771: `C-c C-y' ! 772: Copy last killed rectangle into the buffer by overwriting, with ! 773: upper left corner at point (`picture-yank-rectangle'). With ! 774: argument, insert instead. ! 775: ! 776: `C-c C-x R' ! 777: Similar, but use the rectangle in register R ! 778: (`picture-yank-rectangle-from-register'). ! 779: ! 780: The picture rectangle commands `C-c C-k' (`picture-clear-rectangle') ! 781: and `C-c C-w' (`picture-clear-rectangle-to-register') differ from the ! 782: standard rectangle commands in that they normally clear the rectangle ! 783: instead of deleting it; this is analogous with the way `C-d' is changed ! 784: in Picture mode. ! 785: ! 786: However, deletion of rectangles can be useful in Picture mode, so ! 787: these commands delete the rectangle if given a numeric argument. ! 788: ! 789: The Picture mode commands for yanking rectangles differ from the ! 790: standard ones in overwriting instead of inserting. This is the same ! 791: way that Picture mode insertion of other text is different from other ! 792: modes. `C-c C-y' (`picture-yank-rectangle') inserts (by overwriting) the ! 793: rectangle that was most recently killed, while `C-c C-x' ! 794: (`picture-yank-rectangle-from-register') does likewise for the ! 795: rectangle found in a specified register. ! 796: ! 797: ! 798: File: emacs, Node: Sending Mail, Next: Rmail, Prev: Picture, Up: Top ! 799: ! 800: Sending Mail ! 801: ************ ! 802: ! 803: To send a message in Emacs, you start by typing a command (`C-x m') ! 804: to select and initialize the `*mail*' buffer. Then you edit the text ! 805: and headers of the message in this buffer, and type another command ! 806: (`C-c C-c') to send the message. ! 807: ! 808: `C-x m' ! 809: Begin composing a message to send (`mail'). ! 810: ! 811: `C-x 4 m' ! 812: Likewise, but display the message in another window ! 813: (`mail-other-window'). ! 814: ! 815: `C-c C-c' ! 816: In Mail mode, send the message and switch to another buffer ! 817: (`mail-send-and-exit'). ! 818: ! 819: The command `C-x m' (`mail') selects a buffer named `*mail*' and ! 820: initializes it with the skeleton of an outgoing message. `C-x 4 m' ! 821: (`mail-other-window') selects the `*mail*' buffer in a different ! 822: window, leaving the previous current buffer visible. ! 823: ! 824: Because the mail composition buffer is an ordinary Emacs buffer, you ! 825: can switch to other buffers while in the middle of composing mail, and ! 826: switch back later (or never). If you use the `C-x m' command again ! 827: when you have been composing another message but have not sent it, you ! 828: are asked to confirm before the old message is erased. If you answer ! 829: `n', the `*mail*' buffer is left selected with its old contents, so you ! 830: can finish the old message and send it. `C-u C-x m' is another way to ! 831: do this. Sending the message marks the `*mail*' buffer "unmodified", ! 832: which avoids the need for confirmation when `C-x m' is next used. ! 833: ! 834: If you are composing a message in the `*mail*' buffer and want to ! 835: send another message before finishing the first, rename the `*mail*' ! 836: buffer using `M-x rename-buffer' (*note Misc Buffer::.). ! 837: ! 838: * Menu: ! 839: ! 840: * Format: Mail Format. Format of the mail being composed. ! 841: * Headers: Mail Headers. Details of allowed mail header fields. ! 842: * Mode: Mail Mode. Special commands for editing mail being composed. ! 843: ! 844: ! 845: File: emacs, Node: Mail Format, Next: Mail Headers, Prev: Sending Mail, Up: Sending Mail ! 846: ! 847: The Format of the Mail Buffer ! 848: ============================= ! 849: ! 850: In addition to the "text" or contents, a message has "header fields" ! 851: which say who sent it, when, to whom, why, and so on. Some header ! 852: fields such as the date and sender are created automatically after the ! 853: message is sent. Others, such as the recipient names, must be ! 854: specified by you in order to send the message properly. ! 855: ! 856: Mail mode provides a few commands to help you edit some header ! 857: fields, and some are preinitialized in the buffer automatically at ! 858: times. You can insert or edit any header fields using ordinary editing ! 859: commands. ! 860: ! 861: The line in the buffer that says ! 862: ! 863: --text follows this line-- ! 864: ! 865: is a special delimiter that separates the headers you have specified ! 866: from the text. Whatever follows this line is the text of the message; ! 867: the headers precede it. The delimiter line itself does not appear in ! 868: the message actually sent. The text used for the delimiter line is ! 869: controlled by the variable `mail-header-separator'. ! 870: ! 871: Here is an example of what the headers and text in the `*mail*' ! 872: buffer might look like. ! 873: ! 874: To: rms@mc ! 875: CC: mly@mc, rg@oz ! 876: Subject: The Emacs Manual ! 877: --Text follows this line-- ! 878: Please ignore this message. ! 879: ! 880: ! 881: File: emacs, Node: Mail Headers, Next: Mail Mode, Prev: Mail Format, Up: Sending Mail ! 882: ! 883: Mail Header Fields ! 884: ================== ! 885: ! 886: There are several header fields you can use in the `*mail*' buffer. ! 887: Each header field starts with a field name at the beginning of a line, ! 888: terminated by a colon. It does not matter whether you use upper or ! 889: lower case in the field name. After the colon and optional whitespace ! 890: comes the contents of the field. ! 891: ! 892: `To' ! 893: This field contains the mailing addresses to which the message is ! 894: addressed. ! 895: ! 896: `Subject' ! 897: The contents of the `Subject' field should be a piece of text that ! 898: says what the message is about. The reason `Subject' fields are ! 899: useful is that most mail-reading programs can provide a summary of ! 900: messages, listing the subject of each message but not its text. ! 901: ! 902: `CC' ! 903: This field contains additional mailing addresses to send the ! 904: message to, but whose readers should not regard the message as ! 905: addressed to them. ! 906: ! 907: `BCC' ! 908: This field contains additional mailing addresses to send the ! 909: message to, but which should not appear in the header of the ! 910: message actually sent. ! 911: ! 912: `FCC' ! 913: This field contains the name of one file (in Unix mail file ! 914: format) to which a copy of the message should be appended when the ! 915: message is sent. ! 916: ! 917: `From' ! 918: Use the `From' field to say who you are, when the account you are ! 919: using to send the mail is not your own. The contents of the ! 920: `From' field should be a valid mailing address, since replies will ! 921: normally go there. ! 922: ! 923: `Reply-To' ! 924: Use the `Reply-to' field to direct replies to a different address, ! 925: not your own. There is no difference between `From' and ! 926: `Reply-to' in their effect on where replies go, but they convey a ! 927: different meaning to the human who reads the message. ! 928: ! 929: If you set the variable `mail-default-reply-to' to a non-`nil' ! 930: value, then every message you begin to edit will have a `Reply-to' ! 931: field whose contents are the value of the variable. ! 932: ! 933: `In-Reply-To' ! 934: This field contains a piece of text describing a message you are ! 935: replying to. Some mail systems can use this information to ! 936: correlate related pieces of mail. Normally this field is filled ! 937: in by Rmail when you are replying to a message in Rmail, and you ! 938: never need to think about it (*note Rmail::.). ! 939: ! 940: The `To', `CC', `BCC' and `FCC' fields can appear any number of ! 941: times, to specify many places to send the message. ! 942: ! 943: The `To', `CC', and `BCC' fields can have continuation lines. All ! 944: the lines starting with whitespace, following the line on which the ! 945: field starts, are considered part of the field. For example, ! 946: ! 947: To: foo@here, this@there, ! 948: [email protected] ! 949: ! 950: If you have a `~/.mailrc' file, Emacs will scan it for mail aliases ! 951: the first time you try to send mail in an Emacs session. Aliases found ! 952: in the `To', `CC', and `BCC' fields will be expanded where appropriate. ! 953: ! 954: If the variable `mail-archive-file-name' is non-`nil', it should be a ! 955: string naming a file; every time you start to edit a message to send, ! 956: an `FCC' field will be put in for that file. Unless you remove the ! 957: `FCC' field, every message will be written into that file when it is ! 958: sent. ! 959: ! 960: ! 961: File: emacs, Node: Mail Mode, Prev: Mail Headers, Up: Sending Mail ! 962: ! 963: Mail Mode ! 964: ========= ! 965: ! 966: The major mode used in the `*mail*' buffer is Mail mode, which is ! 967: much like Text mode except that various special commands are provided on ! 968: the `C-c' prefix. These commands all have to do specifically with ! 969: editing or sending the message. ! 970: ! 971: `C-c C-s' ! 972: Send the message, and leave the `*mail*' buffer selected ! 973: (`mail-send'). ! 974: ! 975: `C-c C-c' ! 976: Send the message, and select some other buffer ! 977: (`mail-send-and-exit'). ! 978: ! 979: `C-c C-f C-t' ! 980: Move to the `To' header field, creating one if there is none ! 981: (`mail-to'). ! 982: ! 983: `C-c C-f C-s' ! 984: Move to the `Subject' header field, creating one if there is none ! 985: (`mail-subject'). ! 986: ! 987: `C-c C-f C-c' ! 988: Move to the `CC' header field, creating one if there is none ! 989: (`mail-cc'). ! 990: ! 991: `C-c C-w' ! 992: Insert the file `~/.signature' at the end of the message text ! 993: (`mail-signature'). ! 994: ! 995: `C-c C-y' ! 996: Yank the selected message from Rmail (`mail-yank-original'). This ! 997: command does nothing unless your command to start sending a ! 998: message was issued with Rmail. ! 999: ! 1000: `C-c C-q' ! 1001: Fill all paragraphs of yanked old messages, each individually ! 1002: (`mail-fill-yanked-message'). ! 1003: ! 1004: There are two ways to send the message. `C-c C-s' (`mail-send') ! 1005: sends the message and marks the `*mail*' buffer unmodified, but leaves ! 1006: that buffer selected so that you can modify the message (perhaps with ! 1007: new recipients) and send it again. `C-c C-c' (`mail-send-and-exit') ! 1008: sends and then deletes the window (if there is another window) or ! 1009: switches to another buffer. It puts the `*mail*' buffer at the lowest ! 1010: priority for automatic reselection, since you are finished with using ! 1011: it. This is the usual way to send the message. ! 1012: ! 1013: Mail mode provides some other special commands that are useful for ! 1014: editing the headers and text of the message before you send it. There ! 1015: are three commands defined to move point to particular header fields, ! 1016: all based on the prefix `C-c C-f' (`C-f' is for "field"). They are ! 1017: `C-c C-f C-t' (`mail-to') to move to the `To' field, `C-c C-f C-s' ! 1018: (`mail-subject') for the `Subject' field, and `C-c C-f C-c' (`mail-cc') ! 1019: for the `CC' field. These fields have special motion commands because ! 1020: they are the most common fields for the user to want to edit. ! 1021: ! 1022: `C-c C-w' (`mail-signature') adds a standard piece text at the end ! 1023: of the message to say more about who you are. The text comes from the ! 1024: file `.signature' in your home directory. ! 1025: ! 1026: When mail sending is invoked from the Rmail mail reader using an ! 1027: Rmail command, `C-c C-y' can be used inside the `*mail*' buffer to ! 1028: insert the text of the message you are replying to. Normally it ! 1029: indents each line of that message four spaces and eliminates most ! 1030: header fields. A numeric argument specifies the number of spaces to ! 1031: indent. An argument of just `C-u' says not to indent at all and not to ! 1032: eliminate anything. `C-c C-y' always uses the current message from the ! 1033: `RMAIL' buffer, so you can insert several old messages by selecting one ! 1034: in `RMAIL', switching to `*mail*' and yanking it, then switching back to ! 1035: `RMAIL' to select another. ! 1036: ! 1037: After using `C-c C-y', you can type the command `C-c C-q' ! 1038: (`mail-fill-yanked-message') to fill the paragraphs of the yanked old ! 1039: message or messages. One use of `C-c C-q' fills all such paragraphs, ! 1040: each one separately. ! 1041: ! 1042: Turning on Mail mode (which `C-x m' does automatically) calls the ! 1043: value of `text-mode-hook', if it is not void or `nil', and then calls ! 1044: the value of `mail-mode-hook' if that is not void or `nil'. Aside from ! 1045: these, the `mail' command runs `mail-setup-hook' whenever it ! 1046: initializes the `*mail*' buffer for editing a message. ! 1047: ! 1048: ! 1049: File: emacs, Node: Rmail, Next: Recursive Edit, Prev: Sending Mail, Up: Top ! 1050: ! 1051: Reading Mail with Rmail ! 1052: *********************** ! 1053: ! 1054: Rmail is an Emacs subsystem for reading and disposing of mail that ! 1055: you receive. Rmail stores mail messages in files called "Rmail files". ! 1056: Reading the message in an Rmail file is done in a special major mode, ! 1057: Rmail mode, which redefines most letters to run commands for managing ! 1058: mail. To enter Rmail, type `M-x rmail'. This reads your primary mail ! 1059: file, merges new mail in from your inboxes, displays the first new ! 1060: message, and lets you begin reading. ! 1061: ! 1062: Using Rmail in the simplest fashion, you have one Rmail file, ! 1063: `~/RMAIL', in which all of your mail is saved. It is called your ! 1064: "primary mail file". In more sophisticated usage, you can copy ! 1065: messages into other Rmail files and then edit those files with Rmail. ! 1066: ! 1067: Rmail displays only one message at a time. It is called the "current ! 1068: message". Rmail mode's special commands can do such things as move to ! 1069: another message, delete the message, copy the message into another ! 1070: file, or send a reply. ! 1071: ! 1072: Within the Rmail file, messages are arranged sequentially in order ! 1073: of receipt. They are also assigned consecutive integers as their ! 1074: "message numbers". The number of the current message is displayed in ! 1075: Rmail's mode line, followed by the total number of messages in the ! 1076: file. You can move to a message by specifying its message number using ! 1077: the `j' key (*note Rmail Motion::.). ! 1078: ! 1079: Following the usual conventions of Emacs, changes in an Rmail file ! 1080: become permanent only when the file is saved. You can do this with `s' ! 1081: (`rmail-save'), which also expunges deleted messages from the file ! 1082: first (*note Rmail Deletion::.). To save the file without expunging, ! 1083: use `C-x C-s'. Rmail saves the Rmail file spontaneously when moving new ! 1084: mail from an inbox file (*note Rmail Inbox::.). ! 1085: ! 1086: You can exit Rmail with `q' (`rmail-quit'); this expunges and saves ! 1087: the Rmail file and then switches to another buffer. But there is no ! 1088: need to `exit' formally. If you switch from Rmail to editing in other ! 1089: buffers, and never happen to switch back, you have exited. Just make ! 1090: sure to save the Rmail file eventually (like any other file you have ! 1091: changed). `C-x s' is a good enough way to do this (*note Saving::.). ! 1092: ! 1093: * Menu: ! 1094: ! 1095: * Scroll: Rmail Scrolling. Scrolling through a message. ! 1096: * Motion: Rmail Motion. Moving to another message. ! 1097: * Deletion: Rmail Deletion. Deleting and expunging messages. ! 1098: * Inbox: Rmail Inbox. How mail gets into the Rmail file. ! 1099: * Files: Rmail Files. Using multiple Rmail files. ! 1100: * Output: Rmail Output. Copying message out to files. ! 1101: * Labels: Rmail Labels. Classifying messages by labeling them. ! 1102: * Summary: Rmail Summary. Summaries show brief info on many messages. ! 1103: * Reply: Rmail Reply. Sending replies to messages you are viewing. ! 1104: * Editing: Rmail Editing. Editing message text and headers in Rmail. ! 1105: * Digest: Rmail Digest. Extracting the messages from a digest message. ! 1106: ! 1107: ! 1108: File: emacs, Node: Rmail Scrolling, Next: Rmail Motion, Prev: Rmail, Up: Rmail ! 1109: ! 1110: Scrolling Within a Message ! 1111: ========================== ! 1112: ! 1113: When Rmail displays a message that does not fit on the screen, it is ! 1114: necessary to scroll through it. This could be done with `C-v', `M-v' ! 1115: and `M-<', but in Rmail scrolling is so frequent that it deserves to be ! 1116: easier to type. ! 1117: ! 1118: `SPC' ! 1119: Scroll forward (`scroll-up'). ! 1120: ! 1121: `DEL' ! 1122: Scroll backward (`scroll-down'). ! 1123: ! 1124: `.' ! 1125: Scroll to start of message (`rmail-beginning-of-message'). ! 1126: ! 1127: Since the most common thing to do while reading a message is to ! 1128: scroll through it by screenfuls, Rmail makes SPC and DEL synonyms of ! 1129: `C-v' (`scroll-up') and `M-v' (`scroll-down'). ! 1130: ! 1131: The command `.' (`rmail-beginning-of-message') scrolls back to the ! 1132: beginning of the selected message. This is not quite the same as `M-<': ! 1133: for one thing, it does not set the mark; for another, it resets the ! 1134: buffer boundaries to the current message if you have changed them. ! 1135: ! 1136:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.