|
|
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: Concepts of VC, Next: Editing with VC, Up: Version Control
27:
28: Concepts of Version Control
29: ---------------------------
30:
31: When a file is under version control, we also say that it is
32: "registered" in the version control system. Each registered file has a
33: corresponding "master file" which represents the file's present state
34: plus its change history, so that you can reconstruct from it either the
35: current version or any specified earlier version. Usually the master
36: file also records a change comment for each version.
37:
38: The file that is maintained under version control is sometimes called
39: the "work file" corresponding to its master file.
40:
41: To examine a file, you "check it out". This extracts a version of
42: the file (typically, the most recent) from the master. If you want to
43: edit the file, you must check it out "locked". Only one user can do
44: this at a time for any given source file. When you are done with your
45: editing, you must "check in" the new version. This records the new
46: version in the master file, and unlocks the source file so that other
47: people can lock it and thus modify it.
48:
49: These are the basic operations of version control. Checking in and
50: checking out both use the single Emacs command `C-x C-q'
51: (`vc-toggle-read-only').
52:
53:
54: File: emacs, Node: Editing with VC, Next: Variables for Check-in/out, Prev: Concepts of VC, Up: Version Control
55:
56: Editing with Version Control
57: ----------------------------
58:
59: When you visit a file that is maintained using version control, the
60: mode line displays `RCS' or `SCCS' to inform you that version control
61: is in use, and also (in case you care) which low-level system the file
62: is actually stored in. Normally, such a source file is read-only, and
63: the mode line indicates this with `%%'.)
64:
65: These are the commands that you use to edit a file maintained with
66: version control:
67:
68: `C-x C-q'
69: Check the visited file in or out.
70:
71: `C-x v u'
72: Revert the buffer and the file to the last checked in version.
73:
74: `C-x v c'
75: Remove the last-entered change from the master for the visited
76: file. This undoes your last check-in.
77:
78: `C-x v i'
79: Register the visited file in version control.
80:
81: (`C-x v' is the prefix key for version control commands; all of these
82: commands except for `C-x C-q' start with `C-x v'.)
83:
84: If you want to edit the file, type `C-x C-q'
85: (`vc-toggle-read-only'). This "checks out" and locks the file, so that
86: you can edit it. The file is writable after check-out, but only for
87: you, not for anyone else.
88:
89: Emacs does not save backup files for source files that are maintained
90: with version control. If you want to make backup files despite version
91: control, set the variable `vc-make-backups' to a non-`nil' value.
92:
93: When you are finished editing the file, type `C-x C-q' again. When
94: used on a file that is checked out, this command checks the file in.
95: But check-in does not start immediately; first, you must enter a "log
96: entry"--a description of the changes in the new version. `C-x C-q' pops
97: up a buffer for you to enter this in. When you are finished typing in
98: the log entry, type `C-c C-c' to terminate it; this is when actual
99: check-in takes place.
100:
101: Once you have checked in your changes, the file is unlocked, so that
102: other users can lock it and modify it.
103:
104: Normally the work file exists all the time, whether it is locked or
105: not. If you set `vc-keep-workfiles' to `nil', then checking in a new
106: version with `C-x C-q' deletes the work file; but any attempt to visit
107: the file with Emacs creates it again.
108:
109: Actually, it is not impossible to lock a file that someone else has
110: locked. If you try to check out a file that is locked, `C-x C-q' asks
111: you whether you want to "steal the lock." If you say yes, the file
112: becomes locked by you, but a message is sent to the person who had
113: formerly locked the file, to inform him or her of what has happened.
114:
115: If you want to discard your current set of changes and revert to the
116: last version checked in, use `C-x v u' (`vc-revert-buffer'). This
117: cancels your last check-out, leaving the file unlocked. If you want to
118: make a different set of changes, you must first check the file out
119: again. `C-x v u' requies confirmation, unless it sees that you haven't
120: made any changes since the last checked-in version.
121:
122: `C-x v u' is also the command to use if you lock a file and then
123: don't actually change it.
124:
125: You can even cancel a change after checking it in, with `C-x v c'
126: (`vc-cancel-version'). Normally, `C-x v c' reverts your workfile and
127: buffer to the previous version (the one that precedes the version that
128: is deleted), but you can prevent the reversion by giving the command a
129: prefix argument. Then the buffer does not change.
130:
131: This command with a prefix argument is useful when you have checked
132: in a change and then discover a trivial error in it; you can cancel the
133: erroneous check-in, fix the error, and repeat the check-in.
134:
135: Be careful when invoking `C-x v c', as it is easy to throw away a
136: lot of work with it. To help you be careful, this command always asks
137: for confirmation with `yes'.
138:
139: You can register the visited file for version control using
140: `C-x v i' (`vc-register'). This uses RCS if RCS is installed on your
141: system; otherwise, it uses SCCS.
142:
143: By default, the initial version number is 1.1. If you want to use a
144: different number, give `C-x v i' a prefix argument; then it reads the
145: initial version number using the minibuffer.
146:
147: After `C-x v i', the file is unlocked and read-only. Type `C-x C-q'
148: if you wish to edit it.
149:
150: If `vc-initial-comment' is non-`nil', `C-x v i' reads an initial
151: comment (much like a log entry) to describe the purpose of this source
152: file.
153:
154:
155: File: emacs, Node: Variables for Check-in/out, Next: Comparing Versions, Prev: Editing with VC, Up: Version Control
156:
157: Variables Affecting Check-in and Check-out
158: ------------------------------------------
159:
160: If `vc-suppress-confirm' is non-`nil', then `C-x C-q' and `C-x v i'
161: can save the current buffer without asking, and `C-x v u' also operates
162: without asking for confirmation. (This variable does not affect `C-x v
163: c'; that is so drastic that it should always ask for confirmation.)
164:
165: VC mode does much of its work by running the shell commands for RCS
166: and SCCS. If `vc-command-messages' is non-`nil', VC displays messages
167: to indicate which shell commands it runs, and additional messages when
168: the commands finish.
169:
170: Normally, VC assumes that it can deduce the locked/unlocked state of
171: files by looking at the file permissions of the work file; this is
172: fast. However, if the `RCS' or `SCCS' subdirectory is actually a
173: symbolic link, then VC does not trust the file permissions to reflect
174: this status.
175:
176: You can specify the criterion for whether to trust the file
177: permissions by setting the variable `vc-mistrust-permissions'. Its
178: value may be `t' (always mistrust the file permissions and check the
179: master file), `nil' (always trust the file permissions), or a function
180: of one argument which makes the decision. The argument is the directory
181: name of the `RCS' or `SCCS' subdirectory. A non-`nil' value from the
182: function says to mistrust the file permissions.
183:
184: If you find that the file permissions of work files are changed
185: erroneously, then you can set `vc-mistrust-permissions' to `t' so that
186: VC always checks the master file.
187:
188:
189: File: emacs, Node: Log Entries, Next: Change Logs and VC, Prev: Snapshots, Up: Version Control
190:
191: Log Entries
192: -----------
193:
194: When you're editing an initial or change comment for inclusion in a
195: master file, finish your entry by typing `C-c C-c'.
196:
197: `C-c C-c'
198: Finish the comment edit normally (`vc-finish-logentry'). This
199: finishes check-in.
200:
201: To abort check-in, just don't type `C-c C-c' in that buffer. You
202: can switch buffers and do other editing. As long as you don't try to
203: check in another file, the comment you were editing remains in its
204: buffer, and you can go back to that buffer at any time to complete the
205: check-in.
206:
207: If you change several source files for the same reason, it is often
208: convenient to specify the same log entry for many of the files. To do
209: this, use the history of previous log entries. The commands `M-n',
210: `M-p', `M-s' and `M-r' for doing this work just like the minibuffer
211: history commands (except that they don't use the minibuffer).
212:
213: The history of previous log entries is actually stored in previous
214: pages of the log entry editing buffer; they are normally hidden by
215: narrowing.
216:
217: Each time you check in a file, the log entry buffer is put into VC
218: Log mode, which involves running two hook variables: `text-mode-hook'
219: and `vc-log-mode-hook'.
220:
221:
222: File: emacs, Node: Change Logs and VC, Next: Version Headers, Prev: Log Entries, Up: Version Control
223:
224: Change Logs and VC
225: ------------------
226:
227: Emacs users often record brief summaries of program changes in a file
228: called `ChangeLog', which is kept in the same directory as the source
229: files, and is usually meant to be distributed along with the source
230: files. You can maintain `ChangeLog' from the version control logs with
231: the following command.
232:
233: `C-x v a'
234: Visit the current directory's change log file and create new
235: entries for versions checked in since the most recent entry in the
236: change log file (`vc-update-change-log').
237:
238: This command works with RCS only; it does not work with SCCS.
239:
240: For example, suppose the first line of `ChangeLog' is dated 10 April
241: 1992, and suppose the only check-in since then was by Nathaniel
242: Bowditch to `rcs2log' on 8 May 1992 with log text `Ignore log messages
243: that start with `#'.'. Then `C-x v a' visits `ChangeLog' and inserts
244: text like this:
245:
246: Fri May 8 21:45:00 1992 Nathaniel Bowditch ([email protected])
247:
248: * rcs2log: Ignore log messages that start with `#'.
249:
250: You can then further edit as you wish.
251:
252: A log entry whose text begins with `#' is not copied to `ChangeLog'.
253: For example, if you merely fix some misspellings in comments, you can
254: log the change with an entry beginning with `#' to avoid putting such
255: trivia into `ChangeLog'.
256:
257: When `C-x v a' adds several change log entries at once, it groups
258: related log entries together if they all are checked in by the same
259: author at nearly the same time. If the log entries for several such
260: files all have the same text, it coalesces them into a single entry.
261: For example, suppose the most recent check-ins have the following log
262: entries:
263:
264: For `vc.texinfo':
265: Fix expansion typos.
266: For `vc.el':
267: Don't call expand-file-name.
268: For `vc-hooks.el':
269: Don't call expand-file-name.
270:
271: They appear like this in `ChangeLog':
272:
273: Wed Apr 1 08:57:59 1992 Nathaniel Bowditch ([email protected])
274:
275: * vc.texinfo: Fix expansion typos.
276:
277: * vc.el, vc-hooks.el: Don't call expand-file-name.
278:
279: Normally, `C-x v a' separates log entries by a blank line, but you
280: can mark several related log entries to be clumped together (without an
281: intervening blank line) by starting the text of each related log entry
282: with a label of the form `{CLUMPNAME} '. The label itself is not
283: copied to `ChangeLog'. For example, suppose the log entries are:
284:
285: For `vc.texinfo':
286: {expand} Fix expansion typos.
287: For `vc.el':
288: {expand} Don't call expand-file-name.
289: For `vc-hooks.el':
290: {expand} Don't call expand-file-name.
291:
292: Then the text in `ChangeLog' looks like this:
293:
294: Wed Apr 1 08:57:59 1992 Nathaniel Bowditch ([email protected])
295:
296: * vc.texinfo: Fix expansion typos.
297: * vc.el, vc-hooks.el: Don't call expand-file-name.
298:
299: Normally, the log entry for file `foo' is displayed as `* foo: TEXT
300: OF LOG ENTRY'. But by convention, the `:' after `foo' is omitted if
301: the text of the log entry starts with `(FUNCTIONNAME): '. For example,
302: if the log entry for `vc.el' is `(vc-do-command): Check call-process
303: status.', then the text in `ChangeLog' looks like this:
304:
305: Wed May 6 10:53:00 1992 Nathaniel Bowditch ([email protected])
306:
307: * vc.el (vc-do-command): Check call-process status.
308:
309:
310: File: emacs, Node: Comparing Versions, Next: VC Status, Prev: Variables for Check-in/out, Up: Version Control
311:
312: Comparing Versions
313: ------------------
314:
315: To compare two versions of a file, use `C-x v =' (`vc-diff').
316:
317: Plain `C-x v =' compares the current buffer contents (saving them in
318: the file if necessary) with the last checked-in version of the file.
319: With a prefix argument, `C-x v =' reads a filename and two version
320: numbers, and compares those versions of the file you specify.
321:
322: If you supply a directory name instead of the name of a work file,
323: this command compares the two specified versions of all registered files
324: in that directory and its subdirectories. You can also specify a
325: snapshot name (*note Snapshots::.) instead of one or both version
326: numbers.
327:
328: You can specify a checked-in version by its number; you can specify
329: the most recent checked-in version with `-'; and you can specify the
330: current buffer contents with `+'. Thus, you can compare two checked-in
331: versions, or compare a checked-in version with the text you are editing.
332:
333: This command works by running the `diff' utility, getting the
334: options from the variable `diff-switches'. It displays the output in a
335: special buffer in another window.
336:
337:
338: File: emacs, Node: VC Status, Next: Renaming and VC, Prev: Comparing Versions, Up: Version Control
339:
340: VC Status Commands
341: ------------------
342:
343: To get the detailed version control status of one file, type `C-x v
344: l' (`vc-print-log'). It displays the history of changes to the current
345: file, including the text of the log entries. The output appears in a
346: separate window.
347:
348: When you are working on a large program, it's often useful to find
349: all the files that are currently locked, or all the files maintained in
350: version control at all. You can do so using these commands, both of
351: which operate on the branch of the file system starting at the current
352: directory.
353:
354: You can use `C-x v d' (`vc-directory') to show all the locked files
355: in or beneath the current directory. This includes all files that are
356: locked by any user.
357:
358: With a prefix argument, `C-x v d' shows all the version control
359: activity in the current directory--it lists all files in or beneath the
360: current directory that are maintained with version control.
361:
362:
363: File: emacs, Node: Renaming and VC, Next: Snapshots, Prev: VC Status, Up: Version Control
364:
365: Renaming VC Work Files and Master Files
366: ---------------------------------------
367:
368: When you rename a registered file, you must also rename its master
369: file correspondingly to get proper results. Use `vc-rename-file' to
370: rename the source file as you specify, and rename its master file
371: accordingly. It also updates any snapshots (*note Snapshots::.) that
372: mention the file, so that they use the new name; despite this, the
373: snapshot thus modified may not completely work (*note Snapshot
374: Caveats::.).
375:
376: You cannot use `vc-rename-file' on a file that is locked by someone
377: else.
378:
379: `vc-rename-file' is not bound to a key because it's not likely to be
380: used frequently.
381:
382:
383: File: emacs, Node: Snapshots, Next: Log Entries, Prev: Renaming and VC, Up: Version Control
384:
385: Snapshots
386: ---------
387:
388: A "snapshot" is a named set of file versions (one for each
389: registered file) that you can treat as a unit. One important kind of
390: snapshot is a "release", a (theoretically) stable version of the system
391: that is ready for distribution to users.
392:
393: * Menu:
394:
395: * Making Snapshots:: The snapshot facilities.
396: * Snapshot Caveats:: Things to be careful of, when using snapshots.
397:
398:
399: File: emacs, Node: Making Snapshots, Next: Snapshot Caveats, Up: Snapshots
400:
401: Making and Using Snapshots
402: ..........................
403:
404: There are two basic commands for snapshots; one makes a snapshot
405: with a given name, the other retrieves a named snapshot.
406:
407: `C-x v s NAME RET'
408: Define the last saved versions of every registered file in or
409: under the current directory as a snapshot named NAME
410: (`vc-create-snapshot').
411:
412: `C-x v r NAME RET'
413: Check out all registered files at or below the current directory
414: level using whatever versions correspond to the snapshot NAME
415: (`vc-retrieve-snapshot').
416:
417: This function reports an error if any files are locked at or below
418: the current directory, without changing anything; this is to avoid
419: overwriting work in progress.
420:
421: You shouldn't need to use `vc-retrieve-snapshot' very often; you can
422: get difference reports between two snapshots without retrieving either
423: one, using `C-x =' (*note Comparing Versions::.). Thus, retrieving a
424: snapshot is only necessary if you need to study or compile portions of
425: the snapshot.
426:
427: A snapshot uses a very small amount of resources--just enough to
428: record the list of file names and which version belongs to the
429: snapshot. Thus, you need not hesitate to create snapshots whenever
430: they are useful.
431:
432: You can give a snapshot name as an argument to `C-x v =' (*note
433: Comparing Versions::.). Thus, you can use it to compare a snapshot
434: against the current files, or two snapshots against each other, or a
435: snapshot against a named version.
436:
437:
438: File: emacs, Node: Snapshot Caveats, Prev: Making Snapshots, Up: Snapshots
439:
440: Snapshot Caveats
441: ................
442:
443: VC's snapshot facilities are modeled on RCS's named-configuration
444: support. They use RCS's native facilities for this, so under VC
445: snapshots made using RCS are visible even when you bypass VC.
446:
447: For SCCS, VC implements snapshots itself. The files it uses contain
448: name/file/version-number triples. These snapshots are visible only
449: through VC.
450:
451: File renaming and deletion can create some difficulties with
452: snapshots. This is not a VC-specific problem, but a general design
453: issue in version control systems that no one has solved very well yet.
454:
455: If you rename a registered file, you need to rename its master along
456: with it (the function `vc-rename-file' does this automatically). If you
457: are using SCCS, you must also update the records of the snapshot, to
458: mention the file by its new name (`vc-rename-file' does this, too).
459: This makes the snapshot remain valid for retrieval, but it does not
460: solve all problems.
461:
462: For example, some of the files in the program probably refer to
463: others by name. At the very least, the makefile probably mentions the
464: file that you renamed. If you retrieve an old snapshot, the renamed
465: file is retrieved under its new name, which is not the name that the
466: makefile expects. So the program won't really work.
467:
468: If you use snapshots, don't rename either work files or master files
469: except by means of `vc-rename-file'. It knows how to update snapshots
470: so that you can still retrieve them. An old snapshot that refers to a
471: master file that no longer exists under the recorded name is invalid;
472: VC can no longer retrieve it. It would be beyond the scope of this
473: manual to explain enough about RCS and SCCS to teach the reader how to
474: update the snapshots by hand.
475:
476:
477: File: emacs, Node: Version Headers, Prev: Change Logs and VC, Up: Version Control
478:
479: Inserting Version Control Headers
480: ---------------------------------
481:
482: Sometimes it is convenient to put version identification strings
483: directly into working files. Certain special strings called "version
484: headers" are replaced in each successive version by the number of that
485: version.
486:
487: You can use the `C-x v h' command (`vc-insert-headers') to insert a
488: suitable header string.
489:
490: `C-x v h'
491: Insert headers in a file for use with your version-control system.
492:
493: The default header string is `$ld$' for RCS and `%W%' for SCCS. You
494: can specify other headers to insert by setting the variable
495: `vc-header-string'. Its value (if non-`nil') should be the string to
496: be inserted. You can also specify a list of strings; then each string
497: in the list is inserted as a separate header on a line of its own. (It
498: is often important to use "superfluous" backslashes when writing a Lisp
499: string constant for this use, to prevent the string in the constant
500: from being interpreted as a header itself if the Emacs Lisp file
501: containing it is maintained with version control.)
502:
503: Each header is inserted surrounded by tabs, inside comment
504: delimiters, on a new line at the start of the buffer. Normally the
505: ordinary comment start and comment end strings of the current mode are
506: used, but for certain modes, there are special comment delimiters for
507: this purpose; the variable `vc-comment-alist' specifies them. Each
508: element of this list has the form `(MODE STARTER ENDER)'.
509:
510: `vc-static-header-alist' is consulted to add further strings based
511: on the name of the buffer. Its value should be a list of dotted pairs;
512: the CAR of each pair is a regular expression that should match the
513: buffer name, and the CDR is the format to use on each header. A string
514: is inserted for each file name pattern that matches the buffer name,
515: and for each header taken from `vc-header-string'. The default value
516: for `vc-static-header-alist' is:
517:
518: (("\\.c$" .
519: "\n#ifndef lint\nstatic char vcid[] = \"\%s\";\n\
520: #endif /* lint */\n"))
521:
522: which specifies insertion of a string of this form:
523:
524:
525: #ifndef lint
526: static char vcid[] = "HEADER-STRING";
527: #endif /* lint */
528:
529:
530: File: emacs, Node: Emerge, Next: Debuggers, Prev: Version Control, Up: Version 19
531:
532: Emerge
533: ======
534:
535: It's not unusual for programmers to get their signals crossed and
536: modify the same program in two different directions. To recover from
537: this confusion, you need to merge the two versions. Emerge makes this
538: easier.
539:
540: * Menu:
541:
542: * Overview of Emerge::
543: * Submodes of Emerge::
544: * State of Difference::
545: * Merge Commands::
546: * Exiting Emerge::
547: * Combining in Emerge::
548: * Fine Points of Emerge::
549:
550:
551: File: emacs, Node: Overview of Emerge, Next: Submodes of Emerge, Up: Emerge
552:
553: Overview of Emerge
554: ------------------
555:
556: To start Emerge, run one of these four commands:
557:
558: `M-x emerge-files'
559: Merge two specified files.
560:
561: `M-x emerge-files-with-ancestor'
562: Merge two specified files, with reference to a common ancestor.
563:
564: `M-x emerge-buffers'
565: Merge two buffers (the currently accessible portions).
566:
567: `M-x emerge-buffers-with-ancestor'
568: Merge two buffers (the currently accessible portions) with
569: reference to a common ancestor in another buffer.
570:
571: The Emerge commands compare two texts, and display the results in
572: three buffers: one for each input text (the "A buffer" and the "B
573: buffer"), and one (the "merge buffer") where merging takes place. The
574: merge buffer does not show just the differences. Rather, it shows you
575: the full text, but wherever the input texts differ, you can choose
576: which one of them to include in the merge buffer.
577:
578: If a common ancestor version is available, from which the two texts
579: to be merged were both derived, Emerge can use it to guess which
580: alternative is right. Wherever one current version agrees with the
581: ancestor, Emerge presumes that the other current version is a deliberate
582: change which should be kept in the merged version. Use the
583: "with-ancestor" commands if you want to specify a common ancestor text.
584: These commands read three file or buffer names--variant A, variant B,
585: and the common ancestor.
586:
587: After the comparison is done and the buffers are prepared, the actual
588: merging starts. You control the merging interactively by editing the
589: merge buffer. The merge buffer shows you a full merged text, not just
590: differences. For each point where the input texts differ, you can
591: choose which one of them to include in the merge buffer.
592:
593: The merge buffer has a special major mode, Emerge mode, with commands
594: for making these choices. But you can also edit the buffer with
595: ordinary Emacs commands.
596:
597: At any given time, the attention of Emerge is focused on one
598: particular difference, called the "selected" difference. This
599: difference is marked off in the three buffers by
600:
601: vvvvvvvvvvvvvvvvvvvv
602:
603: above and
604:
605: ^^^^^^^^^^^^^^^^^^^^
606:
607: below. Emerge numbers all the differences sequentially and the mode
608: line always shows the number of the selected difference.
609:
610: Normally, the merge buffer starts out with the A version of the text.
611: But when the A version of a part of the buffer agrees with the common
612: ancestor, then the B version is preferred for that part.
613:
614: Normally, Emerge stores the merged output in place of the first input
615: text (the A file or buffer). If you give a prefix argument to
616: `emerge-files' or `emerge-files-with-ancestor', it reads the name of
617: the output file using the minibuffer. (This is the last file name
618: those commands read.)
619:
620: If you abort Emerge with `C-u q', the output is not saved.
621:
622:
623: File: emacs, Node: Submodes of Emerge, Next: State of Difference, Prev: Overview of Emerge, Up: Emerge
624:
625: Submodes of Emerge
626: ------------------
627:
628: You can choose between two modes for giving merge commands: Fast mode
629: and Edit mode. In Fast mode, basic Emerge commands are single
630: characters, but ordinary Emacs commands are disabled. This is
631: convenient if you use only Emerge commands.
632:
633: In Edit mode, all Emerge commands start with the prefix character
634: `C-c', and the normal Emacs commands are also available. This allows
635: editing the merge buffer, but slows down Emerge operations.
636:
637: Use `e' to switch to Edit mode, and `f' to switch to Fast mode. The
638: mode line indicates Edit and Fast modes with `E' and `F'.
639:
640: Emerge has two additional submodes that affect how particular merge
641: commands work: Auto Advance mode and Skip Prefers mode.
642:
643: If Auto Advance mode is in effect, the `a' and `b' commands advance
644: to the next difference. This lets you go through the merge faster
645: doing ordinary things. The mode line indicates Auto Advance mode with
646: `A'.
647:
648: If Skip Prefers mode is in effect, the `n' and `p' commands skip
649: over differences in states prefer-A and prefer-B. Thus you will only
650: see differences for which neither version is presumed "correct". The
651: mode line indicates Skip Prefers mode with `S'.
652:
653: Use the command `emerge-auto-advance-mode' to set or clear Auto
654: Advance mode. Use `emerge-skip-prefers-mode' to set or clear Skip
655: Prefers mode. A positive argument turns the mode on, a nonpositive
656: argument turns it off, and no argument toggles it.
657:
658:
659: File: emacs, Node: State of Difference, Next: Merge Commands, Prev: Submodes of Emerge, Up: Emerge
660:
661: State of a Difference
662: ---------------------
663:
664: In the merge buffer, a difference is marked `vvvvvvvvvvvvvvvvvvvv'
665: above and `^^^^^^^^^^^^^^^^^^^^' below. Such a difference can have one
666: of seven states:
667:
668: A
669: The difference is showing the A version. The `a' command always
670: produces this state; the mode line indicates it with `A'.
671:
672: B
673: The difference is showing the B version. The `b' command always
674: produces this state; the mode line indicates it with `B'.
675:
676: default-A
677: default-B
678: The difference is showing the A or the B state by default, because
679: you haven't made a choice. All differences start in the default-A
680: state (and thus the merge buffer is a copy of the A buffer),
681: except those for which one alternative is "preferred" (see below).
682:
683: When you select a difference, its state changes from default-A or
684: default-B to plain A or B. Thus, the selected difference never has
685: state default-A or default-B, and these states are never displayed
686: in the mode line.
687:
688: The command `d a' chooses default-A as the default state, and `d
689: b' chooses default-B. This chosen default applies to all
690: differences which you haven't selected and for which no
691: alternative is preferred. If you are moving through the merge
692: sequentially, the differences you haven't selected are those
693: following the selected one. Thus, while moving sequentially, you
694: can effectively make the A version the default for some sections
695: of the merge buffer and the B version the default for others by
696: using `d a' and `d b' at the end of each section.
697:
698: prefer-A
699: prefer-B
700: The difference is showing the A or B state because it is
701: "preferred". This means that you haven't made an explicit choice,
702: but one alternative seems likely to be right because the other
703: alternative agrees with the common ancestor. Thus, where the A
704: buffer agrees with the common ancestor, the B version is
705: preferred, because chances are it is the one that was actually
706: changed.
707:
708: These two states are displayed in the mode line as `A*' and `B*'.
709:
710: combined
711: The difference is showing a combination of the A and B states, as a
712: result of the `x c' or `x C' commands.
713:
714: Once a difference is in this state, the `a' and `b' commands don't
715: do anything to it unless you give them a prefix argument.
716:
717: The mode line displays this state as `comb'.
718:
719:
720: File: emacs, Node: Merge Commands, Next: Exiting Emerge, Prev: State of Difference, Up: Emerge
721:
722: Merge Commands
723: --------------
724:
725: Here are the Merge commands for Fast mode; in Edit mode, precede
726: these with `C-c' and turn all the letters into control characters.
727:
728: `p'
729: Select the previous difference.
730:
731: `n'
732: Select the next difference.
733:
734: `a'
735: Choose the A version of this difference.
736:
737: `b'
738: Choose the B version of this difference.
739:
740: `j'
741: Select a particular difference; specify the sequence number of that
742: difference as a prefix argument.
743:
744: `M-x emerge-select-difference'
745: Select the run of differences containing the current location.
746: You can use this command in the merge buffer or in the A or B
747: buffer.
748:
749: `q'
750: Quit--finish the merge. With an argument, abort the merge.
751:
752: `f'
753: Go into fast mode.
754:
755: `e'
756: Go into edit mode.
757:
758: `l'
759: Recenter (like `C-l') all three windows.
760:
761: `-'
762: Specify part of a prefix numeric argument.
763:
764: `DIGIT'
765: Also specify part of a prefix numeric argument.
766:
767: `d a'
768: Choose the A version as the default from here down in the merge
769: buffer.
770:
771: `d b'
772: Choose the B version as the default from here down in the merge
773: buffer.
774:
775: `c a'
776: Copy the A version of this difference into the kill ring.
777:
778: `c b'
779: Copy the B version of this difference into the kill ring.
780:
781: `i a'
782: Insert the A version of this difference at the point.
783:
784: `i b'
785: Insert the B version of this difference at the point.
786:
787: `m'
788: Put the point and mark around the difference region.
789:
790: `^'
791: Scroll all three windows down (like `M-v').
792:
793: `v'
794: Scroll all three windows up (like `C-v').
795:
796: `<'
797: Scroll all three windows left (like `C-x <').
798:
799: `>'
800: Scroll all three windows right (like `C-x >').
801:
802: `|'
803: Reset horizontal scroll on all three windows.
804:
805: `x 1'
806: Shrink the merge window to one line. (Use `C-u l' to restore it
807: to full size.)
808:
809: `x c'
810: Combine the two versions of this difference.
811:
812: `x f'
813: Show the files/buffers Emerge is operating on in Help window. (Use
814: `C-u l' to restore windows.)
815:
816: `x j'
817: Join this difference with the following one. (`C-u x j' joins this
818: difference with the previous one.)
819:
820: `x s'
821: Split this difference into two differences. Before you use this
822: command, position point in each of the three buffers to the place
823: where you want to split the difference.
824:
825: `x t'
826: Trim identical lines off top and bottom of the difference. Such
827: lines occur when the A and B versions are identical but differ
828: from the ancestor version.
829:
830:
831: File: emacs, Node: Exiting Emerge, Next: Combining in Emerge, Prev: Merge Commands, Up: Emerge
832:
833: Exiting Emerge
834: --------------
835:
836: The `q' (`emerge-quit') command finishes the merge, storing the
837: results into the output file. It restores the A and B buffers to their
838: proper contents, or kills them if they were created by Emerge. It also
839: disables the Emerge commands in the merge buffer, since executing them
840: later could damage the contents of the various buffers.
841:
842: `C-u q' aborts the merge. Aborting means that Emerge does not write
843: the output file.
844:
845: If Emerge was called from another Lisp program, then its return value
846: is `t' or `nil' to indicate success or failure.
847:
848:
849: File: emacs, Node: Combining in Emerge, Next: Fine Points of Emerge, Prev: Exiting Emerge, Up: Emerge
850:
851: Combining the Two Versions
852: --------------------------
853:
854: Sometimes you want to keep *both* alternatives for a particular
855: locus. To do this, use `x c', which edits the merge buffer like this:
856:
857: #ifdef NEW
858: VERSION FROM A FILE
859: #else /* NEW */
860: VERSION FROM B FILE
861: #endif /* NEW */
862:
863: While this example shows C preprocessor conditionals delimiting the
864: two alternative versions, you can specify the strings you want by
865: setting the variable `emerge-combine-template' to a list of three
866: strings. The default setting, which produces the results shown above,
867: looks like this:
868:
869: ("#ifdef NEW\n"
870: "#else /* NEW */\n"
871: "#endif /* NEW */\n")
872:
873:
874: File: emacs, Node: Fine Points of Emerge, Prev: Combining in Emerge, Up: Emerge
875:
876: Fine Points of Emerge
877: ---------------------
878:
879: You can have any number of merges going at once--just don't use any
880: one buffer as input to more than one merge at once, since that will
881: cause the read-only/modified/auto-save status save-and-restore to screw
882: up.
883:
884: Starting Emerge can take a long time because it needs to compare the
885: files. Emacs can't do anything else until `diff' finishes. Perhaps in
886: the future someone will change Emerge to do the comparison in the
887: background when the input files are large--then you could keep on doing
888: other things with Emacs until Emerge gets ready to accept commands.
889:
890: After the merge has been set up, Emerge runs the hooks in
891: `emerge-startup-hook'.
892:
893: During the merge, you musn't try to edit the A and B buffers
894: yourself. Emerge modifies them temporarily, but ultimately puts them
895: back the way they were.
896:
897:
898: File: emacs, Node: Debuggers, Next: Other New Modes, Prev: Emerge, Up: Version 19
899:
900: Running Debuggers Under Emacs
901: =============================
902:
903: The GUD (Grand Unified Debugger) library provides an interface to
904: various symbolic debuggers from within Emacs. We recommend the
905: debugger GDB, which is free software, but you can also run DBX or SDB
906: if you have them.
907:
908: * Menu:
909:
910: * Starting GUD:: How to start a debugger subprocess.
911: * Debugger Operation:: Connection between the debugger and source buffers.
912: * Commands of GUD:: Keybindings for common commands.
913: * GUD Customization:: Defining your own commands for GUD.
914:
915:
916: File: emacs, Node: Starting GUD, Next: Debugger Operation, Up: Debuggers
917:
918: Starting GUD
919: ------------
920:
921: There are three commands for starting a debugger. Each corresponds
922: to a particular debugger program.
923:
924: `M-x gdb RET FILE RET'
925: `M-x dbx RET FILE RET'
926: Run GDB or DBX in a subprocess of Emacs. Both of these commands
927: select the buffer used for input and output to the debugger.
928:
929: `M-x sdb RET FILE RET'
930: Run SDB in a subprocess of Emacs. SDB's messages do not mention
931: file names, so the Emacs interface to SDB depends on having a tags
932: table (*note Tags::.) to find which file each function is in. If
933: you have not visited a tags table or the tags table doesn't list
934: one of the functions, you get a message saying `The sdb support
935: requires a valid tags table to work'. If this happens, generate a
936: valid tags table in the working directory and try again.
937:
938: You can only run one debugger process at a time.
939:
940:
941: File: emacs, Node: Debugger Operation, Next: Commands of GUD, Prev: Starting GUD, Up: Debuggers
942:
943: Debugger Operation
944: ------------------
945:
946: When you run a debugger with GUD, the debugger displays source files
947: via Emacs--Emacs finds the source file and moves point to the line
948: where the program is executing. An arrow (`=>') indicates the current
949: execution line, and it stays put even if you move the cursor.
950:
951: You can start editing the file at any time. The arrow is not part of
952: the file's text; it appears only on the screen. If you do modify a
953: source file, keep in mind that inserting or deleting lines will throw
954: off the arrow's positioning; GUD has no way of figuring out which line
955: corresponded before your changes to the line number in a debugger
956: message. Also, you'll typically have to recompile and restart the
957: program for your changes to be reflected in the debugger's tables.
958:
959: If you wish, you can control your debugger process entirely through
960: the debugger buffer, which uses a variant of Shell mode. All the usual
961: commands for your debugger are available, and you can use the Shell mode
962: history commands to repeat them.
963:
964:
965: File: emacs, Node: Commands of GUD, Next: GUD Customization, Prev: Debugger Operation, Up: Debuggers
966:
967: Commands of GUD
968: ---------------
969:
970: GUD provides a command available in all buffers for setting
971: breakpoints. This command is defined globally because you need to use
972: it in the source files' buffers.
973:
974: `C-x SPC'
975: Set a breakpoint on the line that point is on.
976:
977: The debugger buffer has a number of keybindings for invoking common
978: debugging commands quickly:
979:
980: `C-c C-l'
981: Display in another window the last line referred to in the GUD
982: buffer (that is, the line indicated in the last location message).
983: This runs the command `gud-refresh'.
984:
985: `C-c C-s'
986: Execute a single line of code (`gud-step'). If the code contains
987: a function call, execution stops after entering the called
988: function.
989:
990: `C-c C-n'
991: Execute a single line of code, stepping across entire function
992: calls at full speed (`gud-next').
993:
994: `C-c C-i'
995: Execute a single machine instruction (`gud-stepi').
996:
997: `C-c C-c'
998: Continue execution until the next breakpoint, or other event that
999: would normally stop the program (`gud-cont').
1000:
1001: The above commands are common to all supported debuggers. If you are
1002: using GDB or (some versions of) DBX, these additional commands are
1003: available:
1004:
1005: `C-c <'
1006: Select the next enclosing stack frame (`gud-up'). This is
1007: equivalent to the `up' command.
1008:
1009: `C-c >'
1010: Select the next inner stack frame (`gud-down'). This is
1011: equivalent to the `down' command.
1012:
1013: If you are using GDB, two additional keybindings are available:
1014:
1015: `C-c C-f'
1016: Run the program until the selected stack frame returns (or until it
1017: stops for some other reason).
1018:
1019: `TAB'
1020: Complete the symbol in the buffer before point, using the set of
1021: all symbols known to GDB.
1022:
1023: These commands interpret a prefix argument as a repeat count, when
1024: that makes sense.
1025:
1026: After each command that changes the program counter, GUD displays the
1027: new current source line, and updates the location of the arrow.
1028:
1029:
1030: File: emacs, Node: GUD Customization, Prev: Commands of GUD, Up: Debuggers
1031:
1032: GUD Customization
1033: -----------------
1034:
1035: On startup, GUD executes one of the following hooks:
1036: `gdb-mode-hook', if you are using GDB; `dbx-mode-hook', if you are
1037: using DBX; and `sdb-mode-hook', if you are using SDB. You can use
1038: these hooks to define custom keybindings for the debugger interaction
1039: buffer.
1040:
1041: Here is a convenient way to define a command that sends a particular
1042: command string to the debugger, and set up a key binding for it in the
1043: debugger interaction buffer:
1044:
1045: (gud-def FUNCTION CMDSTRING BINDING DOCSTRING)
1046:
1047: This defines a command named FUNCTION which sends CMDSTRING to the
1048: debugger process, with documentation string DOCSTRING, and binds it to
1049: BINDING in the debugger buffer's mode. (If BINDING is `nil', this
1050: defines the command but does not make a binding for it; you can make a
1051: binding explicitly, perhaps using one of the above hooks.)
1052:
1053: Commands defined with `gud-def' handle prefix arguments by passing
1054: them to the debugger, appended to end of CMDSTRING with a space in
1055: between. (This use of prefix arguments works with GDB and DBX, but not
1056: with SDB.)
1057:
1058: You can also set up commands that you can send to the debugger while
1059: in another buffer, such as a source file. Set the variable
1060: `gud-commands' to a list of strings containing debugger commands you
1061: might want to send.
1062:
1063: `C-x &'
1064: Send a custom command to the debugger process
1065: (`send-gud-command'). Normally, send the CAR of the
1066: `gud-commands' list; a prefix argument specifies which element of
1067: that list to use (counting from 0).
1068:
1069: If the string contains `%s', `C-x &' substitutes a numeric value
1070: found in the buffer at or near point. It looks for decimal,
1071: octal, or hexadecimal numbers, with `0x' allowed. This lets you
1072: define commands to chase pointers whose numeric values have been
1073: displayed.
1074:
1075:
1076: File: emacs, Node: Other New Modes, Next: Key Sequence Changes, Prev: Debuggers, Up: Version 19
1077:
1078: Other New Modes
1079: ===============
1080:
1081: There is now a Perl mode for editing Perl programs and an Icon mode
1082: for editing Icon programs.
1083:
1084: C++ mode is like C mode, except that it understands C++ comment
1085: syntax and certain other differences between C and C++. It also has a
1086: command `fill-c++-comment' which fills a paragraph made of comment
1087: lines. The command `comment-region' is useful in C++ mode for commenting
1088: out several consecutive lines, or removing the commenting out of such
1089: lines.
1090:
1091: WordStar emulation is available--type `M-x wordstar-mode'. For more
1092: information, type `C-h f wordstar-mode RET'.
1093:
1094: The command `C-o' in Buffer Menu mode now displays the current
1095: line's buffer in another window but does not select it. This is like
1096: the existing command `o' which selects the current line's buffer in
1097: another window.
1098:
1099: * Menu:
1100:
1101: * Asm Mode:: A major mode for editing assembler files.
1102: * Edebug Mode:: A new Lisp debugger.
1103: * Editing Binary Files::Hexl mode lets you edit a binary file as numbers.
1104:
1105:
1106: File: emacs, Node: Asm Mode, Next: Edebug Mode, Up: Other New Modes
1107:
1108: Asm Mode
1109: --------
1110:
1111: Asm mode is a new major mode for editing files of assembler code. It
1112: defines these commands:
1113:
1114: `TAB'
1115: `tab-to-tab-stop'.
1116:
1117: `LFD'
1118: Insert a newline and then indent using `tab-to-tab-stop'.
1119:
1120: `:'
1121: Insert a colon and then remove the indentation from before the
1122: label preceding colon. Then do `tab-to-tab-stop'.
1123:
1124: `;'
1125: Insert or align a comment.
1126:
1127:
1128: File: emacs, Node: Edebug Mode, Next: Editing Binary Files, Prev: Asm Mode, Up: Other New Modes
1129:
1130: Edebug Mode
1131: -----------
1132:
1133: Edebug is a new source-level debugger for Emacs Lisp programs.
1134:
1135: To use Edebug, use the command `M-x edebug-defun' to "evaluate" a
1136: function definition in an Emacs Lisp file. We put "evaluate" in
1137: quotation marks because it doesn't just evaluate the function, it also
1138: inserts additional information to support source-level debugging.
1139:
1140: You must also do this:
1141:
1142: (setq debugger 'edebug-debug)
1143:
1144: to cause errors and single-stepping to use Edebug instead of the usual
1145: Emacs Lisp debugger.
1146:
1147: For more information, see `The Emacs Extensions Manual', which
1148: should be included in the Emacs 19 distribution.
1149:
1150:
1151: File: emacs, Node: Editing Binary Files, Prev: Edebug Mode, Up: Other New Modes
1152:
1153: Editing Binary Files
1154: --------------------
1155:
1156: There is a new major mode for editing binary files: Hexl mode. To
1157: use it, use `M-x hexl-find-file' instead of `C-x C-f' to visit the
1158: file. This command converts the file's contents to hexadecimal and lets
1159: you edit the translation. When you save the file, it is converted
1160: automatically back to binary.
1161:
1162: You can also use `M-x hexl-mode' to translate an existing buffer
1163: into hex. This is useful if you visit a file normally and discover it
1164: is a binary file.
1165:
1166: Hexl mode has a few other commands:
1167:
1168: `C-M-d'
1169: Insert a byte with a code typed in decimal.
1170:
1171: `C-M-o'
1172: Insert a byte with a code typed in octal.
1173:
1174: `C-M-x'
1175: Insert a byte with a code typed in hex.
1176:
1177: `C-x ['
1178: Move to the beginning of a 1k-byte "page".
1179:
1180: `C-x ]'
1181: Move to the end of a 1k-byte "page".
1182:
1183: `M-g'
1184: Move to an address specified in hex.
1185:
1186: `M-j'
1187: Move to an address specified in decimal.
1188:
1189: `C-c C-c'
1190: Leave Hexl mode, going back to the major mode this buffer had
1191: before you invoked `hexl-mode'.
1192:
1193:
1194: File: emacs, Node: Key Sequence Changes, Next: Hook Changes, Prev: Other New Modes, Up: Version 19
1195:
1196: Changes in Key Sequences
1197: ========================
1198:
1199: In Emacs 18, a key sequence was a sequence of characters, which
1200: represented keyboard input.
1201:
1202: In Emacs 19, you can still use a sequence of characters as a key
1203: sequence, but you aren't limited to characters. You can also use Lisp
1204: symbols which represent terminal function keys or mouse buttons. If the
1205: function key has a word as its label, then that word is also the name of
1206: the symbol which represents the function key. Other function keys are
1207: assigned Lisp names as follows:
1208:
1209: `kp-add', `kp-decimal', `kp-divide', ...
1210: Keypad keys (to the right of the regular keyboard), with names or
1211: punctuation
1212:
1213: `kp-0', `kp-1', ...
1214: Keypad keys with digits
1215:
1216: `kp-f1', `kp-f2', `kp-f3', `kp-f4'
1217: Keypad PF keys
1218:
1219: `left', `up', `right', `down'
1220: Cursor arrow keys
1221:
1222: A key sequence which contains non-characters must be a vector rather
1223: than a string.
1224:
1225: Thus, to bind function key `f1' to `rmail', write the following:
1226:
1227: (global-set-key [f1] 'rmail)
1228:
1229: (To find the name of a key, type `C-h k' and then the key.)
1230:
1231: To bind the right-arrow key to the command `forward-char', you can
1232: use this expression:
1233:
1234: (global-set-key [right] 'forward-char)
1235:
1236: using the Lisp syntax for a vector containing the symbol `right'.
1237:
1238: And this is how to make `C-x RIGHTARROW' move forward a page:
1239:
1240: (global-set-key [?\C-x right] 'forward-page)
1241:
1242: where `?\C-x' is the Lisp syntax for an integer whose value is the code
1243: for the character `C-x'.
1244:
1245: You can use modifier keys such as CTRL, META and SHIFT with function
1246: keys. To represent these modifiers, prepend the strings `C-', `M-' and
1247: `S-' to the symbol name. Thus, here is how to make `M-RIGHTARROW' move
1248: forward a word:
1249:
1250: (global-set-key [M-right] 'forward-word)
1251:
1252: Emacs uses symbols to designate mouse buttons, too. The ordinary
1253: mouse events in Emacs are "click" events; these happen when you press a
1254: button and release it without moving the mouse. You can also get "drag"
1255: events, when you move the mouse while holding the button down. Drag
1256: events happen when you finally let go of the button.
1257:
1258: The symbols for basic click events are `mouse-1' for the leftmost
1259: button, `mouse-2' for the next, and so on. Here is how you can
1260: redefine the second mouse button to split the current window:
1261:
1262: (global-set-key [mouse-2] 'split-window-vertically)
1263:
1264: The symbols for drag events are similar, but have the prefix `drag-'
1265: before the word `mouse'. For example, dragging the left button
1266: generates a `drag-mouse-1' event.
1267:
1268: You can also request events when the mouse button is pressed down.
1269: These events start with `down-' instead of `drag-'. Such events are
1270: generated only if they have key bindings. When you get a button-down
1271: event, a corresponding click or drag event will always follow.
1272:
1273: The symbols for mouse events also indicate the status of the modifier
1274: keys, with the usual prefixes `C-', `M-' and `S-'. These always follow
1275: `drag-' or `down-'.
1276:
1277: When mouse events occur in special parts of a frame or window, such
1278: as a mode line or a scroll bar, the event symbol shows nothing special.
1279: The information about the special part is implicit in other data (the
1280: screen location of the event). But `read-key-sequence' figures out this
1281: aspect of the event, and encodes it with make-believe prefix keys, all
1282: of which are symbols: `mode-line', `vertical-line',
1283: `horizontal-scrollbar' and `vertical-scrollbar'. Thus, to define the
1284: command for clicking the left button in a mode line, you could use this
1285: key sequence:
1286:
1287: [mode-line mouse-1]
1288:
1289: You are not limited to defining individual function keys or mouse
1290: buttons; these can appear anywhere in a key sequence, just as characters
1291: can. You can even mix together all three kinds of inputs in one key
1292: sequence--but mixing mouse buttons with keyboard inputs is probably not
1293: convenient for actual use.
1294:
1295:
1296: File: emacs, Node: Hook Changes, Prev: Key Sequence Changes, Up: Version 19
1297:
1298: Changes Regarding Hooks
1299: =======================
1300:
1301: A "hook variable" is a variable that exists so that you can store in
1302: it functions for Emacs to call on certain occasions. (The functions
1303: that you put in hook variables are called "hook functions".) Emacs 19
1304: has a new convention for naming hook variables that indicates more
1305: reliably how to use them.
1306:
1307: All the variables whose names end in `-hook' are "normal hooks";
1308: their values are lists of functions to be called with no arguments.
1309: You can use `add-hook' (see below) to install hook functions in these
1310: hooks. We have made all Emacs hooks into normal hooks except when
1311: there is some reason this won't work.
1312:
1313: A few hook-like variables are "abnormal"--they don't use the normal
1314: convention. This is either because the user-supplied functions receive
1315: arguments, or because their return values matter. These variables have
1316: names that end in `-function' (if the value is a single function) or
1317: `-functions' (if the value is a list of functions).
1318:
1319: Thus, you can always tell from the variable's name precisely how to
1320: install a new hook function in the variable. If the name indicates a
1321: normal hook, then you also know how to write your hook function.
1322:
1323: To add a hook function to a normal hook, use `add-hook'. It takes
1324: care of adding a new hook function to any functions already installed in
1325: a given hook. It takes two arguments, the hook symbol and the function
1326: to add. For example,
1327:
1328: (add-hook 'text-mode-hook 'my-text-hook-function)
1329:
1330: is how to arrange to call `my-text-hook-function' when entering Text
1331: mode or related modes. Two new hooks are worth noting here. Expansion
1332: of an abbrev first runs the hook `pre-abbrev-expand-hook'.
1333: `kill-buffer-hook' now runs whenever a buffer is killed.
1334:
1335:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.