|
|
1.1 ! root 1: Info file emacs, produced by texinfo-format-buffer -*-Text-*- ! 2: from file emacs.tex ! 3: ! 4: This file documents the GNU Emacs editor. ! 5: ! 6: Copyright (C) 1985, 1986 Richard M. Stallman. ! 7: ! 8: Permission is granted to make and distribute verbatim copies of ! 9: this manual provided the copyright notice and this permission notice ! 10: are preserved on all copies. ! 11: ! 12: Permission is granted to copy and distribute modified versions of this ! 13: manual under the conditions for verbatim copying, provided also that the ! 14: sections entitled "The GNU Manifesto", "Distribution" and "GNU Emacs ! 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 manual ! 20: into another language, under the above conditions for modified versions, ! 21: except that the sections entitled "The GNU Manifesto", "Distribution" ! 22: and "GNU Emacs General Public License" may be included in a translation ! 23: approved by the author instead of in the original English. ! 24: ! 25: ! 26: File: emacs Node: Regexps, Prev: Regexp Search, Up: Search, Next: Search Case ! 27: ! 28: Syntax of Regular Expressions ! 29: ============================= ! 30: ! 31: Regular expressions have a syntax in which a few characters are special ! 32: constructs and the rest are "ordinary". An ordinary character is a simple ! 33: regular expression which matches that character and nothing else. The ! 34: special characters are `$', `^', `.', `*', `+', `?', `[', `]' and `\'; no ! 35: new special characters will be defined. Any other character appearing in a ! 36: regular expression is ordinary, unless a `\' precedes it. ! 37: ! 38: For example, `f' is not a special character, so it is ordinary, and ! 39: therefore `f' is a regular expression that matches the string `f' and no ! 40: other string. (It does not match the string `ff'.) Likewise, `o' is a ! 41: regular expression that matches only `o'. ! 42: ! 43: Any two regular expressions A and B can be concatenated. The result is a ! 44: regular expression which matches a string if A matches some amount of the ! 45: beginning of that string and B matches the rest of the string. ! 46: ! 47: As a simple example, we can concatenate the regular expressions `f' ! 48: and `o' to get the regular expression `fo', which matches only ! 49: the string `fo'. Still trivial. To do something nontrivial, you ! 50: need to use one of the special characters. Here is a list of them. ! 51: ! 52: `. (Period)' ! 53: is a special character that matches any single character except a ! 54: newline. Using concatenation, we can make regular expressions like ! 55: `a.b' which matches any three-character string which begins with `a' ! 56: and ends with `b'. ! 57: ! 58: `*' ! 59: is not a construct by itself; it is a suffix, which means the ! 60: preceding regular expression is to be repeated as many times as ! 61: possible. In `fo*', the `*' applies to the `o', so `fo*' matches one ! 62: `f' followed by any number of `o's. The case of zero `o's is allowed: ! 63: `fo*' does match `f'. ! 64: ! 65: `*' always applies to the smallest possible preceding expression. ! 66: Thus, `fo*' has a repeating `o', not a repeating `fo'. ! 67: ! 68: The matcher processes a `*' construct by matching, immediately, as ! 69: many repetitions as can be found. Then it continues with the rest of ! 70: the pattern. If that fails, backtracking occurs, discarding some of ! 71: the matches of the `*'-modified construct in case that makes it ! 72: possible to match the rest of the pattern. For example, matching ! 73: `ca*ar' against the string `caaar', the `a*' first tries to match all ! 74: three `a's; but the rest of the pattern is `ar' and there is only `r' ! 75: left to match, so this try fails. The next alternative is for `a*' to ! 76: match only two `a's. With this choice, the rest of the regexp matches ! 77: successfully. ! 78: ! 79: `+' ! 80: Is a suffix character similar to `*' except that it requires that the ! 81: preceding expression be matched at least once. So, for example, ! 82: `ca+r' will match the strings `car' and `caaaar' but not the string ! 83: `cr', whereas `ca*r' would match all three strings. ! 84: ! 85: `?' ! 86: Is a suffix character similar to `*' except that it can match the ! 87: preceding expression either once or not at all. For example, ! 88: `ca?r' will match `car' or `cr'; nothing else. ! 89: ! 90: `[ ... ]' ! 91: `[' begins a "character set", which is terminated by a `]'. In the ! 92: simplest case, the characters between the two form the set. Thus, ! 93: `[ad]' matches either one `a' or one `d', and `[ad]*' matches any ! 94: string composed of just `a's and `d's (including the empty string), ! 95: from which it follows that `c[ad]*r' matches `cr', `car', `cdr', ! 96: `caddaar', etc. ! 97: ! 98: Character ranges can also be included in a character set, by writing ! 99: two characters with a `-' between them. Thus, `[a-z]' matches any ! 100: lower-case letter. Ranges may be intermixed freely with individual ! 101: characters, as in `[a-z$%.]', which matches any lower case letter or ! 102: `$', `%' or period. ! 103: ! 104: Note that the usual special characters are not special any more inside ! 105: a character set. A completely different set of special characters ! 106: exists inside character sets: `]', `-' and `^'. ! 107: ! 108: To include a `]' in a character set, you must make it the first ! 109: character. For example, `[]a]' matches `]' or `a'. To include a `-', ! 110: write `---', which is a range containing only `-'. To include `^', ! 111: make it other than the first character in the set. ! 112: ! 113: `[^ ... ]' ! 114: `[^' begins a "complement character set", which matches any character ! 115: except the ones specified. Thus, `[^a-z0-9A-Z]' matches all ! 116: characters except letters and digits. ! 117: ! 118: `^' is not special in a character set unless it is the first ! 119: character. The character following the `^' is treated as if it ! 120: were first (`-' and `]' are not special there). ! 121: ! 122: Note that a complement character set can match a newline, unless ! 123: newline is mentioned as one of the characters not to match. ! 124: ! 125: `^' ! 126: is a special character that matches the empty string, but only if at ! 127: the beginning of a line in the text being matched. Otherwise it fails ! 128: to match anything. Thus, `^foo' matches a `foo' which occurs ! 129: at the beginning of a line. ! 130: ! 131: `$' ! 132: is similar to `^' but matches only at the end of a line. Thus, ! 133: `xx*$' matches a string of one `x' or more at the end of a line. ! 134: ! 135: `\' ! 136: has two functions: it quotes the special characters (including ! 137: `\'), and it introduces additional special constructs. ! 138: ! 139: Because `\' quotes special characters, `\$' is a regular expression ! 140: which matches only `$', and `\[' is a regular expression which matches ! 141: only `[', and so on. ! 142: ! 143: Note: for historical compatibility, special characters are treated as ! 144: ordinary ones if they are in contexts where their special meanings make no ! 145: sense. For example, `*foo' treats `*' as ordinary since there is no ! 146: preceding expression on which the `*' can act. It is poor practice to ! 147: depend on this behavior; better to quote the special character anyway, ! 148: regardless of where is appears. ! 149: ! 150: For the most part, `\' followed by any character matches only ! 151: that character. However, there are several exceptions: characters ! 152: which, when preceded by `\', are special constructs. Such ! 153: characters are always ordinary when encountered on their own. Here ! 154: is a table of `\' constructs. ! 155: ! 156: `\|' ! 157: specifies an alternative. Two regular expressions A and B with `\|' ! 158: in between form an expression that matches anything that either A or B ! 159: will match. ! 160: ! 161: Thus, `foo\|bar' matches either `foo' or `bar' but no other string. ! 162: ! 163: `\|' applies to the largest possible surrounding expressions. Only a ! 164: surrounding `\( ... \)' grouping can limit the grouping power of `\|'. ! 165: ! 166: Full backtracking capability exists to handle multiple uses of `\|'. ! 167: ! 168: `\( ... \)' ! 169: is a grouping construct that serves three purposes: ! 170: ! 171: 1. To enclose a set of `\|' alternatives for other operations. ! 172: Thus, `\(foo\|bar\)x' matches either `foox' or `barx'. ! 173: ! 174: 2. To enclose a complicated expression for the postfix `*' to ! 175: operate on. Thus, `ba\(na\)*' matches `bananana', etc., with any ! 176: (zero or more) number of `na' strings. ! 177: ! 178: 3. To mark a matched substring for future reference. ! 179: ! 180: ! 181: This last application is not a consequence of the idea of a ! 182: parenthetical grouping; it is a separate feature which happens to be ! 183: assigned as a second meaning to the same `\( ... \)' construct ! 184: because there is no conflict in practice between the two meanings. ! 185: Here is an explanation of this feature: ! 186: ! 187: `\DIGIT' ! 188: after the end of a `\( ... \)' construct, the matcher remembers the ! 189: beginning and end of the text matched by that construct. Then, later ! 190: on in the regular expression, you can use `\' followed by DIGIT to ! 191: mean "match the same text matched the DIGIT'th time by the `\( ... \)' ! 192: construct." ! 193: ! 194: The strings matching the first nine `\( ... \)' constructs appearing ! 195: in a regular expression are assigned numbers 1 through 9 in order that the ! 196: open-parentheses appear in the regular expression. `\1' through ! 197: `\9' may be used to refer to the text matched by the corresponding ! 198: `\( ... \)' construct. ! 199: ! 200: For example, `\(.*\)\1' matches any newline-free string that is ! 201: composed of two identical halves. The `\(.*\)' matches the first ! 202: half, which may be anything, but the `\1' that follows must match ! 203: the same exact text. ! 204: ! 205: `\`' ! 206: matches the empty string, provided it is at the beginning ! 207: of the buffer. ! 208: ! 209: `\'' ! 210: matches the empty string, provided it is at the end of ! 211: the buffer. ! 212: ! 213: `\b' ! 214: matches the empty string, provided it is at the beginning or end of a ! 215: word. Thus, `\bfoo\b' matches any occurrence of `foo' as a separate ! 216: word. `\bballs?\b' matches `ball' or `balls' as a separate word. ! 217: ! 218: `\B' ! 219: matches the empty string, provided it is not at the beginning or ! 220: end of a word. ! 221: ! 222: `\<' ! 223: matches the empty string, provided it is at the beginning of a word. ! 224: ! 225: `\>' ! 226: matches the empty string, provided it is at the end of a word. ! 227: ! 228: `\w' ! 229: matches any word-constituent character. The editor syntax table ! 230: determines which characters these are. ! 231: ! 232: `\W' ! 233: matches any character that is not a word-constituent. ! 234: ! 235: `\sCODE' ! 236: matches any character whose syntax is CODE. CODE is a character which ! 237: represents a syntax code: thus, `w' for word constituent, `-' for ! 238: whitespace, `(' for open-parenthesis, etc. *Note Syntax::. ! 239: ! 240: `\SCODE' ! 241: matches any character whose syntax is not CODE. ! 242: ! 243: Here is a complicated regexp, used by Emacs to recognize the end of a ! 244: sentence together with any whitespace that follows. It is given in Lisp ! 245: syntax to enable you to distinguish the spaces from the tab characters. In ! 246: Lisp syntax, the string constant begins and ends with a double-quote. ! 247: `\"' stands for a double-quote as part of the regexp, `\\' for a ! 248: backslash as part of the regexp, `\t' for a tab and `\n' for a ! 249: newline. ! 250: ! 251: "[.?!][]\"')]*\\($\\|\t\\| \\)[ \t\n]*" ! 252: ! 253: This contains four parts in succession: a character set matching period, ! 254: `?' or `!'; a character set matching close-brackets, ! 255: quotes or parentheses, repeated any number of times; an alternative in ! 256: backslash-parentheses that matches end-of-line, a tab or two spaces; and a ! 257: character set matching whitespace characters, repeated any number of times. ! 258: ! 259: ! 260: File: emacs Node: Search Case, Prev: Regexps, Up: Search, Next: Replace ! 261: ! 262: Searching and Case ! 263: ================== ! 264: ! 265: All sorts of searches in Emacs normally ignore the case of the text they ! 266: are searching through; if you specify searching for `FOO', then `Foo' and ! 267: `foo' are also considered a match. Regexps, and in particular character ! 268: sets, are included: `[aB]' would match `a' or `A' or `b' or `B'. ! 269: ! 270: If you do not want this feature, set the variable `case-fold-search' ! 271: to `nil'. Then all letters must match exactly, including case. This ! 272: is a per-buffer variable; altering the variable affects only the current ! 273: buffer, but there is a default value which you can change as well. ! 274: *Note Locals::. ! 275: ! 276: ! 277: File: emacs Node: Replace, Prev: Search Case, Up: Search, Next: Other Repeating Search ! 278: ! 279: Replacement Commands ! 280: ==================== ! 281: ! 282: Global search-and-replace operations are not needed as often in Emacs as ! 283: they are in other editors, but they are available. In addition to the ! 284: simple `replace-string' command which is like that found in most ! 285: editors, there is a `query-replace' command which asks you, for each ! 286: occurrence of the pattern, whether to replace it. ! 287: ! 288: The replace commands all replace one string (or regexp) with one ! 289: replacement string. It is possible to perform several replacements in ! 290: parallel using the command `expand-region-abbrevs'. *Note Expanding Abbrevs::. ! 291: ! 292: * Menu: ! 293: ! 294: * Unconditional Replace:: Replacing all matches for a string. ! 295: * Regexp Replace:: Replacing all matches for a regexp. ! 296: * Replacement and Case:: How replacements preserve case of letters. ! 297: * Query Replace:: How to use querying. ! 298: ! 299: ! 300: File: emacs Node: Unconditional Replace, Prev: Replace, Up: Replace, Next: Regexp Replace ! 301: ! 302: Unconditional Replacement ! 303: ------------------------- ! 304: ! 305: `M-x replace-string RET STRING RET NEWSTRING RET' ! 306: Replace every occurrence of STRING with NEWSTRING. ! 307: `M-x replace-regexp RET REGEXP RET NEWSTRING RET' ! 308: Replace every match for REGEXP with NEWSTRING. ! 309: ! 310: To replace every instance of `foo' after point with `bar', use ! 311: the command `M-x replace-string' with the two arguments `foo' and ! 312: `bar'. Replacement occurs only after point, so if you want to cover ! 313: the whole buffer you must go to the beginning first. All occurrences up to ! 314: the end of the buffer are replaced; to limit replacement to part of the ! 315: buffer, narrow to that part of the buffer before doing the replacement ! 316: (*Note Narrowing::). ! 317: ! 318: When `replace-string' exits, point is left at the last occurrence ! 319: replaced. The value of point when the `replace-string' command was ! 320: issued is remembered on the mark ring; `C-u C-SPC' moves back ! 321: there. ! 322: ! 323: A numeric argument restricts replacement to matches that are surrounded ! 324: by word boundaries. ! 325: ! 326: ! 327: File: emacs Node: Regexp Replace, Prev: Unconditional Replace, Up: Replace, Next: Replacement and Case ! 328: ! 329: Regexp Replacement ! 330: ------------------ ! 331: ! 332: `replace-string' replaces exact matches for a single string. The ! 333: similar command `replace-regexp' replaces any match for a specified ! 334: pattern. ! 335: ! 336: In `replace-regexp', the NEWSTRING need not be constant. It can refer to ! 337: all or part of what is matched by the REGEXP. `\&' in NEWSTRING stands for ! 338: the entire text being replaced. `\D' in NEWSTRING, where D is a digit, ! 339: stands for whatever matched the D'th parenthesized grouping in REGEXP. For ! 340: example, ! 341: ! 342: M-x replace-regexp RET c[ad]+r RET \&-safe RET ! 343: ! 344: would replace (for example) `cadr' with `cadr-safe' and `cddr' ! 345: with `cddr-safe'. ! 346: ! 347: M-x replace-regexp RET \(c[ad]+r\)-safe RET \1 RET ! 348: ! 349: would perform exactly the opposite replacements. To include a `\' ! 350: in the text to replace with, you must give `\\'. ! 351: ! 352: ! 353: File: emacs Node: Replacement and Case, Prev: Regexp Replace, Up: Replace, Next: Query Replace ! 354: ! 355: Replace Commands and Case ! 356: ------------------------- ! 357: ! 358: If the arguments to a replace command are in lower case, it preserves ! 359: case when it makes a replacement. Thus, the command ! 360: ! 361: M-x replace-string RET foo RET bar RET ! 362: ! 363: replaces a lower case `foo' with a lower case `bar', `FOO' ! 364: with `BAR', and `Foo' with `Bar'. If upper case letters are ! 365: used in the second argument, they remain upper case every time that ! 366: argument is inserted. If upper case letters are used in the first ! 367: argument, the second argument is always substituted exactly as given, with ! 368: no case conversion. Likewise, if the variable `case-replace' is set ! 369: to `nil', replacement is done without case conversion. If ! 370: `case-fold-search' is set to `nil', case is significant in ! 371: matching occurrences of `foo' to replace; also, case conversion of the ! 372: replacement string is not done. ! 373: ! 374: ! 375: File: emacs Node: Query Replace, Prev: Replacement and Case, Up: Replace ! 376: ! 377: Query Replace ! 378: ------------- ! 379: ! 380: `M-% STRING RET NEWSTRING RET' ! 381: `M-x query-replace RET STRING RET NEWSTRING RET' ! 382: Replace some occurrences of STRING with NEWSTRING. ! 383: `M-x query-replace-regexp RET REGEXP RET NEWSTRING RET' ! 384: Replace some matches for REGEXP with NEWSTRING. ! 385: ! 386: If you want to change only some of the occurrences of `foo' to `bar', not ! 387: all of them, then you cannot use an ordinary `replace-string'. Instead, ! 388: use `M-%' (`query-replace'). This command finds occurrences of `foo' one ! 389: by one, displays each occurrence and asks you whether to replace it. A ! 390: numeric argument to `query-replace' tells it to consider only occurrences ! 391: that are bounded by word-delimiter characters. ! 392: ! 393: Aside from querying, `query-replace' works just like `replace-string', ! 394: and `query-replace-regexp' works just like `replace-regexp'. ! 395: ! 396: The things you can type when you are shown an occurrence of STRING ! 397: or a match for REGEXP are: ! 398: ! 399: ! 400: `SPC' ! 401: to replace the occurrence with NEWSTRING. This preserves case, just ! 402: like `replace-string', provided `case-replace' is non-`nil', as it ! 403: normally is. ! 404: ! 405: `DEL' ! 406: to skip to the next occurrence without replacing this one. ! 407: ! 408: `, (Comma)' ! 409: to replace this occurrence and display the result. You are then asked ! 410: for another input character, except that since the replacement has ! 411: already been made, DEL and SPC are equivalent. You could ! 412: type `C-r' at this point (see below) to alter the replaced text. You ! 413: could also type `C-x u' to undo the replacement; this exits the ! 414: `query-replace', so if you want to do further replacement you must use ! 415: `C-x ESC' to restart (*Note Repetition::). ! 416: ! 417: `ESC' ! 418: to exit without doing any more replacements. ! 419: ! 420: `. (Period)' ! 421: to replace this occurrence and then exit. ! 422: ! 423: `!' ! 424: to replace all remaining occurrences without asking again. ! 425: ! 426: `^' ! 427: to go back to the location of the previous occurrence (or what used to ! 428: be an occurrence), in case you changed it by mistake. This works by ! 429: popping the mark ring. Only one `^' in a row is allowed, because ! 430: only one previous replacement location is kept during `query-replace'. ! 431: ! 432: `C-r' ! 433: to enter a recursive editing level, in case the occurrence needs to be ! 434: edited rather than just replaced with NEWSTRING. When you are ! 435: done, exit the recursive editing level with `C-M-c' and the next ! 436: occurrence will be displayed. *Note Recursive Edit::. ! 437: ! 438: `C-w' ! 439: to delete the occurrence, and then enter a recursive editing level as ! 440: in `C-r'. Use the recursive edit to insert text to replace the ! 441: deleted occurrence of STRING. When done, exit the recursive ! 442: editing level with `C-M-c' and the next occurrence will be ! 443: displayed. ! 444: ! 445: `C-l' ! 446: to redisplay the screen and then give another answer. ! 447: ! 448: `C-h' ! 449: to display a message summarizing these options, then give another ! 450: answer. ! 451: ! 452: If you type any other character, the `query-replace' is exited, and ! 453: the character executed as a command. To restart the `query-replace', ! 454: use `C-x ESC', which repeats the `query-replace' because it ! 455: used the minibuffer to read its arguments. *Note C-x ESC: Repetition. ! 456: ! 457: ! 458: File: emacs Node: Other Repeating Search, Prev: Replace, Up: Search ! 459: ! 460: Other Search-and-Loop Commands ! 461: ============================== ! 462: ! 463: Here are some other commands that find matches for a regular expression. ! 464: They all operate from point to the end of the buffer. ! 465: ! 466: `M-x occur' ! 467: Print each line that follows point and contains a match for the ! 468: specified regexp. A numeric argument specifies the number of context ! 469: lines to print before and after each matching line; the default is ! 470: none. ! 471: ! 472: The buffer `*Occur*' containing the output serves as a menu for ! 473: finding the occurrences in their original context. Find an occurrence ! 474: as listed in `*Occur*', position point there and type `C-c ! 475: C-c'; this switches to the buffer that was searched and moves point to ! 476: the original of the same occurrence. ! 477: ! 478: `M-x list-matching-lines' ! 479: Synonym for `M-x occur'. ! 480: ! 481: `M-x count-matches' ! 482: Print the number of matches following point for the specified regexp. ! 483: ! 484: `M-x delete-non-matching-lines' ! 485: Delete each line that follows point and does not contain a match for ! 486: the specified regexp. ! 487: ! 488: `M-x delete-matching-lines' ! 489: Delete each line that follows point and contains a match for the ! 490: specified regexp. ! 491: ! 492: ! 493: File: emacs Node: Fixit, Prev: Search, Up: Top, Next: Files ! 494: ! 495: Commands for Fixing Typos ! 496: ************************* ! 497: ! 498: In this chapter we describe the commands that are especially useful for ! 499: the times when you catch a mistake in your text just after you have made ! 500: it, or change your mind while composing text on line. ! 501: ! 502: * Menu: ! 503: ! 504: * Kill Errors:: Commands to kill a batch of recently entered text. ! 505: * Transpose:: Exchanging two characters, words, lines, lists... ! 506: * Fixing Case:: Correcting case of last word entered. ! 507: * Spelling:: Apply spelling checker to a word, or a whole file. ! 508: ! 509: ! 510: File: emacs Node: Kill Errors, Prev: Fixit, Up: Fixit, Next: Transpose ! 511: ! 512: Killing Your Mistakes ! 513: ===================== ! 514: ! 515: `DEL' ! 516: Delete last character (`delete-backward-char'). ! 517: `M-DEL' ! 518: Kill last word (`backward-kill-word'). ! 519: `C-x DEL' ! 520: Kill to beginning of sentence (`backward-kill-sentence'). ! 521: ! 522: The DEL character (`delete-backward-char') is the most ! 523: important correction command. When used among graphic (self-inserting) ! 524: characters, it can be thought of as canceling the last character typed. ! 525: ! 526: When your mistake is longer than a couple of characters, it might be more ! 527: convenient to use `M-DEL' or `C-x DEL'. `M-DEL' kills back to the start of ! 528: the last word, and `C-x DEL' kills back to the start of the last sentence. ! 529: `C-x DEL' is particularly useful when you are thinking of what to write as ! 530: you type it, in case you change your mind about phrasing. `M-DEL' and `C-x ! 531: DEL' save the killed text for `C-y' and `M-y' to retrieve. *Note ! 532: Yanking::. ! 533: ! 534: `M-DEL' is often useful even when you have typed only a few ! 535: characters wrong, if you know you are confused in your typing and aren't ! 536: sure exactly what you typed. At such a time, you cannot correct with ! 537: DEL except by looking at the screen to see what you did. It requires ! 538: less thought to kill the whole word and start over again. ! 539: ! 540: ! 541: File: emacs Node: Transpose, Prev: Kill Errors, Up: Fixit, Next: Fixing Case ! 542: ! 543: Transposing Text ! 544: ================ ! 545: ! 546: `C-t' ! 547: Transpose two characters (`transpose-chars'). ! 548: `M-t' ! 549: Transpose two words (`transpose-words'). ! 550: `C-M-t' ! 551: Transpose two balanced expressions (`transpose-sexps'). ! 552: `C-x C-t' ! 553: Transpose two lines (`transpose-lines'). ! 554: ! 555: The common error of transposing two characters can be fixed, when they ! 556: are adjacent, with the `C-t' command (`transpose-chars'). Normally, ! 557: `C-t' transposes the two characters on either side of point. When ! 558: given at the end of a line, rather than transposing the last character of ! 559: the line with the newline, which would be useless, `C-t' transposes the ! 560: last two characters on the line. So, if you catch your transposition error ! 561: right away, you can fix it with just a `C-t'. If you don't catch it so ! 562: fast, you must move the cursor back to between the two transposed ! 563: characters. If you transposed a space with the last character of the word ! 564: before it, the word motion commands are a good way of getting there. ! 565: Otherwise, a reverse search (`C-r') is often the best way. ! 566: *Note Search::. ! 567: ! 568: ! 569: `Meta-t' (`transpose-words') transposes the word before point ! 570: with the word after point. It moves point forward over a word, dragging ! 571: the word preceding or containing point forward as well. The punctuation ! 572: characters between the words do not move. For example, `FOO, BAR' ! 573: transposes into `BAR, FOO' rather than `BAR FOO,'. ! 574: ! 575: `C-M-t' (`transpose-sexps') is a similar command for transposing ! 576: two expressions (*Note Lists::), and `{C-x C-t} (`transpose-lines')'exchanges lines. They work like `M-t' except in determining the ! 577: division of the text into syntactic units. ! 578: ! 579: A numeric argument to a transpose command serves as a repeat count: it ! 580: tells the transpose command to move the character (word, sexp, line) before ! 581: or containing point across several other characters (words, sexps, lines). ! 582: For example, `C-u 3 C-t' moves the character before point forward across ! 583: three other characters. This is equivalent to repeating `C-t' three times. ! 584: `C-u - 4 M-t' moves the word before point backward across four words. `C-u ! 585: - C-M-t' would cancel the effect of plain `C-M-t'. ! 586: ! 587: A numeric argument of zero is assigned a special meaning (because ! 588: otherwise a command with a repeat count of zero would do nothing): to ! 589: transpose the character (word, sexp, line) ending after point with the ! 590: one ending after the mark. ! 591: ! 592: ! 593: File: emacs Node: Fixing Case, Prev: Transpose, Up: Fixit, Next: Spelling ! 594: ! 595: Case Conversion ! 596: =============== ! 597: ! 598: `M-- M-l' ! 599: Convert last word to lower case. Note `Meta--' is Meta-minus. ! 600: `M-- M-u' ! 601: Convert last word to all upper case. ! 602: `M-- M-c' ! 603: Convert last word to lower case with capital initial. ! 604: ! 605: A very common error is to type words in the wrong case. Because of this, ! 606: the word case-conversion commands `M-l', `M-u' and `M-c' have a special ! 607: feature when used with a negative argument: they do not move the cursor. ! 608: As soon as you see you have mistyped the last word, you can simply ! 609: case-convert it and go on typing. *Note Case::. ! 610: ! 611: ! 612: File: emacs Node: Spelling, Prev: Fixing Case, Up: Fixit ! 613: ! 614: Checking and Correcting Spelling ! 615: ================================ ! 616: ! 617: `M-$' ! 618: Check and correct spelling of word (`spell-word'). ! 619: `M-x spell-buffer' ! 620: Check and correct spelling of each word in the buffer. ! 621: `M-x spell-region' ! 622: Check and correct spelling of each word in the region. ! 623: `M-x spell-string' ! 624: Check spelling of specified word. ! 625: ! 626: To check the spelling of the word before point, and optionally correct it ! 627: as well, use the command `M-$' (`spell-word'). This command runs ! 628: an inferior process containing the `spell' program to see whether the ! 629: word is correct English. If it is not, it asks you to edit the word (in ! 630: the minibuffer) into a corrected spelling, and then does a `query-replace' ! 631: to substitute the corrected spelling for the old one throughout the buffer. ! 632: ! 633: If you exit the minibuffer without altering the original spelling, it ! 634: means you do not want to do anything to that word. Then the `query-replace' ! 635: is not done. ! 636: ! 637: `M-x spell-buffer' checks each word in the buffer the same way that ! 638: `spell-word' does, doing a `query-replace' if appropriate for every ! 639: incorrect word. ! 640: ! 641: `M-x spell-region' is similar but operates only on the region, not ! 642: the entire buffer. ! 643: ! 644: `M-x spell-string' reads a string as an argument and checks whether ! 645: that is a correctly spelled English word. It prints in the echo area a ! 646: message giving the answer. ! 647: ! 648: ! 649: File: emacs Node: Files, Prev: Fixit, Up: Top, Next: Buffers ! 650: ! 651: File Handling ! 652: ************* ! 653: ! 654: The basic unit of stored data in Unix is the "file". To edit a file, ! 655: you must tell Emacs to examine the file and prepare a buffer containing a ! 656: copy of the file's text. This is called "visiting" the file. Editing ! 657: commands apply directly to text in the buffer; that is, to the copy inside ! 658: Emacs. Your changes appear in the file itself only when you "save" the ! 659: buffer back into the file. ! 660: ! 661: In addition to visiting and saving files, Emacs can delete, copy, rename, ! 662: and append to files, and operate on file directories. ! 663: ! 664: * Menu: ! 665: ! 666: * File Names:: How to type and edit file name arguments. ! 667: * Visiting:: Visiting a file prepares Emacs to edit the file. ! 668: * Saving:: Saving makes your changes permanent. ! 669: * Reverting:: Reverting cancels all the changes not saved. ! 670: * Auto Save:: Auto Save periodically protects against loss of data. ! 671: * ListDir:: Listing the contents of a file directory. ! 672: * Dired:: "Editing" a directory to delete, rename, etc. ! 673: the files in it. ! 674: * Misc File Ops:: Other things you can do on files. ! 675: ! 676: ! 677: File: emacs Node: File Names, Prev: Files, Up: Files, Next: Visiting ! 678: ! 679: File Names ! 680: ========== ! 681: ! 682: Most Emacs commands that operate on a file require you to specify the ! 683: file name. (Saving and reverting are exceptions; the buffer knows which ! 684: file name to use for them.) File names are specified using the minibuffer ! 685: (*Note Minibuffer::). "Completion" is available, to make it easier to ! 686: specify long file names. *Note Completion::. ! 687: ! 688: There is always a "default file name" which will be used if you type ! 689: just RET, entering an empty argument. Normally the default file name ! 690: is the name of the file visited in the current buffer; this makes it easy ! 691: to operate on that file with any of the Emacs file commands. ! 692: ! 693: Each buffer has a default directory, normally the same as the directory ! 694: of the file visited in that buffer. When Emacs reads a file name, if you ! 695: do not specify a directory, the default directory is used. If you specify ! 696: a directory in a relative fashion, with a name that does not start with a ! 697: slash, it is interpreted with respect to the default directory. The ! 698: default directory is kept in the variable `default-directory', which ! 699: has a separate value in every buffer. ! 700: ! 701: For example, if the default file name is `/u/rms/gnu/gnu.tasks' then ! 702: the default directory is `/u/rms/gnu/'. If you type just `foo', ! 703: which does not specify a directory, it is short for `/u/rms/gnu/foo'. ! 704: `../.login' would stand for `/u/rms/.login'. `new/foo' ! 705: would stand for the filename `/u/rms/gnu/new/foo'. ! 706: ! 707: The command `M-x pwd' prints the current buffer's default directory, ! 708: and the command `M-x cd' sets it (to a value read using the ! 709: minibuffer). A buffer's default directory changes only when the `cd' ! 710: command is used. A file-visiting buffer's default directory is initialized ! 711: to the directory of the file that is visited there. If a buffer is made ! 712: randomly with `C-x b', its default directory is copied from that of the ! 713: buffer that was current at the time. ! 714: ! 715: The default directory actually appears in the minibuffer when the ! 716: minibuffer becomes active to read a file name. This serves two purposes: ! 717: it shows you what the default is, so that you can type a relative file name ! 718: and know with certainty what it will mean, and it allows you to edit the ! 719: default to specify a different directory. This insertion of the default ! 720: directory is inhibited if the variable `insert-default-directory' is ! 721: set to `nil'. ! 722: ! 723: Note that it is legitimate to type an absolute file name after you enter ! 724: the minibuffer, ignoring the presence of the default directory name as part ! 725: of the text. The final minibuffer contents may look invalid, but that is ! 726: not so. *Note Minibuffer File::. ! 727: ! 728: `$' in a file name is used to substitute environment variables. For ! 729: example, if you have used the shell command `setenv FOO rms/hacks' to ! 730: set up an environment variable named `FOO', then you can use ! 731: `/u/$FOO/test.c' or `/u/${FOO}/test.c' as an abbreviation for ! 732: `/u/rms/hacks/test.c'. The environment variable name consists of all ! 733: the alphanumeric characters after the `$'; alternatively, it may be ! 734: enclosed in braces after the `$'. Note that the `setenv' command ! 735: affects Emacs only if done before Emacs is started. ! 736: ! 737: To access a file with `$' in its name, type `$$'. This pair ! 738: is converted to a single `$' at the same time as variable substitution ! 739: is performed for single `$'. The Lisp function that performs the ! 740: substitution is called `substitute-in-file-name'. The substitution ! 741: is performed only on filenames read as such using the minibuffer. ! 742: ! 743: ! 744: File: emacs Node: Visiting, Prev: File Names, Up: Files, Next: Saving ! 745: ! 746: Visiting Files ! 747: ============== ! 748: ! 749: `C-x C-f' ! 750: Visit a file (`find-file'). ! 751: `C-x C-v' ! 752: Visit a different file instead of the one visited last ! 753: (`find-alternate-file'). ! 754: `C-x 4 C-f' ! 755: Visit a file, in another window (`find-file-other-window'). Don't ! 756: change this window. ! 757: ! 758: "Visiting" a file means copying its contents into Emacs where you can ! 759: edit them. Emacs makes a new buffer for each file that you visit. We say ! 760: that the buffer is visiting the file that it was created to hold. Emacs ! 761: constructs the buffer name from the file name by throwing away the ! 762: directory, keeping just the name proper. For example, a file named ! 763: `/usr/rms/emacs.tex' would get a buffer named `emacs.tex'. If ! 764: there is already a buffer with that name, a unique name is constructed by ! 765: appending `<2>', `<3>', or so on, using the lowest number that ! 766: makes a name that is not already in use. ! 767: ! 768: Each window's mode line shows the name of the buffer that is being displayed ! 769: in that window, so you can always tell what buffer you are editing. ! 770: ! 771: The changes you make with Emacs are made in the Emacs buffer. They do ! 772: not take effect in the file that you visited, or any place permanent, until ! 773: you "save" the buffer. Saving the buffer means that Emacs writes the ! 774: current contents of the buffer into its visited file. *Note Saving::. ! 775: ! 776: If a buffer contains changes that have not been saved, the buffer is said ! 777: to be "modified". This is important because it implies that some ! 778: changes will be lost if the buffer is not saved. The mode line displays ! 779: two stars near the left margin if the buffer is modified. ! 780: ! 781: To visit a file, use the command `C-x C-f' (`find-file'). Follow ! 782: the command with the name of the file you wish to visit, terminated by a ! 783: RET. ! 784: ! 785: The file name is read using the minibuffer (*Note Minibuffer::), with ! 786: defaulting and completion in the standard manner (*Note File Names::). ! 787: While in the minibuffer, you can abort `C-x C-f' by typing `C-g'. ! 788: ! 789: Your confirmation that `C-x C-f' has completed successfully is the ! 790: appearance of new text on the screen and a new buffer name in the mode ! 791: line. If the specified file does not exist and could not be created, or ! 792: cannot be read, then an error results. The error message is printed in the ! 793: echo area, and includes the file name which Emacs was trying to visit. ! 794: ! 795: If you visit a file that is already in Emacs, `C-x C-f' does not make ! 796: another copy. It selects the existing buffer containing that file. ! 797: However, before doing so, it checks that the file itself has not changed ! 798: since you visited or saved it last. If the file has changed, a warning ! 799: message is printed. *Note Simultaneous Editing: Interlocking. ! 800: ! 801: What if you want to create a file? Just visit it. Emacs prints ! 802: `(New File)' in the echo area, but in other respects behaves as if you ! 803: had visited an existing empty file. If you make any changes and save them, ! 804: the file is created. ! 805: ! 806: If you visit a nonexistent file unintentionally (because you typed the ! 807: wrong file name), use the `C-x C-v' (`find-alternate-file') ! 808: command to visit the file you wanted. `C-x C-v' is similar to `C-x ! 809: C-f', but it kills the current buffer (after first offering to save it if ! 810: it is modified). `C-x C-v' is allowed even if the current buffer ! 811: is not visiting a file. ! 812: ! 813: If the file you specify is actually a directory, Dired is called on that ! 814: directory (*Note Dired::). This can be inhibited by setting the variable ! 815: `find-file-run-dired' to `nil'; then it is an error to try to ! 816: visit a directory. ! 817: ! 818: `C-x 4 f' (`find-file-other-window') is like `C-x C-f' ! 819: except that the buffer containing the specified file is selected in another ! 820: window. The window that was selected before `C-x 4 f' continues to ! 821: show the same buffer it was already showing. If this command is used when ! 822: only one window is being displayed, that window is split in two, with one ! 823: window showing the same before as before, and the other one showing the ! 824: newly requested file. *Note Windows::. ! 825: ! 826: There are two hook variables that allow extensions to modify the ! 827: operation of visiting files. Visiting a file that does not exist runs the ! 828: functions in the list `find-file-not-found-hooks'; the value of this ! 829: variable is expected to be a list of functions, and the functions are ! 830: called one by one until one of them returns non-`nil'. Any visiting ! 831: of a file, whether extant or not, expects `find-file-hooks' to ! 832: contain list of functions and calls them all, one by one. In both cases ! 833: the functions receive no arguments. Visiting a nonexistent file ! 834: runs the `find-file-not-found-hooks' first. ! 835: ! 836: ! 837: File: emacs Node: Saving, Prev: Visiting, Up: Files, Next: Reverting ! 838: ! 839: Saving Files ! 840: ============ ! 841: ! 842: "Saving" a buffer in Emacs means writing its contents back into the file ! 843: that was visited in the buffer. ! 844: ! 845: `C-x C-s' ! 846: Save the current buffer in its visited file (`save-buffer'). ! 847: `C-x s' ! 848: Save any or all buffers in their visited files (`save-some-buffers'). ! 849: `M-~' ! 850: Forget that the current buffer has been changed (`not-modified'). ! 851: `C-x C-w' ! 852: Save the current buffer in a specified file, and record that file as ! 853: the one visited in the buffer (`write-file'). ! 854: `M-x set-visited-file-name' ! 855: Change file the name under which the current buffer will be saved. ! 856: ! 857: When you wish to save the file and make your changes permanent, type ! 858: `C-x C-s' (`save-buffer'). After saving is finished, `C-x C-s' ! 859: prints a message such as ! 860: ! 861: Wrote /u/rms/gnu/gnu.tasks ! 862: ! 863: If the selected buffer is not modified (no changes have been made in it ! 864: since the buffer was created or last saved), saving is not really done, ! 865: because it would have no effect. Instead, `C-x C-s' prints a message ! 866: in the echo area saying ! 867: ! 868: (No changes need to be written) ! 869: ! 870: The command `C-x s' (`save-some-buffers') can save any or all modified ! 871: buffers. First it asks, for each modified buffer, whether to save it. ! 872: These questions should be answered with `y' or `n'. `C-x C-c', ! 873: the key that kills Emacs, invokes `save-some-buffers' and therefore ! 874: asks the same questions. ! 875: ! 876: If you have changed a buffer and do not want the changes to be saved, you ! 877: should take some action to prevent it. Otherwise, each time you use ! 878: `save-some-buffers' you are liable to save it by mistake. One thing ! 879: you can do is type `M-~' (`not-modified'), which clears out the ! 880: indication that the buffer is modified. If you do this, none of the save ! 881: commands will believe that the buffer needs to be saved. (`~' is often ! 882: used as a mathematical symbol for `not'; thus `Meta-~' is `not', metafied.) ! 883: You could also use `set-visited-file-name' (see below) to mark the ! 884: buffer as visiting a different file name, one which is not in use for ! 885: anything important. Alternatively, you can undo all the changes made since ! 886: the file was visited or saved, by reading the text from the file again. ! 887: This is called "reverting". *Note Reverting::. You could also undo all ! 888: the changes by repeating the undo command `C-x u' until you have undone ! 889: all the changes; but this only works if you have not made more changes than ! 890: the undo mechanism can remember. ! 891: ! 892: `M-x set-visited-file-name' alters the name of the file that the ! 893: current buffer is visiting. It reads the new file name using the ! 894: minibuffer. It can be used on a buffer that is not visiting a file, too. ! 895: The buffer's name is changed to correspond to the file it is now visiting ! 896: in the usual fashion (unless the new name is in use already for some other ! 897: buffer; in that case, the buffer name is not changed). ! 898: `set-visited-file-name' does not save the buffer in the newly visited ! 899: file; it just alters the records inside Emacs so that, if you save the ! 900: buffer, it will be saved in that file. It also marks the buffer as ! 901: "modified" so that `C-x C-s' will save. ! 902: ! 903: If you wish to mark the buffer as visiting a different file and save it ! 904: right away, use `C-x C-w' (`write-file'). It is precisely ! 905: equivalent to `set-visited-file-name' followed by `C-x C-s'. ! 906: `C-x C-s' used on a buffer that is not visiting with a file has the ! 907: same effect as `C-x C-w'; that is, it reads a file name, marks the ! 908: buffer as visiting that file, and saves it there. The default file name in ! 909: a buffer that is not visiting a file is made by combining the buffer name ! 910: with the buffer's default directory. ! 911: ! 912: If Emacs is about to save a file and sees that the date of the latest ! 913: version on disk does not match what Emacs last read or wrote, Emacs ! 914: notifies you of this fact, because it probably indicates a problem caused ! 915: by simultaneous editing and requires your immediate attention. ! 916: *Note Simultaneous Editing: Interlocking. ! 917: ! 918: If the variable `require-final-newline' is non-`nil', Emacs ! 919: puts a newline at the end of any file that doesn't already end in one, ! 920: every time a file is saved or written. ! 921: ! 922: You can implement other ways to write files, and other things to be done ! 923: before writing them, using the hook variable `write-file-hooks'. The ! 924: value of this variable should be a list of Lisp functions. When a file is ! 925: to be written, the functions in the list are called, one by one, with no ! 926: arguments. If one of them returns a non-`nil' value, Emacs takes this ! 927: to mean that the file has been written in some suitable fashion; the rest ! 928: of the functions are not called, and normal writing is not done. ! 929: ! 930: * Menu: ! 931: ! 932: * Backup:: How Emacs saves the old version of your file. ! 933: * Interlocking:: How Emacs protects against simultaneous editing ! 934: of one file by two users. ! 935: ! 936: ! 937: File: emacs Node: Backup, Prev: Saving, Up: Saving, Next: Interlocking ! 938: ! 939: Backup Files ! 940: ------------ ! 941: ! 942: Because Unix does not provide version numbers in file names, rewriting a ! 943: file in Unix automatically destroys all record of what the file used to ! 944: contain. Thus, saving a file from Emacs throws away the old contents of ! 945: the file---or it would, except that Emacs carefully copies the old contents ! 946: to another file, called the "backup" file, before actually saving. ! 947: (Provided the variable `make-backup-files' is non-`nil'. ! 948: Backup files are not written if this variable is `nil'). ! 949: ! 950: At your option, Emacs can keep either a single backup file or a series of ! 951: numbered backup files for each file that you edit. ! 952: ! 953: Emacs makes a backup for a file only the first time the file is saved ! 954: from one buffer. No matter how many times you save a file, its backup file ! 955: continues to contain the contents from before the file was visited. ! 956: Normally this means that the backup file contains the contents from before ! 957: the current editing session; however, if you kill the buffer and then visit ! 958: the file again, a new backup file will be made by the next save. ! 959: ! 960: * Menu: ! 961: ! 962: * Names: Backup Names. How backup files are named; ! 963: Choosing single or numbered backup files. ! 964: * Deletion: Backup Deletion. Emacs deletes excess numbered backups. ! 965: * Copying: Backup Copying. Backups can be made by copying or renaming. ! 966: ! 967: ! 968: File: emacs Node: Backup Names, Prev: Backup, Up: Backup, Next: Backup Deletion ! 969: ! 970: Single or Numbered Backups ! 971: .......................... ! 972: ! 973: If you choose to have a single backup file (this is the default), ! 974: the backup file's name is constructed by appending `~' to the ! 975: file name being edited; thus, the backup file for `eval.c' would ! 976: be `eval.c~'. ! 977: ! 978: If you choose to have a series of numbered backup files, backup file ! 979: names are made by appending `.~', the number, and another `~' to ! 980: the original file name. Thus, the backup files of `eval.c' would be ! 981: called `eval.c.~1~', `eval.c.~2~', and so on, through names ! 982: like `eval.c.~259~' and beyond. ! 983: ! 984: If protection stops you from writing backup files under the usual names, ! 985: the backup file is written as `%backup%~' in your home directory. ! 986: Only one such file can exist, so only the most recently made such backup is ! 987: available. ! 988: ! 989: The choice of single backup or numbered backups is controlled by the ! 990: variable `version-control'. Its possible values are ! 991: ! 992: `t' ! 993: Make numbered backups. ! 994: `nil' ! 995: Make numbered backups for files that have numbered backups already. ! 996: Otherwise, make single backups. ! 997: `never' ! 998: Do not in any case make numbered backups; always make single backups. ! 999: ! 1000: `version-control' may be set locally in an individual buffer to ! 1001: control the making of backups for that buffer's file. For example, ! 1002: Rmail mode locally sets `version-control' to `never' to make sure ! 1003: that there is only one backup for an Rmail file. *Note Locals::. ! 1004: ! 1005: ! 1006: File: emacs Node: Backup Deletion, Prev: Backup Names, Up: Backup, Next: Backup Copying ! 1007: ! 1008: Automatic Deletion of Backups ! 1009: ............................. ! 1010: ! 1011: To prevent unlimited consumption of disk space, Emacs can delete numbered ! 1012: backup versions automatically. Generally Emacs keeps the first few backups ! 1013: and the latest few backups, deleting any in between. This happens every ! 1014: time a new backup is made. The two variables that control the deletion are ! 1015: `kept-old-versions' and `kept-new-versions'. Their values are, respectively ! 1016: the number of oldest (lowest-numbered) backups to keep and the number of ! 1017: newest (highest-numbered) ones to keep, each time a new backup is made. ! 1018: Recall that these values are used just after a new backup version is made; ! 1019: that newly made backup is included in the count in `kept-new-versions'. ! 1020: By default, both variables are 2. ! 1021: ! 1022: If `trim-versions-without-asking' is non-`nil', the excess ! 1023: middle versions are deleted without a murmur. If it is `nil', the ! 1024: default, then you are asked whether the excess middle versions should ! 1025: really be deleted. ! 1026: ! 1027: Dired's `.' (Period) command can also be used to delete old versions. ! 1028: *Note Dired::. ! 1029: ! 1030: ! 1031: File: emacs Node: Backup Copying, Prev: Backup Deletion, Up: Backup ! 1032: ! 1033: Copying vs. Renaming ! 1034: .................... ! 1035: ! 1036: Backup files can be made by copying the old file or by renaming it. This ! 1037: makes a difference when the old file has multiple names. If the old file ! 1038: is renamed into the backup file, then the alternate names become names for ! 1039: the backup file. If the old file is copied instead, then the alternate ! 1040: names remain names for the file that you are editing, and the contents ! 1041: accessed by those names will be the new contents. ! 1042: ! 1043: The method of making a backup file may also affect the file's owner ! 1044: and group. If copying is used, these do not change. If renaming is used, ! 1045: you become the file's owner, and the file's group becomes the default ! 1046: (different operating systems have different defaults for the group). ! 1047: ! 1048: Having the owner change is usually a good idea, because then the owner ! 1049: always shows who last edited the file. Also, the owners of the backups ! 1050: show who produced those versions. Occasionally there is a file whose ! 1051: owner should not change; it is a good idea for such files to contain ! 1052: local variable lists to set `backup-by-copying-when-mismatch' for ! 1053: them alone (*Note File Variables::). ! 1054: ! 1055: The choice of renaming or copying is controlled by three variables. ! 1056: Normally, renaming is done. If the variable `backup-by-copying' is ! 1057: non-`nil', copying is used. Otherwise, if the variable ! 1058: `backup-by-copying-when-linked' is non-`nil', then copying is done for ! 1059: files that have multiple names, but renaming may still done when the file ! 1060: being edited has only one name. If the variable ! 1061: `backup-by-copying-when-mismatch' is non-`nil', then copying is done if ! 1062: renaming would cause the file's owner or group to change. ! 1063: ! 1064: ! 1065: File: emacs Node: Interlocking, Prev: Backup, Up: Saving ! 1066: ! 1067: Protection against Simultaneous Editing ! 1068: --------------------------------------- ! 1069: ! 1070: Simultaneous editing occurs when two users visit the same file, both make ! 1071: changes, and then both save them. If nobody were informed that this was ! 1072: happening, whichever user saved first would later find that his changes ! 1073: were lost. On some systems, Emacs notices immediately when the second user ! 1074: starts to change the file, and issues an immediate warning. When this is ! 1075: not possible, or if the second user has gone on to change the file despite ! 1076: the warning, Emacs checks later when the file is saved, and issues a second ! 1077: warning when a user is about to overwrite a file containing another user's ! 1078: changes. If the editing user takes the proper corrective action at this ! 1079: point, he can prevent actual loss of work. ! 1080: ! 1081: When you make the first modification in an Emacs buffer that is visiting ! 1082: a file, Emacs records that you have locked the file. (It does this by ! 1083: writing another file in a directory reserved for this purpose.) The lock ! 1084: is removed when you save the changes. The idea is that the file is locked ! 1085: whenever the buffer is modified. If you begin to modify the buffer while ! 1086: the visited file is locked by someone else, this constitutes a collision, ! 1087: and Emacs asks you what to do. It does this by calling the Lisp function ! 1088: `ask-user-about-lock', which you can redefine for the sake of ! 1089: customization. The standard definition of this function asks you a ! 1090: question and accepts three possible answers: ! 1091: ! 1092: `s' ! 1093: Steal the lock. Whoever was already changing the file loses the lock, ! 1094: and you gain the lock. ! 1095: `p' ! 1096: Proceed. Go ahead and edit the file despite its being locked by someone else. ! 1097: `q' ! 1098: Quit. This causes an error (`file-locked') and the modification you ! 1099: were trying to make in the buffer does not actually take place. ! 1100: ! 1101: Note that locking works on the basis of a file name; if a file has ! 1102: multiple names, Emacs does not realize that the two names are the same file ! 1103: and cannot prevent two user from editing it simultaneously under different ! 1104: names. However, basing locking on names means that Emacs can interlock the ! 1105: editing of new files that will not really exist until they are saved. ! 1106: ! 1107: Some systems are not configured to allow Emacs to make locks. On ! 1108: these systems, Emacs cannot detect trouble in advance, but it still can ! 1109: detect it in time to prevent you from overwriting someone else's changes. ! 1110: ! 1111: Every time Emacs saves a buffer, it first checks the last-modification ! 1112: date of the existing file on disk to see that it has not changed since the ! 1113: file was last visited or saved. If the date does not match, it implies ! 1114: that changes were made in the file in some other way, and these changes are ! 1115: about to be lost if Emacs actually does save. To prevent this, Emacs ! 1116: prints a warning message and asks for confirmation before saving. ! 1117: Occasionally you will know why the file was changed and know that it does ! 1118: not matter; then you can answer `yes' and proceed. Otherwise, you should ! 1119: cancel the save with `C-g' and investigate the situation. ! 1120: ! 1121: The first thing you should do when notified that simultaneous editing has ! 1122: already taken place is to list the directory with `C-u C-x C-d' (*Note ! 1123: Directory Listing: ListDir.). This will show the file's current author. ! 1124: You should attempt to contact him to warn him not to continue editing. ! 1125: Often the next step is to save the contents of your Emacs buffer under a ! 1126: different name, and use `diff' to compare the two files. ! 1127: ! 1128: Simultaneous editing checks are also made when you visit with `C-x ! 1129: C-f' a file that is already visited and when you start to modify a file. ! 1130: This is not strictly necessary, but it can cause you to find out about the ! 1131: problem earlier, when perhaps correction takes less work. ! 1132: ! 1133:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.