-;; files with their older versions. Ediff can also work with remote and
-;; compressed files. Details are given below.
-
-
-;;; Remarks:
-;; -------
-
-;; 1. Ediff is heavily dependent on the new features of Emacs 19.
-;; It won't run under Emacs 18 at all.
-;; 2. If running XEmacs, Ediff requires at least version 19.9.
-;; 3. The function ediff-revision requires the version of vc.el that comes
-;; with Emacs 19.22 and XEmacs 19.10 and later, or rcs.el version 1.67
-;; or later. See "Version control support", below.
-
-
-;;; Installation and use:
-;; ---------------------
-
-;; The user can invoke Ediff interactively using the following functions:
-;;
-;; ediff-files - compare two files
-;; ediff - alias for ediff-files
-;; ediff-buffers - compare two buffers
-;;
-;; ediff-files3 - compare three files
-;; ediff3 - alias for ediff-files3
-;; ediff-buffers3 - compare three buffers
-;;
-;; ediff-windows - compare windows
-;; ediff-small-regions - compare small regions
-;; ediff-large-regions - compare large regions
-;;
-;; ediff-revision - compare buffer & version
-;;
-;; ediff-patch-file - patch file then compare
-;; epatch - alias for ediff-patch-file
-;; ediff-patch-buffer - patch buffer then compare
-;; epatch-buffer - alias for ediff-patch-buffer
-;;
-;; ediff-merge-files - merge two files
-;; ediff-merge - alias for ediff-merge-files
-;; ediff-merge-files-with-ancestor - same but with ancestor
-;; ediff-merge-with-ancestor - alias for the above
-;; ediff-merge-buffers - merge two buffers
-;; ediff-merge-buffers-with-ancestor - same but with ancestor
-;; ediff-merge-revisions - same but with ancestor
-;; ediff-merge-revisions-with-ancestor - same but with ancestor
-;;
-;;
-;;
-;; To use Ediff, put this in your .emacs file:
-;;
-;; (autoload 'ediff-buffers "ediff" "Visual interface to diff" t)
-;; (autoload 'ediff "ediff" "Visual interface to diff" t)
-;; (autoload 'ediff-files "ediff" "Visual interface to diff" t)
-;; (autoload 'ediff-buffers3 "ediff" "Visual interface to diff" t)
-;; (autoload 'ediff3 "ediff3" "Visual interface to diff" t)
-;; (autoload 'ediff-files3 "ediff" "Visual interface to diff" t)
-;; (autoload 'ediff-merge "ediff" "Visual interface to diff" t)
-;; (autoload 'ediff-merge-files "ediff" "Visual interface to diff" t)
-;; (autoload 'ediff-merge-files-with-ancestor "ediff"
-;; "Visual interface to diff" t)
-;; (autoload 'ediff-merge-with-ancestor "ediff" "Visual interface to diff" t)
-;; (autoload 'ediff-merge-buffers "ediff" "Visual interface to diff" t)
-;; (autoload 'ediff-merge-buffers-with-ancestor "ediff"
-;; "Visual interface to diff" t)
-;; (autoload 'ediff-merge-revisions "ediff" "Visual interface to diff" t)
-;; (autoload 'ediff-merge-revisions-with-ancestor "ediff"
-;; "Visual interface to diff" t)
-;; (autoload 'ediff-windows "ediff" "Visual interface to diff" t)
-;; (autoload 'ediff-small-regions "ediff" "Visual interface to diff" t)
-;; (autoload 'ediff-large-regions "ediff" "Visual interface to diff" t)
-;; (autoload 'epatch "ediff" "Visual interface to patch" t)
-;; (autoload 'ediff-patch-file "ediff" "Visual interface to patch" t)
-;; (autoload 'ediff-patch-buffer "ediff" "Visual interface to patch" t)
-;; (autoload 'epatch-buffer "ediff" "Visual interface to patch" t)
-;; (autoload 'ediff-revision "ediff"
-;; "Interface to diff & version control" t)
-;;
-;;
-;; If you want Ediff to be loaded from the very beginning, you should have
-;;
-;; (require 'ediff)
-;;
-;; in your .emacs file. This way it is also easier to figure out changes
-;; to the default Ediff setting, if such changes become necessary --- see
-;; Customization.
-;;
-;; All the above functions use the diff program to find different
-;; regions. They process diff output and display it to the user in a
-;; convenient form.
-;;
-;; The functions ediff-files, ediff-buffers, ediff-files3, ediff-buffers3
-;; first display the coarse, line-based difference regions, as commonly
-;; found by the diff program.
-;; Since diff may report fairly large chunks of text as being
-;; different even though the difference may be contained in a few words or
-;; even in the white space or line breaks, Ediff will further refine the
-;; regions to indicate which exact words differ. If the only difference is
-;; in the white space and line breaks, Ediff will say so.
-;;
-;; The functions ediff-windows, ediff-small-regions and ediff-large-regions
-;; do comparison on parts of buffers (which must already exist).
-;; Since ediff-windows and ediff-small-regions are intended for relatively
-;; small segments of the buffers, comparison is done on the
-;; word-basis rather than line basis. No refinement is necessary in this
-;; case. This technique is effective only for relatively small
-;; regions (perhaps, up to 100 lines), as these functions have a relatively
-;; slow startup.
-;; To compare large regions, use ediff-large-regions. In this mode, Ediff
-;; displays differences as it would if invoked via ediff-files or
-;; ediff-buffers.
-;;
-;; The functions ediff-patch-file and ediff-patch-buffer apply a patch
-;; to a file or a buffer and then run Ediff on these buffers, displaying
-;; the difference regions.
-;;
-;; Finally, for files under version control, ediff-revisions will compare a
-;; file to one of its versions.
-
-;;; Compilation
-;; -----------
-;;
-;; When you byte-compile Ediff, you will get some warnings about functions
-;; being undefined. These can be safely ignored.
-;;
-
-;;; Customization:
-;; --------------
-
-;; Hooks:
-;; -----
-;; If you don't like the default setting, you can change it through the
-;; various variables and hooks. In particular, the following hooks are
-;; available:
-
-;; ediff-load-hooks
-;; ediff-keymap-setup-hooks
-;; ediff-before-setup-windows-hooks
-;; ediff-after-setup-windows-hooks
-;; ediff-before-setup-control-frame-hooks
-;; ediff-after-setup-control-frame-hooks
-;; ediff-startup-hooks
-;; ediff-select-hooks
-;; ediff-unselect-hooks
-;; ediff-suspend-hooks
-;; ediff-quit-hooks
-;; ediff-prepare-buffer-hooks
-;; ediff-display-help-hooks
-
-;; The hooks in ediff-load-hooks can be used to change defaults after Ediff
-;; is loaded. The hooks in ediff-keymap-setup-hooks can be used to alter
-;; bindings in Ediff's keymap. These hooks are called right after the
-;; default bindings are set.
-;;
-;; The hooks in ediff-before/after-setup-windows-hooks,
-;; ediff-suspend-hooks, and ediff-quit-hooks can be used to save and then
-;; restore whatever window configuration you want.
-
-;; Note that, by default, ediff-quit-hooks is set to a function,
-;; ediff-cleanup-mess, which cleans after Ediff, as appropriate in most
-;; cases. It is rather unlikely that the user will want to change
-;; it. However, the user may want add other hooks to ediff-quit-hooks,
-;; either before or after ediff-cleanup-mess (see the documentation for
-;; add-hook on how to do this). One should be aware that hooks executing
-;; before ediff-cleanup-mess start in ediff-control-buffer; they should
-;; also leave ediff-control-buffer as the current buffer. Hooks that are
-;; executed after ediff-cleanup-mess will have either buffer A or buffer B
-;; as the current buffer.
-
-;; If you are using packages such as mode-line.el to alter
-;; the buffer identification field in the mode line, you may have to
-;; restore this field after exiting Ediff by calling an appropriate
-;; function from a hook in ediff-quit-hooks (in case of mode-line.el, the
-;; function to call would be mode-line-abbreviate-buffer-identification).
-;; This should be done from a hook that runs before ediff-default-quit-hook,
-;; since such hooks run from within ediff-control-buffer, where buffers
-;; A, B, and C can be accessed via the variables ediff-buffer-A,
-;; ediff-buffer-B, ediff-buffer-C.
-
-;; The hooks ediff-before/after-setup-control-frame-hooks can be used to
-;; change how and where Ediff Control Panel is displayed, when it is
-;; displayed in a separate frame.
-
-;; However, be aware that many variables that drive Ediff are local to
-;; Ediff Control Panel, which requires special care in writing these hooks.
-;; Take a look at ediff-default-suspend-hook and ediff-default-quit-hook to
-;; see what's involved.
-
-;; The hooks in ediff-prepare-buffer-hooks are executed for each Ediff
-;; buffer (A, B, C) right after these buffers are arranged. Ediff runs the
-;; hooks in ediff-display-help-hooks each time after setting up the help
-;; message. Finally, ediff-mode-hooks are run just after ediff-mode is set
-;; up in the control buffer. This is done before any windows or frames are
-;; created. One can use it to set local variables that determine the
-;; look of the display.
-
-;; Quick help:
-;; ----------
-;;
-;; Ediff provides quick help using its control panel window. Since this
-;; window takes a fair share of the screen real estate, you can toggle it
-;; off by hitting `?'. The control window will then shrink to just one
-;; line and a mode line, displaying a short help message. The variable
-;;
-;; ediff-prefer-long-help-message
-;;
-;; Tells Ediff whether the user wants the short message initially or the
-;; long one. By default, it is set to nil, meaning that the short message
-;; will be shown on startup. Set this to t, if you want the long message
-;; initially.
-;; If you want to change the appearance of the help message on a
-;; per-buffer basis, you must use ediff-startup-hooks to change the value
-;; of ediff-help-message, which is a variable local to ediff-control-buffer.
-
-;; Window and frame configuration:
-;; -------------------------------
-
-;; In a non-windowing display, Ediff sets things up in one frame, splitting
-;; it between a small control window and the windows for file-A, file-B,
-;; and file-C. The split between these latter windows can be horizontal or
-;; vertical, which can be changed interactively by hitting `|' while the
-;; cursor is in the control window.
-;;
-;; On a window display, Ediff sets up a dedicated frame for Ediff Control
-;; Panel and then it would choose windows as follows: If one of the buffers
-;; is invisible, it will be displayed in the currently selected frame. If
-;; a buffer is visible, it will be displayed in the frame it is visible.
-;; If, according to the above criteria, the two buffers fall into the same
-;; frame, then be it---the frame will be shared by the two. The same
-;; algorithm works when you hit `C-l' (ediff-recenter), `p'
-;; (ediff-previous-difference), `n', etc.
-;;
-;; Thus, you can compare files in one frame or in different frames.
-;; The former is done by default, while the latter can be achieved by
-;; arranging files A, B (and C, if applicable) to be seen in different
-;; frames. Ediff respects these arrangements, automatically adapting
-;; itself to the multi-frame mode.
-
-;; Ediff uses the variables
-;;
-;; ediff-control-frame-parameters
-;; ediff-control-frame-position-function
-;;
-;; to set up its control panels. The user can change or augment
-;; ediff-control-frame-parameters including the font, color, etc. The X
-;; resource name of Ediff Control Panel frames is `Ediff'. Under X-windows,
-;; you can use this name to set up preferences in your ~/.Xdefaults
-;; (~/.xrdb, or whatever is in use). Usually this is preferable to changing
-;; ediff-control-frame-parameters directly. For instance, you can specify
-;; in ~/.Xdefaults where the control frame is to be sitting on the screen
-;; using the resource
-;;
-;; Ediff*geometry
-;;
-;; In general, any X resource pertaining the control frame can be reached
-;; via the prefix `Ediff*'.
-;;
-;; The prefered way of specifying the position of the control frame is by
-;; setting the variable ediff-control-frame-position-function to be a
-;; function to be called in order to determine the desired location for the
-;; control frame. The default value of this variable is
-;; `ediff-make-frame-position'. This function places the control frame in
-;; the vicinity of the North-East corner of the frame displaying buffer A.
-;; A pair of variables,
-;;
-;; ediff-narrow-control-frame-leftward-shift
-;; ediff-wide-control-frame-rightward-shift
-;; ediff-control-frame-upward-shift
-;;
-;; can be used to adjust the location produced by ediff-make-frame-position.
-;; The first variable specifies the number of characters for shifting
-;; the control frame from the rightmost edge of frame A when the control
-;; frame is displayed as a small window.
-;; The second variable specifies the rightward shift of the control frame
-;; from the left edge of frame A when the control frame shows the full
-;; menu of options.
-;; The third variable specifies the number of pixels for the upward shift
-;; of the control frame.
-;;
-;; If you truly and absolutely dislike the way Ediff sets up windows and if
-;; you can't customize this via frame parameters, the last resort is to
-;; rewrite the function `ediff-setup-windows'. However, we believe that
-;; detaching Ediff Control Panel from the rest and making it into a
-;; separate frame offers an important opportunity by allowing you to
-;; iconify that frame. Under Emacs, the icon will usually accept all of the
-;; Ediff commands, but will free up valuable real estate on your screen
-;; (this may depend on the window manager, though). Iconifying won't do any
-;; good under XEmacs since XEmacs icons do not seem to be sensitive to
-;; keyboard input. The saving grace is that, even if not iconified, the
-;; control frame is very small, smaller than some icons, so it doesn't take
-;; much space in any case.
-;;
-;; The variable
-;;
-;; ediff-prefer-iconified-control-frame
-;;
-;; if t, will cause the control frame to become iconified automatically when
-;; the help message is toggled off. This saves valuable real estate on the
-;; screen. Toggling help back will deiconify the control frame.
-;;
-;; To start ediff with an iconified Control Panel, you should set the above
-;; to t and ediff-prefer-long-help-message to nil.
-
-;; The variable
-;;
-;; ediff-window-setup-function
-;;
-;; Controls the way windows are setup. The above multiframe setup is
-;; achieved via ediff-setup-windows-multiframe function, which is a default
-;; on windowing displays (except for XEmacs 19.10 and earlier, which has a
-;; bug that breaks the multiframe display). The plain setup, one where all
-;; windows are always in one frame, is done via ediff-setup-windows-plain,
-;; which is the default on a non-windowing display (or in an xterm window).
-;; In fact, under Emacs, you can switch freely between these two setups by
-;; executing the command `ediff-toggle-multiframe'. However, don't try to
-;; do it under XEmacs, as it gets thoroughly confused if you switch from
-;; multiframe setup to plain setup within the same Ediff session.
-
-;; If you don't like either of these setups, write your own function. See
-;; the documentation for ediff-window-setup-function for the basic
-;; guidelines. However, writing window setups is not easy, so, before
-;; embarking on this job, you may want to take a close look at
-;; ediff-setup-windows-plain and ediff-setup-windows-multiframe.
-
-;; The user can run multiple Ediff sessions at once, by invoking it several
-;; times without exiting the previous Ediff sessions. Different sessions
-;; may even operate on the same pair of files. So, in principle, it is
-;; possible to do, say, pairwise comparison of three (or more) different
-;; files. Each session would have its own Ediff Control Panel and all the
-;; regarding a particular session is local to the associated control panel
-;; buffer. You can switch between sessions by suspending one session and
-;; then switching to another control panel. (Different control panel
-;; buffers are distinguished by a numerical suffix, e.g., Ediff Control
-;; Panel<3>.) Thus, if you would like to compare three files pairwise,
-;; you can do this by preparing three different frames, each with its data
-;; buffer to be compared. (No, I am not saying that such a 3way
-;; comparison is very easy to do.)
-;;
-;; If you need to conduct multiple Ediff sessions on the same file, one
-;; thing should be kept in mind: each time you invoke Ediff on a buffer that
-;; already participates in another Ediff session, that buffer should not
-;; have any ASCII Ediff flags in it. (Highlighting with faces is OK.) If
-;; flags are not removed, difference overlays won't be set correctly
-;; for the second invocation of Ediff. The simplest way to remove ASCII
-;; flags from an Ediff buffer is to hit `h' and thus switch to highlighting
-;; with faces (unhighlighting on a dumb terminal).
-
-;; Remote and Compressed Files
-;; ---------------------------
-
-;; Ediff will work with remote, compressed, and encrypted files. Ediff
-;; supports ange-ftp.el, jka-compr.el, uncompress.el and crypt++.el, but
-;; it may work with other similar packages as well. This
-;; means that you can compare files residing on another machine, or you
-;; can apply a patch to a file on another machine (even the patch itself
-;; can be a remote file!).
-;;
-;; When patching compressed or remote files, Ediff doesn't rename the
-;; source file into source-file-name_orig (unlike what `patch' would
-;; usually do). Instead, the source file retains its name and the result
-;; of applying the patch is placed in a temporary file that has the suffix
-;; `_patched'. Generally, this applies to files that are handled using
-;; black magic, such as special file handlers (ange-ftp and some
-;; compression and encryption packages all use this method).
-;;
-;; Regular files are treated by `patch' in the usual manner, i.e., the
-;; original is renamed into source-name_orig and the result of the patch
-;; is placed into the file source-name. (Ediff uses `_orig' instead of
-;; the usual `.orig' for compatibility with systems like VMS.)
-
-;;
-;; Selective browsing: Control over stepping through difference regions
-;; --------------------------------------------------------------------
-;;
-;; Sometimes it is convenient to be able to step through only some
-;; difference regions, those that satisfy certain conditions and to ignore
-;; all others. The commands `#f' and `#h' let the user specify regular
-;; expressions to control the way Ediff skips to the next or previous
-;; difference. Typing `#f' lets one specify of regular expressions,
-;; regexp-A, regexp-B, and regexp-C.
-;; Ediff will then start stepping only through those difference regions where
-;; the region in buffer A matches regexp-A and/or the region in buffer B
-;; matches regexp-B, etc. Whether `and' or `or' should be used depends on
-;; how the user responds to a prompt.
-;; Similarly, using `#h', one specifies expressions that match difference
-;; regions to be ignored while stepping through the differences. That is, if
-;; the buffer A part matches regexp-A, the buffer B part matches regexp B
-;; and (if applicable) buffer-C part matches regexp-C, then the region will
-;; be ignored by ediff-next-difference and ediff-previous-difference commands.
-;;
-;; Hitting `#f' and `#h' toggles this feature on/off.
-;;
-;; Note that selective browsing affects only ediff-next-difference and
-;; ediff-previous-difference, i.e., the commands invoked by typing n/SPC
-;; and p/DEL. You can still jump directly (using `j' or `ga/gb/gc') to any
-;; numbered difference. Also, it should be understood, that #f and #h do
-;; not change the position of the point in the buffers. The effect of these
-;; commands is seen only when the user types `n' or `p', i.e., when
-;; Ediff is told to jump to the next or previous difference.
-;;
-;; Users can supply their own functions that specify how Ediff should do
-;; selective browsing. To change the default Ediff function, add a function to
-;; ediff-load-hooks which will do the following assignments:
-;;
-;; (fset ediff-hide-regexp-matches 'your-hide-function)
-;; (fset ediff-focus-on-regexp-matches 'your-focus-function)
-;;
-;; Useful hints: To specify a regexp that matches everything, don't simply
-;; type RET in response to a prompt. Typing RET tells Ediff to accept the
-;; default value, which may not be what you want. Instead, one should enter
-;; something like `^' or `$' --- which would match every line.
-;;
-;; If the user doesn't remember if selective browsing is in effect and
-;; which regexps are being used, the status command, `i', will supply
-;; the requisite information.
-;;
-;; In addition to the ability to ignore regions that match regular
-;; expressions, Ediff can be ordered to start skipping over certain
-;; `inessential' regions. This is controlled by the variable
-;;
-;; ediff-ignore-similar-regions
-;;
-;; which, if set to t, will cause Ediff to skip over difference regions
-;; that has been found similar, i.e., where the only differences are those
-;; in the white space and newlines.
-;;
-;; Note: In order for this feature to work, auto-refining of difference
-;; regions must be on, since otherwise Ediff won't know if there are no
-;; fine differences between regions. Under X, auto-refining is a default,
-;; but it is nixed on a dumb terminal or in an Xterm window. Therefore, in
-;; a non-windowing environment, the user must explicitly turn
-;; auto-refining on (e.g., by typing `@').
-;;
-;; CAUTION: If many inessential regions appear in a row, Ediff may take a
-;; long time to jump to the next region because it has to compute fine
-;; differences of all intermediate regions.
-;;
-;;
-;; Highlighting difference regions
-;; -------------------------------
-;; The second group of Ediff variables that could be changed, if you so
-;; wish, is:
-;;
-;; ediff-before-flag-bol
-;; ediff-after-flag-eol
-;; ediff-before-flag-mol
-;; ediff-after-flag-mol
-;;
-;; ediff-current-diff-face-A
-;; ediff-current-diff-face-B
-;; ediff-current-diff-face-C
-;; ediff-fine-diff-face-A
-;; ediff-fine-diff-face-B
-;; ediff-fine-diff-face-C
-;; ediff-even-diff-face-A
-;; ediff-even-diff-face-B
-;; ediff-even-diff-face-C
-;; ediff-odd-diff-face-A
-;; ediff-odd-diff-face-B
-;; ediff-odd-diff-face-C
-;
-;; The first four are ASCII strings that mark the beginning and the end of
-;; the differences found in files A, B, and C. Ediff uses different flags
-;; to highlight regions that begin/end at the beginning of a line or in a
-;; middle of a line.
-
-;; The rest are the faces used to highlight text on X displays. On X
-;; displays, Ediff uses ediff-current-diff-face-A/B/C to highlight the
-;; current difference region.
-;;
-;; The faces ediff-fine-diff-face-A/B/C
-;; are used to show the fine differences between the current differences
-;; regions in buffers A, B, and C, respectively.
-;;
-;; Non-current difference regions are displayed in alternating
-;; faces: ediff-even/odd-diff-face-A/B/C. The odd and the even
-;; faces are actually identical on monochrome displays, because it is
-;; rather poor in what you can do on such a display. So, I chose to use
-;; italics to highlight other differences. Any ideas would be welcome.
-;; There are two ways to change the default setting for highlighting faces:
-;; either change the variables, as in
-;;
-;; (setq ediff-current-diff-face-A 'bold-italic)
-;;
-;; or
-;;
-;; (setq ediff-current-diff-face-A
-;; (copy-face 'bold-italic 'ediff-current-diff-face-A))
-;;
-;; or by selectively modifying the defaults:
-;;
-;; (add-hook 'ediff-load-hooks
-;; (function (lambda ()
-;; (set-face-foreground ediff-current-diff-face-B "blue")
-;; (set-face-background ediff-current-diff-face-B "red")
-;; (make-face-italic ediff-current-diff-face-B))))
-;;
-;; You may also want to take a look at how the above faces are defined in
-;; Ediff.
-;;
-;; Note: it is not recommended to use `internal-get-face' (or `get-face' in
-;; XEmacs) when defining faces for Ediff, since this may cause
-;; problems when there are several frames with different font sizes.
-;; Instead, use copy-face or set/make-face-* as shown above.
-;;
-;; The last variable in this group,
-;;
-;; ediff-highlight-all-diffs
-;;
-;; indicates whether---on a window system---the user wants differences to be
-;; marked using ASCII strings (like on a dumb terminal) or using colors and
-;; highlighting. Normally, Ediff highlights all differences, but the selected
-;; difference is highlighted more visibly. One can cycle through various
-;; modes of highlighting by hitting `h'. By default, Ediff starts in the
-;; mode where all difference regions are highlighted. If you prefer to
-;; start in the mode where unselected differences are not highlighted, you
-;; should set ediff-highlight-all-diffs to nil.
-;; You will still be able to turn on highlighting of all differences by
-;; hitting `h'.
-;;
-;; If you want to change the above variables, they must be set
-;; BEFORE Ediff is loaded.
-;;
-;; Note: Ediff lets you switch between the two types of highlighting. That
-;; is you can switch, interactively, from highlighting using faces to
-;; highlighting using ASCII flags, and back. Of course, toggling has
-;; effect only on a window system. On a dumb terminal or in an xterm
-;; window, the only available option is highlighting with ASCII flags.
-;;
-;; Selective display
-;; -----------------
-;; If buffers being compared are narrowed at the time of invocation of Ediff,
-;; ediff-buffers will preserve the narrowing range. However, if ediff-files
-;; is invoked on the files visited by these buffers, narrowing will be
-;; turned off, since we assume that the user wants to compare the entire files.
-;;
-;; Invocation of ediff-small/large-regions and ediff-windows will cause
-;; Ediff to set new narrowing ranges. However, the old ranges are preserved
-;; and will be returned to after quitting or by hitting `%'.
-;;
-;; Two variables control the behavior of ediff-windows,
-;; ediff-small-regions, and ediff-large-regions with respect to narrowing:
-;;
-;; ediff-start-narrowed
-;; ediff-quit-widened
-;;
-;; If ediff-start-narrowed is t, then Ediff will narrow display to the
-;; appropriate range if it is invoked as ediff-windows or
-;; ediff-small/large-regions.
-;; If it is nil, then narrowing will not take place. However, the user can
-;; still toggle narrowing on and off by typing `%'.
-;; Similarly, ediff-quit-widened controls whether Ediff should restore
-;; the visibility range that existed before the current invocation.
-;;
-;;
-;; Refinement of difference regions
-;; --------------------------------
-;; Ediff has variables that control the way fine differences are
-;; highlighted. This feature lets the user highlight the exact words that
-;; make the difference regions in comparison buffers different. This process
-;; ignores spaces, tabs, and newlines.
-;;
-;; ediff-auto-refine
-;; ediff-auto-refine-limit
-;;
-;; By default, `ediff-auto-refine' is `on', which means that fine differences
-;; within regions will be highlighted automatically. On a slow system, this
-;; feature may be undesirable. In any case, the user can always toggle
-;; auto-refining on/off/nix by hitting `@'. When auto-refining is off, fine
-;; differences will be shown only for regions for which these differences
-;; have been computed and saved before. If auto-refining is nixed, fine
-;; differences will not be shown at all. Hitting `*' will compute and
-;; display fine differences for the current difference region regardless of
-;; whether auto-refining is on, off, or nixed.
-;; If auto-refining is on, the variable `ediff-auto-refine-limit' limits
-;; the size of the regions to be auto-refined. This variable guards against
-;; possible slow-down that may be caused by an extraordinary large
-;; difference region.
-;;
-;; However, the user can always force region refining by typing `*'.
-;;
-;; Sometimes, when a difference region has too many differences between the
-;; variants, highlighting of fine differences stands in the way, especially
-;; on color displays. If that is the case, the user can invoke `*' with a
-;; negative prefix argument, which would unhighlight fine diffs for the
-;; current region.
-;;
-;; To unhighlight fine differences in all diff regions, use the command
-;; `@'. Repeated typing of this key cycles through three different states:
-;; auto-refining, no-auto-refining, and unhighlighting of all fine
-;; differences.
-;;
-;; The variable
-;;
-;; ediff-forward-word-function
-;;
-;; allows the user to control how fine differences are computed.
-;; The value must be a lisp function that determines how the
-;; current difference region should be split into words.
-;;
-;; Fine diferences are computed by first splitting the current difference
-;; region into words and then passing this along to
-;; `ediff-diff-program'. For the default ediff-forward-word-function,
-;; `ediff-forward-word', a word is a string consisting of letters, `-', or
-;; `_', a string of punctuation symbols, a string of digits, or a string
-;; consisting of symbols that are neither space, nor a letter.
-;;
-;; Patch and diff programs
-;; -----------------------
-;; The next group of variables determines the programs to be used for
-;; applying patches and for computing the main difference regions (not the
-;; fine difference regions):
-;;
-;; ediff-patch-program
-;; ediff-patch-options
-;; ediff-diff-program
-;; ediff-diff-options
-;; ediff-diff3-program
-;; ediff-diff3-options
-;;
-;; Warning about VMS: The output from VMS DIFF is not yet supported.
-;; Instead, make sure some implementation of Unix diff on VMS is used.
-;;
-;; These specify the functions that produce differences and do patching.
-;; The *-options variables specify which options to pass to these programs.
-;; It is unlikely that you would want to change these.
-;; However, sometimes you may want to tell diff to ignore spaces and
-;; such. Use the option '-w' for that.
-;; Diff has several other useful options (type 'man diff' to find out).
-;;
-;; However, Ediff doesn't let you use the option '-c', as it doesn't
-;; recognize this format yet. However, if you need to save the output from
-;; diff in a special form, Ediff lets you specify ``custom'' diff format
-;; using the following two variables:
-;;
-;; ediff-custom-diff-program
-;; ediff-custom-diff-options
-;;
-;; The output generated by ediff-custom-diff-program (which doesn't even
-;; have to be a Unix-style diff!) is not used by Ediff, except that you can
-;; save if using ediff-save-buffer function (normally bound to `wd' key
-;; sequence).
-;; However, Ediff is not the preferred way of producing diff output in
-;; Emacs, unless you also intend to use Ediff to browse through the diff'ed
-;; files. This is because diff.el (M-x diff), which also comes with Emacs,
-;; is much faster in yielding the output of diff, while Ediff consumes many
-;; resources.
-
-;; Support for diff3 and merging
-;; -----------------------------
-
-;; Ediff supports 3way comparison via the functions `ediff-files3' and
-;; `ediff-buffers3'. The interface is the same as for 2-way comparison.
-;; In 3-way comparison and merging, Ediff indicates if any two difference
-;; regions are identical. For instance, if the current region in buffer A
-;; is the same as the region in buffer C, then the mode line of buffer A will
-;; display [=diff(C)] and the mode line of buffer C will display [=diff(A)].
-;;
-;; Merging is done according to the following algorithm.
-;;
-;; If a diff region in one of the buffers, say B, differs from the ancestor
-;; while the region in the other buffer, A, doesn't, then the merge buffer,
-;; C, gets the B's region. Similarly when buffer A's region differs from
-;; the ancestor and B's doesn't.
-;;
-;; If both regions, A and B, differ from the ancestor, then Ediff chooses
-;; according to the value of
-;;
-;; ediff-default-variant
-;;
-;; If the value is `default-A' then A's region is chosen. If it is
-;; `default-B' then B's region is chosen. If the value of the above
-;; variable is `combined' then the region in buffer C will look like this:
-;;
-;; #ifdef NEW /* variant A */
-;; diff region from buffer A
-;; #else /* variant B */
-;; diff region from buffer B
-;; #endif /* NEW */
-;;
-;; The actual strings that separate the regions copied from bufer A and B
-;; are controled by the variable
-;;
-;; ediff-combination-pattern
-;;
-;; which must be a list of three strings.
-;;
-;; In addition to the state of the difference, during merging Ediff
-;; displays the state of the merge for each region. If a difference came
-;; from buffer A by default (because both regions A and B were different
-;; from the ancestor and ediff-default-variant was set to `default-A')
-;; then [=diff(A) default-A] is displayed in the mode line. If the
-;; difference in buffer C came, say, from buffer B because the diff region
-;; in that buffer differs from the ancestor, but the region in buffer A
-;; doesn't (if merging with an ancestor) then [=diff(B) prefer-B] is
-;; displayed. The indicators default-A/B and prefer-A/B are inspired by
-;; emerge.el and have the same meaning.
-;;
-;; Another indicator of the state of merge is `combined'. It appears
-;; with any difference region in buffer C that was obtained by combining
-;; the difference regions in buffers A and B as explained above.
-;;
-;; Note that the state-of-difference indicators `=diff(A)' and `=diff(B)'
-;; above are not redundant, even in the present of a state-of-merge
-;; indicator, as the two serve different purposes. For instance, if the
-;; mode line displays [=diff(B) prefer(B)] and you copy a diff region from
-;; buffer A to buffer C then `=diff(B)' will change to `diff-A' and the
-;; mode line will display [=diff(A) prefer-B].
-;; This indicates that the difference region in buffer C is identical to
-;; that in buffer A, but originally buffer C's region came from buffer B.
-;; This is useful to know because the original diff region in buffer C can
-;; be recovered by typing `r'.
-;;
-;; Ediff never changes the state-of-merge indicator, except as a result of
-;; the `!' command (see below), in which case the indicator is lost.
-;; On the other hand, the state-of-difference indicator is changed
-;; automatically by the copying/recovery commands, `a', `b', `r', `+'.
-;;
-;; If Ediff is asked to recompute differences via the command `!', the
-;; information about origins of the regions in the merge buffer (default-A,
-;; prefer-B, or combined) will be lost. This is because recomputing
-;; differences in this case means running diff3 on buffers A, B, and the
-;; merge buffer, not on the ancestor buffer. (It makes no sense to
-;; recompute differences with the ancestor, since Ediff assumes that the user
-;; doesn't edit buffers A and B, but he may have edited buffer C, and these
-;; changes are to be preserved.) Since some difference regions
-;; may disappear as a result of editing in buffer C and others may arise,
-;; there is generally no simple way to tell where the various regions
-;; in the merge buffer came from.
-;;
-;; In 3-way comparison, Ediff tries to disregard regions consisting of
-;; white space only as much as possible. For instance, if, say, the current
-;; region in buffer A consists of the white space only (or if it is empty),
-;; Ediff will not take it into account for the purpose of computing fine
-;; differences. The result is that Ediff can provide more visual
-;; information regarding the actual fine differences in the non-white
-;; regions B and C. Moreover, if the regions in buffers B and C differ in
-;; the white space only, then a message to this effect will be displayed.
-;;
-;; In merging, the variable
-;;
-;; ediff-merge-window-share
-;;
-;; controls the split between window C (the window for the merge-buffer)
-;; and the windows for buffers A and B. The default is 0.5. To make the
-;; merge-buffer window smaller, reduce this amount. It is not recommended
-;; to increase the size of the merge-window to more than half the frame
-;; (i.e., to increase the default value of ediff-merge-window-share),
-;; since it is then hard to see the contents of buffers A and B.
-;;
-;; The user can temporarily shrink the merge window to just one line by
-;; typing `s'. This change is temporary, until Ediff finds a reason to
-;; redraw the screen. Typing `s' again will restore the original window size.
-;;
-;; With a positive prefix argument, this command will make the merge window
-;; slightly taller. This change will hold throughout the current Ediff
-;; session. With `-' or a negative prefix argument, the command `s' makes
-;; the merge window slightly shorter. This change also holds through the
-;; entire current Ediff session.
-;;
-;; Ediff lets the user automatically skip regions where one of the buffer's
-;; regions is prefered because it disagrees with the ancestor, while the
-;; other buffer agrees with the ancestor. In this case, Ediff displays only
-;; the difference regions where the changes made to the original clash with
-;; each other. The variable that controls this behavior is
-;;
-;; ediff-show-clashes-only
-;;
-;; The value of this variable can be toggled interactively, by typing `$'.
-;; Note that this variable controls only how Ediff chooses the
-;; next/previous difference to show. The user can still jump directly to
-;; any difference using the command `j' (with prefix argument specifying
-;; the difference number).
-
-;; Version control support
-;; -----------------------
-;; Ediff supports version control via vc.el (in the standard
-;; distribution of Emacs 19) and rcs.el. The latter is a package written by
-;; Sebastian Kremer <sk@thp.Uni-Koeln.DE>, which is available in
-;;
-;; ftp.cs.buffalo.edu:pub/Emacs/rcs.tar.Z
-;; ftp.uni-koeln.de:/pub/gnu/emacs/rcs.tar.Z
-;;
-;; To specify which version control package you are using, set the variable
-;; ediff-version-control-package, e.g.,
-;; (setq ediff-version-control-package 'rcs)
-;; The default, is `vc'.
-;; Note: both packages provide access to RCS, but only vc.el comes standard
-;; with Emacs and XEmacs.
-;; For files under revision control, one key (usually `=') is bound to the
-;; function ediff-revision, which runs Ediff on the current buffer and one
-;; of its versions. Use the variable
-;;
-;; ediff-revision-key
-;;
-;; if you want to change this binding, e.g., (setq ediff-revision-key "\C-cD")