This is Info file ../info/ediff, produced by Makeinfo-1.63 from the input file ediff.texi. This file documents Ediff, a comprehensive visual interface to Unix diff and patch utilities. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. File: ediff, Node: Patch and Diff Programs, Next: Merging and diff3, Prev: Refinement of Difference Regions, Up: Customization Patch and Diff Programs ======================= This section describes variables that specify the programs to be used for applying patches and for computing the main difference regions (not the fine difference regions): `ediff-patch-program' `ediff-diff-program' `ediff-diff3-program' These variables specify the programs to use to produce differences and do patching. `ediff-patch-options' `ediff-diff-options' `ediff-diff3-options' These variables specify the options to pass to the above utilities. In `ediff-diff-options', it may be useful to specify options such as `-w' that ignore certain kinds of changes. However, Ediff does not let you use the option `-c', as it doesn't recognize this format yet. `ediff-custom-diff-program' `ediff-custom-diff-options' Because Ediff limits the options you may want to pass to the `diff' program, it partially makes up for this drawback by letting you save the output from `diff' in your preferred format, which is specified via the above two variables. The output generated by `ediff-custom-diff-program' (which doesn't even have to be a standard-style `diff'!) is not used by Ediff. It is provided exclusively so that you can refer to it later, send it over email, etc. For instance, after reviewing the differences, you may want to send context differences to a colleague. Since Ediff ignores the `-c' option in `ediff-diff-program', you would have to run `diff -c' separately just to produce the list of differences. Fortunately, `ediff-custom-diff-program' and `ediff-custom-diff-options' eliminate this nuisance by keeping a copy of a difference list in the desired format in a buffer that can be displayed via the command `D'. `ediff-patch-default-directory' Specifies the default directory to look for patches. *Warning:* Ediff does not support the output format of VMS `diff'. Instead, make sure to use some implementation of POSIX `diff', such as `gnudiff'. File: ediff, Node: Merging and diff3, Next: Support for Version Control, Prev: Patch and Diff Programs, Up: Customization Merging and diff3 ================= Ediff supports three-way comparison via the functions `ediff-files3' and `ediff-buffers3'. The interface is the same as for two-way comparison. In three-way comparison and merging, Ediff reports 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 difference region in one of the buffers, say B, differs from the ancestor file while the region in the other buffer, A, doesn't, then the merge buffer, C, gets B's region. Similarly when buffer A's region differs from the ancestor and B's doesn't, A's region is used. If both regions in buffers A and B differ from the ancestor file, Ediff chooses the region according to the value of the variable `ediff-default-variant'. If its value is `default-A' then A's region is chosen. If it is `default-B' then B's region is chosen. If it is `combined' then the region in buffer C will look like this: #ifdef NEW /* variant A */ difference region from buffer A #else /* variant B */ difference region from buffer B #endif /* NEW */ The actual strings that separate the regions copied from buffer A and B are controlled by the variable `ediff-combination-pattern'. Its value should be a list of three strings. The first is inserted before the difference region of buffer A; the second string goes between the regions; the third goes after region B, as shown in the above example. 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 difference region in that buffer differs from the ancestor, but the region in buffer A does not (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 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. In addition to state of merge and difference indicator, while merging with an ancestor file or buffer, Ediff informs the user when the current difference region in the (normally invisible) ancestor buffer is empty via the *AncestorEmpty* indicator. This helps determine if the changes made to the original in variants A and B represent pure insertion or deletion of text: if the mode line shows *AncestorEmpty* and the corresponding region in buffers A or B is not empty, this means that new text was inserted. If this indicator is not present and the difference regions in buffers A or B are non-empty, this means that text was modified. Otherwise, the original text was deleted. Although the ancestor buffer is normally invisible, Ediff maintains difference regions there and advances the current difference region accordingly. All highlighting of difference regions is provided in the ancestor buffer, except for the fine differences. Therefore, if desired, the user can put the ancestor buffer in a separate frame and watch it there. However, on a TTY, only one frame can be visible at any given time, and Ediff doesn't support any single-frame window configuration where all buffers, including the ancestor buffer, would be visible. However, the ancestor buffer can be displayed by typing `/' to the control window. (Type `C-l' to hide it again.) Note that the state-of-difference indicators `=diff(A)' and `=diff(B)' above are not redundant, even in the presence of a state-of-merge indicator. In fact, the two serve different purposes. For instance, if the mode line displays `=diff(B) prefer(B)' and you copy a difference 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 you can recover the original difference region in buffer C by typing `r'. Ediff never changes the state-of-merge indicator, except in response to 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', `+'. The `!' command loses the information about origins of the regions in the merge buffer (default-A, prefer-B, or combined). 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 using the ancestor file, since in the merging mode Ediff assumes that you have not edited buffers A and B, but that you may have edited buffer C, and these changes are to be preserved.) Since some difference regions may disappear as a result of editing 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 three-way comparison, Ediff tries to disregard regions that consist entirely of white space. 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 a better visual information regarding the actual fine differences in the non-white regions in buffers 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 the merge mode, the share of the split between window C (the window displaying the merge-buffer) and the windows displaying buffers A and B is controlled by the variable `ediff-merge-window-share'. Its default value is 0.5. To make the merge-buffer window smaller, reduce this amount. We don't recommend increasing the size of the merge-window to more than half the frame (i.e., to increase the value of `ediff-merge-window-share') to more than 0.5, since it would be hard to see the contents of buffers A and B. You 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 restores the original window size. With a positive prefix argument, the `s' command will make the merge window slightly taller. This change is persistent. With ``-'' or with a negative prefix argument, the command `s' makes the merge window slightly shorter. This change also persistent. Ediff lets you automatically ignore the regions where only one of the buffers A and B disagrees with the ancestor. To do this, set the variable `ediff-show-clashes-only' to non-`nil'. You can toggle this feature interactively by typing `$'. Note that this variable controls only how Ediff chooses the next/previous difference to show. You can still jump directly to any difference using the command `j' (with a prefix argument specifying the difference number). File: ediff, Node: Support for Version Control, Next: Customizing the Mode Line, Prev: Merging and diff3, Up: Customization Support for Version Control =========================== Ediff supports version control and lets you compare versions of files visited by Emacs buffers via the function `ediff-revision'. This feature is controlled by the following variables: `ediff-version-control-package' A symbol. The default is `vc'. If you are like most Emacs users, Ediff will use VC as the version control package. This is the standard Emacs interface to RCS, CVS, and SCCS. However, if your needs are better served by other interfaces, you will have to tell Ediff which version control package you are using, e.g., (setq ediff-version-control-package 'rcs) Apart from the standard `vc.el', Ediff supports three other interfaces to version control: `rcs.el', `pcl-cvs.el', and `generic-sc.el'. The package `rcs.el' is written by Sebastian Kremer and is available as `ftp.cs.buffalo.edu:pub/Emacs/rcs.tar.Z' `ftp.uni-koeln.de:/pub/gnu/emacs/rcs.tar.Z' The packages `pcl-cvs.el' and `generic-sc.el' are found in XEmacs distribution. Ediff's interface to the above packages allows the user to compare the versions of the current buffer or to merge them (with or without an ancestor-version). These operations can also be performed on directories containing files under version control. In case of `pcl-cvs.el', Ediff can also be invoked via the function `run-ediff-from-cvs-buffer'--see the documentation string for this function. File: ediff, Node: Customizing the Mode Line, Next: Miscellaneous, Prev: Support for Version Control, Up: Customization Customizing the Mode Line ========================= When Ediff is running, the mode line of `Ediff Control Panel' buffer shows the current difference number and the total number of difference regions in the two files. The mode line of the buffers being compared displays the type of the buffer (`A:', `B:', or `C:') and (usually) the file name. Ediff tries to be intelligent in choosing the mode line buffer identification. In particular, it works well with the `uniquify.el' and `mode-line.el' packages (which improve on the default way in which Emacs displays buffer identification). If you don't like the way Ediff changes the mode line, you can use `ediff-prepare-buffer-hook' to modify the mode line. File: ediff, Node: Miscellaneous, Next: Notes on Heavy-duty Customization, Prev: Customizing the Mode Line, Up: Customization Miscellaneous ============= Here are a few other variables for customizing Ediff: `ediff-split-window-function' Controls the way you want the window be split between file-A and file-B (and file-C, if applicable). It defaults to the vertical split (`split-window-vertically', but you can set it to `split-window-horizontally', if you so wish. Ediff also lets you switch from vertical to horizontal split and back interactively. Note that if Ediff detects that all the buffers it compares are displayed in separate frames, it assumes that the user wants them to be so displayed and stops splitting windows. Instead, it arranges for each buffer to be displayed in a separate frame. You can switch to the one-frame mode by hiding one of the buffers A/B/C. You can also swap the windows where buffers are displayed by typing `~'. `ediff-merge-split-window-function' Controls how windows are split between buffers A and B in the merge mode. This variable is like `ediff-split-window-function', but it defaults to `split-window-horizontally' instead of `split-window-vertically'. `ediff-make-wide-display-function' The value is a function to be called to widen the frame for displaying the Ediff buffers. See the on-line documentation for `ediff-make-wide-display-function' for details. It is also recommended to look into the source of the default function `ediff-make-wide-display'. You can toggle wide/regular display by typing `m'. In the wide display mode, buffers A, B (and C, when applicable) are displayed in a single frame that is as wide as the entire workstation screen. This is useful when files are compared side-by-side. By default, the display is widened without changing its height. `ediff-use-last-dir' Controls the way Ediff presents the default directory when it prompts the user for files to compare. If `nil', Ediff uses the default directory of the current buffer when it prompts the user for file names. Otherwise, it will use the directories it had previously used for files A, B, or C, respectively. `ediff-no-emacs-help-in-control-buffer' If `t', makes `C-h' behave like the DEL key, i.e., it will move you back to the previous difference rather than invoking help. This is useful when, in an xterm window or a text-only terminal, the Backspace key is bound to `C-h' and is positioned more conveniently than the DEL key. `ediff-toggle-read-only-function' This variable's value is a function that Ediff uses to toggle the read-only property in its buffers. The default function that Ediff uses simply toggles the read-only property, unless the file is under version control. For a checked-in file under version control, Ediff first tries to check the file out. `ediff-keep-variants' The default is `t', meaning that the buffers being compared or merged will be preserved when Ediff quits. Setting this to `nil' causes Ediff to offer the user a chance to delete these buffers (if they are not modified). Supplying a prefix argument to the quit command (`q') temporarily reverses the meaning of this variable. This is convenient when the user prefers one of the behaviors most of the time, but occasionally needs the other behavior. However, Ediff temporarily resets this variable to `t' if it is invoked via one of the "buffer" jobs, such as `ediff-buffers'. This is because it is all too easy to loose day's work otherwise. Besides, in a "buffer" job, the variant buffers have already been loaded prior to starting Ediff, so Ediff just preserves status quo here. Using `ediff-cleanup-hook', one can make Ediff delete the variants unconditionally (e.g., by making `ediff-janitor' into one of these hooks). `ediff-grab-mouse' Default is `t'. Normally, Ediff grabs mouse and puts it in its control frame. This is useful since the user can be sure that when he needs to type an Ediff command the focus will be in an appropriate Ediff's frame. However, some users prefer to move the mouse by themselves. The above variable, if set to `maybe', will prevent Ediff from grabbing the mouse in many situations, usually after commands that may take more time than usual. In other situation, Ediff will continue grabbing the mouse and putting it where it believes is appropriate. If the value is `nil', then mouse is entirely user's responsibility. Try different settings and see which one is for you. File: ediff, Node: Notes on Heavy-duty Customization, Prev: Miscellaneous, Up: Customization Notes on Heavy-duty Customization ================================= Some users need to customize Ediff in rather sophisticated ways, which requires different defaults for different kinds of files (e.g., SGML, etc.). Ediff supports this kind of customization in several ways. First, most customization variables are buffer-local. Those that aren't are usually accessible from within Ediff Control Panel, so one can make them local to the panel by calling make-local-variable from within `ediff-startup-hook'. Second, the function `ediff-setup' accepts an optional sixth argument which has the form `((VAR-NAME-1 . VAL-1) (VAR-NAME-2 . VAL-2) ...)'. The function `ediff-setup' sets the variables in the list to the respective values, locally in the Ediff control buffer. This is an easy way to throw in custom variables (which usually should be buffer-local) that can then be tested in various hooks. Make sure the variable `ediff-job-name' and `ediff-word-mode' are set properly in this case, as some things in Ediff depend on this. Finally, if you want custom-tailored help messages, you can set the variables `ediff-brief-help-message-function' and `ediff-long-help-message-function' to functions that return help strings. When customizing Ediff, some other variables are useful, although they are not user-definable. They are local to the Ediff control buffer, so this buffer must be current when you access these variables. The control buffer is accessible via the variable `ediff-control-buffer', which is also local to that buffer. It is usually used for checking if the current buffer is also the control buffer. Other variables of interest are: `ediff-buffer-A' The first of the data buffers being compared. `ediff-buffer-B' The second of the data buffers being compared. `ediff-buffer-C' In three-way comparisons, this is the third buffer being compared. In merging, this is the merge buffer. In two-way comparison, this variable is nil. `ediff-window-A' The window displaying buffer A. If buffer A is not visible, this variable is nil or it may be a dead window. `ediff-window-B' The window displaying buffer B. `ediff-window-C' The window displaying buffer C, if any. `ediff-control-frame' A dedicated frame displaying the control buffer, if it exists. It is non-nil only if Ediff uses the multiframe display, i.e., when the control buffer is in its own frame. File: ediff, Node: Credits, Next: Index, Prev: Customization, Up: Top Credits ******* Ediff was written by Michael Kifer . It was inspired by emerge.el written by Dale R. Worley . An idea due to Boris Goldowsky made it possible to highlight fine differences in Ediff buffers. Alastair Burt ported Ediff to XEmacs, and Eric Freudenthal made it work with VC. Many people provided help with bug reports, patches, and advice. Without them, Ediff would not be nearly as useful as it is today. Here is a full list of contributors (I hope I didn't miss anyone): Neal Becker (neal@ctd.comsat.com), Alastair Burt (burt@dfki.uni-kl.de), Paul Bibilo (peb@delcam.co.uk), Kevin Broadey (KevinB@bartley.demon.co.uk), Harald Boegeholz (hwb@machnix.mathematik.uni-stuttgart.de), Bradley A. Bosch (brad@lachman.com), Michael D. Carney (carney@ltx-tr.com), Jin S. Choi (jin@atype.com), Albert Dvornik (bert@mit.edu), Eric Eide (eeide@asylum.cs.utah.edu), Kevin Esler (esler@ch.hp.com), Robert Estes (estes@ece.ucdavis.edu), Xavier Fornari (xavier@europe.cma.fr), Eric Freudenthal (freudent@jan.ultra.nyu.edu), Job Ganzevoort (Job.Ganzevoort@cwi.nl), Boris Goldowsky (boris@cs.rochester.edu), Allan Gottlieb (gottlieb@allan.ultra.nyu.edu), Xiaoli Huang (hxl@epic.com), Larry Gouge (larry@itginc.com), Karl Heuer (kwzh@gnu.ai.mit.edu), (irvine@lks.csi.com), (jaffe@chipmunk.cita.utoronto.ca), David Karr (dkarr@nmo.gtegsc.com), Norbert Kiesel (norbert@i3.informatik.rwth-aachen.de), Leigh L Klotz (klotz@adoc.xerox.com), Fritz Knabe (Fritz.Knabe@ecrc.de), Heinz Knutzen (hk@informatik.uni-kiel.d400.de), Andrew Koenig (ark@research.att.com), Ken Laprade (laprade@dw3f.ess.harris.com), Will C Lauer (wcl@cadre.com), Richard Levitte (levitte@e.kth.se), Mike Long (mike.long@analog.com), Martin Maechler (maechler@stat.math.ethz.ch), Simon Marshall (Simon.Marshall@mail.esrin.esa.it), Richard Mlynarik (mly@adoc.xerox.com), Chris Murphy (murphycm@sun.aston.ac.uk), Erik Naggum (erik@naggum.no), Eyvind Ness (Eyvind.Ness@hrp.no), Ray Nickson (nickson@cs.uq.oz.au), David Petchey (petchey_david@jpmorgan.com), Benjamin Pierce (benjamin.pierce@cl.cam.ac.uk), Tibor Polgar (tlp00@spg.amdahl.com), David Prince (dave0d@fegs.co.uk), Paul Raines (raines@slac.stanford.edu), C.S. Roberson (roberson@aur.alcatel.com), Kevin Rodgers (kevin.rodgers@ihs.com), Sandy Rutherford (sandy@ibm550.sissa.it), Heribert Schuetz (schuetz@ecrc.de), Andy Scott (ascott@pcocd2.intel.com), Axel Seibert (axel@tumbolia.ppp.informatik.uni-muenchen.de), Richard Stallman (rms@gnu.ai.mit.edu), Richard Stanton (stanton@haas.berkeley.edu), Ake Stenhoff (etxaksf@aom.ericsson.se), Stig (stig@hackvan.com), Peter Stout (Peter_Stout@cs.cmu.edu), Chuck Thompson (cthomp@cs.uiuc.edu), Ray Tomlinson (tomlinso@bbn.com), Raymond Toy (toy@rtp.ericsson.se), Ben Wing (wing@666.com), Ilya Zakharevich (ilya@math.ohio-state.edu), Eli Zaretskii (eliz@is.elta.co.il) File: ediff, Node: Index, Prev: Credits, Up: Top Index ***** * Menu: * ediff-grab-mouse: Miscellaneous. * ediff-keep-variants: Miscellaneous. * ediff-use-last-dir: Major Entry Points. * generic-sc.el: Support for Version Control. * mode-line.el: Customizing the Mode Line. * pcl-cvs.el: Support for Version Control. * rcs.el: Support for Version Control. * uniquify.el: Customizing the Mode Line. * vc.el: Support for Version Control. * Comparing files and buffers: Introduction. * ediff: Major Entry Points. * ediff-after-flag-eol: Highlighting Difference Regions. * ediff-after-flag-mol: Highlighting Difference Regions. * ediff-after-setup-control-frame-hook: Hooks. * ediff-after-setup-windows-hook: Hooks. * ediff-auto-refine: Refinement of Difference Regions. * ediff-auto-refine-limit: Refinement of Difference Regions. * ediff-before-flag-bol: Highlighting Difference Regions. * ediff-before-flag-mol: Highlighting Difference Regions. * ediff-before-setup-control-frame-hook: Hooks. * ediff-before-setup-windows-hook: Hooks. * ediff-brief-help-message-function: Notes on Heavy-duty Customization. * ediff-buffers: Major Entry Points. * ediff-buffers3: Major Entry Points. * ediff-cleanup-hook: Hooks. * ediff-combination-pattern: Merging and diff3. * ediff-control-buffer: Quick Help. * ediff-control-frame-parameters: Window and Frame Configuration. * ediff-control-frame-position-function: Window and Frame Configuration. * ediff-control-frame-upward-shift: Window and Frame Configuration. * ediff-current-diff-face-A: Highlighting Difference Regions. * ediff-current-diff-face-B: Highlighting Difference Regions. * ediff-current-diff-face-C: Highlighting Difference Regions. * ediff-custom-diff-options: Patch and Diff Programs. * ediff-custom-diff-program: Patch and Diff Programs. * ediff-default-variant: Merging and diff3. * ediff-diff-options: Patch and Diff Programs. * ediff-diff-program <1>: Patch and Diff Programs. * ediff-diff-program: Refinement of Difference Regions. * ediff-diff3-options: Patch and Diff Programs. * ediff-diff3-program: Patch and Diff Programs. * ediff-directories: Major Entry Points. * ediff-directories3: Major Entry Points. * ediff-directory-revisions: Major Entry Points. * ediff-display-help-hook: Hooks. * ediff-even-diff-face-A: Highlighting Difference Regions. * ediff-even-diff-face-B: Highlighting Difference Regions. * ediff-even-diff-face-C: Highlighting Difference Regions. * ediff-files: Major Entry Points. * ediff-files3: Major Entry Points. * ediff-fine-diff-face-A: Highlighting Difference Regions. * ediff-fine-diff-face-B: Highlighting Difference Regions. * ediff-fine-diff-face-C: Highlighting Difference Regions. * ediff-force-faces: Highlighting Difference Regions. * ediff-forward-word: Refinement of Difference Regions. * ediff-forward-word-function: Refinement of Difference Regions. * ediff-help-message: Quick Help. * ediff-highlight-all-diffs: Highlighting Difference Regions. * ediff-ignore-similar-regions: Selective Browsing. * ediff-janitor: Hooks. * ediff-job-name: Notes on Heavy-duty Customization. * ediff-keymap-setup-hook: Hooks. * ediff-load-hook: Hooks. * ediff-long-help-message-function: Notes on Heavy-duty Customization. * ediff-make-frame-position: Window and Frame Configuration. * ediff-make-wide-display-function: Miscellaneous. * ediff-merge: Major Entry Points. * ediff-merge-buffers: Major Entry Points. * ediff-merge-buffers-with-ancestor: Major Entry Points. * ediff-merge-directories: Major Entry Points. * ediff-merge-directories-with-ancestor: Major Entry Points. * ediff-merge-directory-revisions: Major Entry Points. * ediff-merge-directory-revisions-with-ancestor: Major Entry Points. * ediff-merge-files: Major Entry Points. * ediff-merge-files-with-ancestor: Major Entry Points. * ediff-merge-revisions: Major Entry Points. * ediff-merge-revisions-with-ancestor: Major Entry Points. * ediff-merge-split-window-function: Miscellaneous. * ediff-merge-window-share: Merging and diff3. * ediff-merge-with-ancestor: Major Entry Points. * ediff-mode-hook: Hooks. * ediff-narrow-control-frame-leftward-shift: Window and Frame Configuration. * ediff-no-emacs-help-in-control-buffer: Miscellaneous. * ediff-odd-diff-face-A: Highlighting Difference Regions. * ediff-odd-diff-face-B: Highlighting Difference Regions. * ediff-odd-diff-face-C: Highlighting Difference Regions. * ediff-patch-buffer: Major Entry Points. * ediff-patch-default-directory: Patch and Diff Programs. * ediff-patch-file: Major Entry Points. * ediff-patch-options: Patch and Diff Programs. * ediff-patch-program: Patch and Diff Programs. * ediff-prefer-iconified-control-frame: Window and Frame Configuration. * ediff-prepare-buffer-hook <1>: Customizing the Mode Line. * ediff-prepare-buffer-hook: Hooks. * ediff-profile: Commands. * ediff-quit-hook: Hooks. * ediff-quit-widened: Narrowing. * ediff-regions-linewise: Major Entry Points. * ediff-regions-wordwise: Major Entry Points. * ediff-registry-setup-hook: Hooks. * ediff-revert-buffers-then-recompute-diffs: Commands. * ediff-revision: Major Entry Points. * ediff-save-buffer: Patch and Diff Programs. * ediff-select-hook: Hooks. * ediff-session-group-setup-hook: Hooks. * ediff-setup: Notes on Heavy-duty Customization. * ediff-setup-windows: Window and Frame Configuration. * ediff-setup-windows-multiframe: Window and Frame Configuration. * ediff-setup-windows-plain: Window and Frame Configuration. * ediff-show-clashes-only: Merging and diff3. * ediff-show-registry: Commands. * ediff-split-window-function: Miscellaneous. * ediff-start-narrowed: Narrowing. * ediff-startup-hook <1>: Notes on Heavy-duty Customization. * ediff-startup-hook <1>: Quick Help. * ediff-startup-hook: Hooks. * ediff-suspend-hook: Hooks. * ediff-toggle-multiframe <1>: Window and Frame Configuration. * ediff-toggle-multiframe: Commands. * ediff-toggle-read-only-function: Miscellaneous. * ediff-unselect-hook: Hooks. * ediff-use-last-dir: Miscellaneous. * ediff-use-long-help-message: Quick Help. * ediff-version-control-package: Support for Version Control. * ediff-wide-control-frame-rightward-shift: Window and Frame Configuration. * ediff-window-setup-function: Window and Frame Configuration. * ediff-windows-linewise: Major Entry Points. * ediff-windows-wordwise: Major Entry Points. * ediff-word-1: Refinement of Difference Regions. * ediff-word-2: Refinement of Difference Regions. * ediff-word-3: Refinement of Difference Regions. * ediff-word-4: Refinement of Difference Regions. * ediff-word-mode: Notes on Heavy-duty Customization. * ediff3: Major Entry Points. * edir-merge-revisions: Major Entry Points. * edir-merge-revisions-with-ancestor: Major Entry Points. * edir-revisions: Major Entry Points. * edirs: Major Entry Points. * edirs-merge: Major Entry Points. * edirs-merge-with-ancestor: Major Entry Points. * edirs3: Major Entry Points. * epatch: Major Entry Points. * eregistry: Commands. * Finding differences: Introduction. * Merging files and buffers: Introduction. * Multi-file patches: Session Groups. * Patching files and buffers: Introduction.