Annotation of GNUtools/emacs/info/emacs-14, revision 1.1

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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.