annotate lisp/ediff-diff.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents f7e788ea680b
children 7177532e6e8b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1 ;;; ediff-diff.el --- diff-related utilities
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13953
diff changeset
2
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
3 ;; Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5 ;; Author: Michael Kifer <kifer@cs.sunysb.edu>
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7 ;; This file is part of GNU Emacs.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9 ;; GNU Emacs is free software; you can redistribute it and/or modify
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10 ;; it under the terms of the GNU General Public License as published by
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
11 ;; the Free Software Foundation; either version 2, or (at your option)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
12 ;; any later version.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
13
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
14 ;; GNU Emacs is distributed in the hope that it will be useful,
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
17 ;; GNU General Public License for more details.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
18
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
19 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13953
diff changeset
20 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13953
diff changeset
21 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13953
diff changeset
22 ;; Boston, MA 02111-1307, USA.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13953
diff changeset
23
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13953
diff changeset
24 ;;; Code:
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
25
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
26 (provide 'ediff-diff)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
27
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
28 ;; compiler pacifier
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
29 (defvar ediff-default-variant)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
30
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
31 (eval-when-compile
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
32 (let ((load-path (cons (expand-file-name ".") load-path)))
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
33 (or (featurep 'ediff-init)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
34 (load "ediff-init.el" nil nil 'nosuffix))
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
35 (or (featurep 'ediff-util)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
36 (load "ediff-util.el" nil nil 'nosuffix))
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
37 ))
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
38 ;; end pacifier
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
39
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
40 (require 'ediff-init)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
41
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
42 (defgroup ediff-diff nil
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
43 "Diff related utilities"
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
44 :prefix "ediff-"
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
45 :group 'ediff)
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
46
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
47
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
48 (defcustom ediff-shell
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
49 (cond ((eq system-type 'emx) "cmd") ; OS/2
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
50 ((memq system-type '(ms-dos windows-nt windows-95))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
51 shell-file-name) ; no standard name on MS-DOS
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
52 ((memq system-type '(vax-vms axp-vms)) "*dcl*") ; VMS
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
53 (t "sh")) ; UNIX
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
54 "*The shell used to run diff and patch. If user's .profile or
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
55 .cshrc files are set up correctly, any shell will do. However, some people
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
56 set $prompt or other things incorrectly, which leads to undesirable output
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
57 messages. These may cause Ediff to fail. In such a case, set ediff-shell
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
58 to a shell that you are not using or, better, fix your shell's startup file."
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
59 :type 'string
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
60 :group 'ediff-diff)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
61
20206
f44ff2c52fac new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19774
diff changeset
62 (defcustom ediff-cmp-program "cmp"
f44ff2c52fac new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19774
diff changeset
63 "*Utility to use to determine if two files are identical.
f44ff2c52fac new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19774
diff changeset
64 It must return code 0, if its arguments are identical files."
f44ff2c52fac new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19774
diff changeset
65 :type 'string
f44ff2c52fac new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19774
diff changeset
66 :group 'ediff-diff)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
67
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
68 (defcustom ediff-diff-program "diff"
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
69 "*Program to use for generating the differential of the two files."
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
70 :type 'string
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
71 :group 'ediff-diff)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
72 (defcustom ediff-diff-options ""
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
73 "*Options to pass to `ediff-diff-program'.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
74 If diff\(1\) is used as `ediff-diff-program', then the most useful options are
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
75 `-w', to ignore space, and `-i', to ignore case of letters.
19774
1ecc4a79d048 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19047
diff changeset
76 At present, the option `-c' is not allowed."
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
77 :type 'string
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
78 :group 'ediff-diff)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
79
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
80 (defcustom ediff-custom-diff-program ediff-diff-program
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
81 "*Program to use for generating custom diff output for saving it in a file.
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
82 This output is not used by Ediff internally."
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
83 :type 'string
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
84 :group 'ediff-diff)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
85 (defcustom ediff-custom-diff-options "-c"
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
86 "*Options to pass to `ediff-custom-diff-program'."
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
87 :type 'string
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
88 :group 'ediff-diff)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
89
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
90 ;;; Support for diff3
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
91
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
92 (defvar ediff-match-diff3-line "^====\\(.?\\)$"
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
93 "Pattern to match lines produced by diff3 that describe differences.")
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
94 (defcustom ediff-diff3-program "diff3"
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
95 "*Program to be used for three-way comparison.
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
96 Must produce output compatible with Unix's diff3 program."
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
97 :type 'string
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
98 :group 'ediff-diff)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
99 (defcustom ediff-diff3-options ""
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
100 "*Options to pass to `ediff-diff3-program'."
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
101 :type 'string
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
102 :group 'ediff-diff)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
103 (defcustom ediff-diff3-ok-lines-regexp
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
104 "^\\([1-3]:\\|====\\| \\|.*Warning *:\\|.*No newline\\|.*missing newline\\|^\C-m$\\)"
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
105 "*Regexp that matches normal output lines from `ediff-diff3-program'.
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
106 Lines that do not match are assumed to be error messages."
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
107 :type 'regexp
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
108 :group 'ediff-diff)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
109
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
110 ;; keeps the status of the current diff in 3-way jobs.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
111 ;; the status can be =diff(A), =diff(B), or =diff(A+B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
112 (ediff-defvar-local ediff-diff-status "" "")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
113
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
114
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
115 ;;; Fine differences
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
116
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
117 (ediff-defvar-local ediff-auto-refine (if (ediff-has-face-support-p) 'on 'nix)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
118 "If `on', Ediff auto-highlights fine diffs for the current diff region.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
119 If `off', auto-highlighting is not used. If `nix', no fine diffs are shown
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
120 at all, unless the user force-refines the region by hitting `*'.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
121
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
122 This variable can be set either in .emacs or toggled interactively.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
123 Use `setq-default' if setting it in .emacs")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
124
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
125 (ediff-defvar-local ediff-ignore-similar-regions nil
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
126 "*If t, skip over difference regions that differ only in the white space and line breaks.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
127 This variable can be set either in .emacs or toggled interactively.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
128 Use `setq-default' if setting it in .emacs")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
129
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
130 (ediff-defvar-local ediff-auto-refine-limit 1400
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
131 "*Auto-refine only the regions of this size \(in bytes\) or less.")
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
132
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
133 ;;; General
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
134
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
135 (defvar ediff-diff-ok-lines-regexp
20343
4327dd36b71b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
136 (concat
4327dd36b71b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
137 "^\\("
4327dd36b71b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
138 "[0-9,]+[acd][0-9,]+\C-m?$"
4327dd36b71b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
139 "\\|[<>] "
4327dd36b71b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
140 "\\|---"
4327dd36b71b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
141 "\\|.*Warning *:"
4327dd36b71b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
142 "\\|.*No +newline"
4327dd36b71b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
143 "\\|.*missing +newline"
4327dd36b71b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
144 "\\|^\C-m?$"
4327dd36b71b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
145 "\\)")
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
146 "Regexp that matches normal output lines from `ediff-diff-program'.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
147 This is mostly lifted from Emerge, except that Ediff also considers
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
148 warnings and `Missing newline'-type messages to be normal output.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
149 Lines that do not match are assumed to be error messages.")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
150
20343
4327dd36b71b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
151 (defvar ediff-match-diff-line
4327dd36b71b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
152 (let ((x "\\([0-9]+\\)\\(\\|,\\([0-9]+\\)\\)"))
4327dd36b71b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
153 (concat "^" x "\\([acd]\\)" x "\C-m?$"))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
154 "Pattern to match lines produced by diff that describe differences.")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
155
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
156 (ediff-defvar-local ediff-setup-diff-regions-function nil
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
157 "value is a function symbol depending on the kind of job is to be done.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
158 For 2-way jobs and for ediff-merge, it should be `ediff-setup-diff-regions'.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
159 For jobs requiring diff3, it should be `ediff-setup-diff-regions3'.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
160
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
161 The function should take three mandatory arguments, file-A, file-B, and
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
162 file-C. It may ignore file C for diff2 jobs. It should also take
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
163 one optional arguments, diff-number to refine.")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
164
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
165
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
166 ;;; Functions
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
167
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
168 ;; Generate the difference vector and overlays for the two files
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
169 ;; With optional arg REG-TO-REFINE, refine this region.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
170 ;; File-C argument is not used here. It is there just because
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
171 ;; ediff-setup-diff-regions is called via a funcall to
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
172 ;; ediff-setup-diff-regions-function, which can also have the value
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
173 ;; ediff-setup-diff-regions3, which takes 4 arguments.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
174 (defun ediff-setup-diff-regions (file-A file-B file-C)
19774
1ecc4a79d048 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19047
diff changeset
175 (if (string-match "c" ediff-diff-options)
1ecc4a79d048 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19047
diff changeset
176 (error "Option `-c' is not allowed in `ediff-diff-options'"))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
177
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
178 ;; create, if it doesn't exist
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
179 (or (ediff-buffer-live-p ediff-diff-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
180 (setq ediff-diff-buffer
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
181 (get-buffer-create (ediff-unique-buffer-name "*ediff-diff" "*"))))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
182 (ediff-make-diff2-buffer ediff-diff-buffer file-A file-B)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
183 (ediff-prepare-error-list ediff-diff-ok-lines-regexp ediff-diff-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
184 (ediff-convert-diffs-to-overlays
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
185 (ediff-extract-diffs
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
186 ediff-diff-buffer ediff-word-mode ediff-narrow-bounds)))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
187
15482
b394c4c8b299 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15480
diff changeset
188 ;; Run the diff program on FILE1 and FILE2 and put the output in DIFF-BUFFER
b394c4c8b299 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15480
diff changeset
189 ;; Return the size of DIFF-BUFFER
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
190 (defun ediff-make-diff2-buffer (diff-buffer file1 file2)
16248
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
191 (let ((file1-size (ediff-file-size file1))
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
192 (file2-size (ediff-file-size file2)))
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
193 (cond ((not (numberp file1-size))
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
194 (message "Can't find file: %s"
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
195 (ediff-abbreviate-file-name file1))
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
196 (sit-for 2)
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
197 ;; 1 is an error exit code
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
198 1)
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
199 ((not (numberp file2-size))
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
200 (message "Can't find file: %s"
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
201 (ediff-abbreviate-file-name file2))
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
202 (sit-for 2)
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
203 ;; 1 is an error exit code
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
204 1)
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
205 ((< file1-size 0)
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
206 (message "Can't diff remote files: %s"
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
207 (ediff-abbreviate-file-name file1))
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
208 (sit-for 2)
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
209 ;; 1 is an error exit code
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
210 1)
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
211 ((< file2-size 0)
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
212 (message "Can't diff remote file: %s"
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
213 (ediff-abbreviate-file-name file2))
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
214 (sit-for 2)
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
215 (message "")
16248
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
216 ;; 1 is an error exit code
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
217 1)
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
218 (t (message "Computing differences between %s and %s ..."
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
219 (file-name-nondirectory file1)
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
220 (file-name-nondirectory file2))
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
221 ;; this erases the diff buffer automatically
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
222 (ediff-exec-process ediff-diff-program
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
223 diff-buffer
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
224 'synchronize
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
225 ediff-diff-options file1 file2)
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
226 (message "")
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
227 (ediff-with-current-buffer diff-buffer
16248
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15482
diff changeset
228 (buffer-size))))))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
229
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
230
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
231
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
232 ;; If file-A/B/C is nil, do 2-way comparison with the non-nil buffers
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
233 ;; This function works for diff3 and diff2 jobs
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
234 (defun ediff-setup-fine-diff-regions (file-A file-B file-C reg-num)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
235 (or (ediff-buffer-live-p ediff-fine-diff-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
236 (setq ediff-fine-diff-buffer
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
237 (get-buffer-create
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
238 (ediff-unique-buffer-name "*ediff-fine-diff" "*"))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
239
15175
bd6c4ed55f9c (ediff-setup-fine-diff-regions):
Richard M. Stallman <rms@gnu.org>
parents: 14582
diff changeset
240 (let (diff3-job diff-program diff-options ok-regexp diff-list)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
241 (setq diff3-job ediff-3way-job
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
242 diff-program (if diff3-job ediff-diff3-program ediff-diff-program)
15175
bd6c4ed55f9c (ediff-setup-fine-diff-regions):
Richard M. Stallman <rms@gnu.org>
parents: 14582
diff changeset
243 diff-options (if diff3-job ediff-diff3-options ediff-diff-options)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
244 ok-regexp (if diff3-job
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
245 ediff-diff3-ok-lines-regexp
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
246 ediff-diff-ok-lines-regexp))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
247
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
248 (ediff-message-if-verbose "Refining difference region %d ..." (1+ reg-num))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
249 (ediff-exec-process diff-program ediff-fine-diff-buffer 'synchronize
15175
bd6c4ed55f9c (ediff-setup-fine-diff-regions):
Richard M. Stallman <rms@gnu.org>
parents: 14582
diff changeset
250 diff-options
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
251 ;; The shuffle below is because we can compare 3-way
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
252 ;; or in several 2-way fashions, like fA fC, fA fB,
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
253 ;; or fB fC.
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
254 (if file-A file-A file-B)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
255 (if file-B file-B file-A)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
256 (if diff3-job
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
257 (if file-C file-C file-B))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
258 ) ; exec process
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
259
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
260 (ediff-prepare-error-list ok-regexp ediff-fine-diff-buffer)
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
261 (ediff-message-if-verbose
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
262 "")
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
263 ;; "Refining difference region %d ... done" (1+ reg-num))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
264
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
265 (setq diff-list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
266 (if diff3-job
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
267 (ediff-extract-diffs3
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
268 ediff-fine-diff-buffer '3way-comparison 'word-mode)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
269 (ediff-extract-diffs ediff-fine-diff-buffer 'word-mode)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
270 ;; fixup diff-list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
271 (if diff3-job
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
272 (cond ((not file-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
273 (mapcar (function (lambda (elt)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
274 (aset elt 0 nil)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
275 (aset elt 1 nil)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
276 (cdr diff-list)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
277 ((not file-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
278 (mapcar (function (lambda (elt)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
279 (aset elt 2 nil)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
280 (aset elt 3 nil)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
281 (cdr diff-list)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
282 ((not file-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
283 (mapcar (function (lambda (elt)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
284 (aset elt 4 nil)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
285 (aset elt 5 nil)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
286 (cdr diff-list)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
287 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
288
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
289 (ediff-convert-fine-diffs-to-overlays diff-list reg-num)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
290 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
291
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
292
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
293 (defun ediff-prepare-error-list (ok-regexp diff-buff)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
294 (or (ediff-buffer-live-p ediff-error-buffer)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
295 (setq ediff-error-buffer
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
296 (get-buffer-create (ediff-unique-buffer-name
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
297 "*ediff-errors" "*"))))
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
298 (ediff-with-current-buffer ediff-error-buffer
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
299 (erase-buffer)
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
300 (insert (ediff-with-current-buffer diff-buff (buffer-string)))
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
301 (goto-char (point-min))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
302 (delete-matching-lines ok-regexp)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
303 (if (memq system-type '(vax-vms axp-vms))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
304 (delete-matching-lines "^$")))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
305 ;; If diff reports errors, show them then quit.
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
306 (if (/= 0 (ediff-with-current-buffer ediff-error-buffer (buffer-size)))
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
307 (let ((ctl-buf ediff-control-buffer)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
308 (error-buf ediff-error-buffer))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
309 (ediff-skip-unsuitable-frames)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
310 (switch-to-buffer error-buf)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
311 (ediff-kill-buffer-carefully ctl-buf)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
312 (error "Errors in diff output. Diff output is in %S" diff-buff))))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
313
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
314 ;; BOUNDS specifies visibility bounds to use.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
315 ;; WORD-MODE tells whether we are in the word-mode or not.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
316 ;; If WORD-MODE, also construct vector of diffs using word numbers.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
317 ;; Else, use point values.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
318 ;; This function handles diff-2 jobs including the case of
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
319 ;; merging buffers and files without ancestor.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
320 (defun ediff-extract-diffs (diff-buffer word-mode &optional bounds)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
321 (let ((A-buffer ediff-buffer-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
322 (B-buffer ediff-buffer-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
323 (C-buffer ediff-buffer-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
324 (a-prev 1) ; this is needed to set the first diff line correctly
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
325 (b-prev 1)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
326 (c-prev 1)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
327 diff-list shift-A shift-B
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
328 )
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
329
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
330 ;; diff list contains word numbers, unless changed later
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
331 (setq diff-list (cons (if word-mode 'words 'points)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
332 diff-list))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
333 ;; we don't use visibility bounds for buffer C when merging
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
334 (if bounds
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
335 (setq shift-A
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
336 (ediff-overlay-start
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
337 (ediff-get-value-according-to-buffer-type 'A bounds))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
338 shift-B
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
339 (ediff-overlay-start
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
340 (ediff-get-value-according-to-buffer-type 'B bounds))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
341
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
342 ;; reset point in buffers A/B/C
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
343 (ediff-with-current-buffer A-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
344 (goto-char (if shift-A shift-A (point-min))))
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
345 (ediff-with-current-buffer B-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
346 (goto-char (if shift-B shift-B (point-min))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
347 (if (ediff-buffer-live-p C-buffer)
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
348 (ediff-with-current-buffer C-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
349 (goto-char (point-min))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
350
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
351 (ediff-with-current-buffer diff-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
352 (goto-char (point-min))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
353 (while (re-search-forward ediff-match-diff-line nil t)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
354 (let* ((a-begin (string-to-int (buffer-substring (match-beginning 1)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
355 (match-end 1))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
356 (a-end (let ((b (match-beginning 3))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
357 (e (match-end 3)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
358 (if b
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
359 (string-to-int (buffer-substring b e))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
360 a-begin)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
361 (diff-type (buffer-substring (match-beginning 4) (match-end 4)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
362 (b-begin (string-to-int (buffer-substring (match-beginning 5)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
363 (match-end 5))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
364 (b-end (let ((b (match-beginning 7))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
365 (e (match-end 7)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
366 (if b
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
367 (string-to-int (buffer-substring b e))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
368 b-begin)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
369 a-begin-pt a-end-pt b-begin-pt b-end-pt
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
370 c-begin c-end c-begin-pt c-end-pt)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
371 ;; fix the beginning and end numbers, because diff is somewhat
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
372 ;; strange about how it numbers lines
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
373 (if (string-equal diff-type "a")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
374 (setq b-end (1+ b-end)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
375 a-begin (1+ a-begin)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
376 a-end a-begin)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
377 (if (string-equal diff-type "d")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
378 (setq a-end (1+ a-end)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
379 b-begin (1+ b-begin)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
380 b-end b-begin)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
381 ;; (string-equal diff-type "c")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
382 (setq a-end (1+ a-end)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
383 b-end (1+ b-end))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
384
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
385 (if (eq ediff-default-variant 'default-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
386 (setq c-begin b-begin
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
387 c-end b-end)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
388 (setq c-begin a-begin
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
389 c-end a-end))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
390
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
391 ;; compute main diff vector
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
392 (if word-mode
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
393 ;; make diff-list contain word numbers
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
394 (setq diff-list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
395 (nconc diff-list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
396 (list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
397 (if (ediff-buffer-live-p C-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
398 (vector (- a-begin a-prev) (- a-end a-begin)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
399 (- b-begin b-prev) (- b-end b-begin)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
400 (- c-begin c-prev) (- c-end c-begin)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
401 nil nil ; dummy ancestor
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
402 nil ; state of diff
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
403 nil ; state of merge
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
404 nil ; state of ancestor
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
405 )
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
406 (vector (- a-begin a-prev) (- a-end a-begin)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
407 (- b-begin b-prev) (- b-end b-begin)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
408 nil nil ; dummy buf C
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
409 nil nil ; dummy ancestor
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
410 nil ; state of diff
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
411 nil ; state of merge
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
412 nil ; state of ancestor
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
413 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
414 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
415 a-prev a-end
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
416 b-prev b-end
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
417 c-prev c-end)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
418 ;; else convert lines to points
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
419 (ediff-with-current-buffer A-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
420 (forward-line (- a-begin a-prev))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
421 (setq a-begin-pt (point))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
422 (forward-line (- a-end a-begin))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
423 (setq a-end-pt (point)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
424 a-prev a-end))
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
425 (ediff-with-current-buffer B-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
426 (forward-line (- b-begin b-prev))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
427 (setq b-begin-pt (point))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
428 (forward-line (- b-end b-begin))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
429 (setq b-end-pt (point)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
430 b-prev b-end))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
431 (if (ediff-buffer-live-p C-buffer)
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
432 (ediff-with-current-buffer C-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
433 (forward-line (- c-begin c-prev))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
434 (setq c-begin-pt (point))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
435 (forward-line (- c-end c-begin))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
436 (setq c-end-pt (point)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
437 c-prev c-end)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
438 (setq diff-list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
439 (nconc
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
440 diff-list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
441 (list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
442 (if (ediff-buffer-live-p C-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
443 (vector
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
444 a-begin-pt a-end-pt b-begin-pt b-end-pt
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
445 c-begin-pt c-end-pt
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
446 nil nil ; dummy ancestor
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
447 ;; state of diff
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
448 ;; shows which buff is different from the other two
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
449 (if (eq ediff-default-variant 'default-B) 'A 'B)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
450 ediff-default-variant ; state of merge
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
451 nil ; state of ancestor
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
452 )
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
453 (vector a-begin-pt a-end-pt
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
454 b-begin-pt b-end-pt
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
455 nil nil ; dummy buf C
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
456 nil nil ; dummy ancestor
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
457 nil nil ; dummy state of diff & merge
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
458 nil ; dummy state of ancestor
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
459 )))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
460 )))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
461
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
462 ))) ; end ediff-with-current-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
463 diff-list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
464 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
465
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
466
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
467 (defun ediff-convert-diffs-to-overlays (diff-list)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
468 (ediff-set-diff-overlays-in-one-buffer 'A diff-list)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
469 (ediff-set-diff-overlays-in-one-buffer 'B diff-list)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
470 (if ediff-3way-job
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
471 (ediff-set-diff-overlays-in-one-buffer 'C diff-list))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
472 (if ediff-merge-with-ancestor-job
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
473 (ediff-set-diff-overlays-in-one-buffer 'Ancestor diff-list))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
474 ;; set up vector showing the status of merge regions
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
475 (if ediff-merge-job
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
476 (setq ediff-state-of-merge
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
477 (vconcat
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
478 (mapcar (function
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
479 (lambda (elt)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
480 (let ((state-of-merge (aref elt 9))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
481 (state-of-ancestor (aref elt 10)))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
482 (vector
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
483 (if state-of-merge (format "%S" state-of-merge))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
484 state-of-ancestor))))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
485 ;; the first elt designates type of list
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
486 (cdr diff-list))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
487 )))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
488 (message "Processing difference regions ... done"))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
489
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
490
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
491 (defun ediff-set-diff-overlays-in-one-buffer (buf-type diff-list)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
492 (let* ((current-diff -1)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
493 (buff (ediff-get-buffer buf-type))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
494 ;; ediff-extract-diffs puts the type of diff-list as the first elt
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
495 ;; of this list. The type is either 'points or 'words
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
496 (diff-list-type (car diff-list))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
497 (shift (ediff-overlay-start
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
498 (ediff-get-value-according-to-buffer-type
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
499 buf-type ediff-narrow-bounds)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
500 (limit (ediff-overlay-end
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
501 (ediff-get-value-according-to-buffer-type
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
502 buf-type ediff-narrow-bounds)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
503 diff-overlay-list list-element total-diffs
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
504 begin end pt-saved overlay state-of-diff)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
505
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
506 (setq diff-list (cdr diff-list)) ; discard diff list type
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
507 (setq total-diffs (length diff-list))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
508
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
509 ;; shift, if necessary
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
510 (ediff-with-current-buffer buff (setq pt-saved shift))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
511
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
512 (while diff-list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
513 (setq current-diff (1+ current-diff)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
514 list-element (car diff-list)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
515 begin (aref list-element (cond ((eq buf-type 'A) 0)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
516 ((eq buf-type 'B) 2)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
517 ((eq buf-type 'C) 4)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
518 (t 6))) ; Ancestor
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
519 end (aref list-element (cond ((eq buf-type 'A) 1)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
520 ((eq buf-type 'B) 3)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
521 ((eq buf-type 'C) 5)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
522 (t 7))) ; Ancestor
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
523 state-of-diff (aref list-element 8)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
524 )
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
525
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
526 (cond ((and (not (eq buf-type state-of-diff))
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
527 (not (eq buf-type 'Ancestor))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
528 (memq state-of-diff '(A B C)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
529 (setq state-of-diff
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
530 (car (delq buf-type (delq state-of-diff (list 'A 'B 'C)))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
531 (setq state-of-diff (format "=diff(%S)" state-of-diff))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
532 )
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
533 (t (setq state-of-diff nil)))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
534
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
535 ;; Put overlays at appropriate places in buffer
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
536 ;; convert word numbers to points, if necessary
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
537 (if (eq diff-list-type 'words)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
538 (progn
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
539 (ediff-with-current-buffer buff (goto-char pt-saved))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
540 (setq begin (ediff-goto-word (1+ begin) buff)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
541 end (ediff-goto-word end buff 'end))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
542 (if (> end limit) (setq end limit))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
543 (if (> begin end) (setq begin end))
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
544 (setq pt-saved (ediff-with-current-buffer buff (point)))))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
545 (setq overlay (ediff-make-bullet-proof-overlay begin end buff))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
546
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
547 (ediff-overlay-put overlay 'priority ediff-shadow-overlay-priority)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
548 (ediff-overlay-put overlay 'ediff-diff-num current-diff)
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
549 (if (and (ediff-has-face-support-p)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
550 ediff-use-faces ediff-highlight-all-diffs)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
551 (ediff-set-overlay-face
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
552 overlay (ediff-background-face buf-type current-diff)))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
553
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
554 (if (= 0 (mod current-diff 10))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
555 (message "Buffer %S: Processing difference region %d of %d"
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
556 buf-type current-diff total-diffs))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
557 ;; record all overlays for this difference
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
558 ;; the second elt, nil, is a place holder for the fine diff vector.
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
559 ;; the third elt, nil, is a place holder for no-fine-diffs flag.
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
560 (setq diff-overlay-list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
561 (nconc
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
562 diff-overlay-list
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
563 (list (vector overlay nil nil state-of-diff)))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
564 diff-list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
565 (cdr diff-list))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
566 ) ; while
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
567
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
568 (set (ediff-get-symbol-from-alist buf-type ediff-difference-vector-alist)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
569 (vconcat diff-overlay-list))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
570 ))
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
571
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
572 ;; `n' is the diff region to work on. Default is ediff-current-difference.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
573 ;; if `flag' is 'noforce then make fine-diffs only if this region's fine
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
574 ;; diffs have not been computed before.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
575 ;; if `flag' is 'skip then don't compute fine diffs for this region.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
576 (defun ediff-make-fine-diffs (&optional n flag)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
577 (or n (setq n ediff-current-difference))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
578
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
579 (if (< ediff-number-of-differences 1)
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
580 (error ediff-NO-DIFFERENCES))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
581
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
582 (if ediff-word-mode
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
583 (setq flag 'skip
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
584 ediff-auto-refine 'nix))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
585
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
586 (or (< n 0)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
587 (>= n ediff-number-of-differences)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
588 ;; n is within the range
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
589 (let ((tmp-buffer (get-buffer-create ediff-tmp-buffer))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
590 (file-A ediff-temp-file-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
591 (file-B ediff-temp-file-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
592 (file-C ediff-temp-file-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
593 (empty-A (ediff-empty-diff-region-p n 'A))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
594 (empty-B (ediff-empty-diff-region-p n 'B))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
595 (empty-C (ediff-empty-diff-region-p n 'C))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
596 (whitespace-A (ediff-whitespace-diff-region-p n 'A))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
597 (whitespace-B (ediff-whitespace-diff-region-p n 'B))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
598 (whitespace-C (ediff-whitespace-diff-region-p n 'C))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
599 cumulative-fine-diff-length)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
600
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
601 (cond ;; If one of the regions is empty (or 2 in 3way comparison)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
602 ;; then don't refine.
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
603 ;; If the region happens to be entirely whitespace or empty then
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
604 ;; mark as such.
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
605 ((> (length (delq nil (list empty-A empty-B empty-C))) 1)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
606 (if (and (ediff-looks-like-combined-merge n)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
607 ediff-merge-job)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
608 (ediff-set-fine-overlays-in-one-buffer 'C nil n))
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
609 (if ediff-3way-comparison-job
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
610 (ediff-message-if-verbose
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
611 "Region %d is empty in all buffers but %S"
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
612 (1+ n)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
613 (cond ((not empty-A) 'A)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
614 ((not empty-B) 'B)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
615 ((not empty-C) 'C)))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
616 (ediff-message-if-verbose
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
617 "Region %d in buffer %S is empty"
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
618 (1+ n)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
619 (cond (empty-A 'A)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
620 (empty-B 'B)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
621 (empty-C 'C)))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
622 )
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
623 ;; if all regions happen to be whitespace
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
624 (if (and whitespace-A whitespace-B whitespace-C)
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
625 ;; mark as space only
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
626 (ediff-mark-diff-as-space-only n t)
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
627 ;; if some regions are white and others don't, then mark as
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
628 ;; non-white-space-only
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
629 (ediff-mark-diff-as-space-only n nil)))
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
630
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
631 ;; don't compute fine diffs if diff vector exists
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
632 ((and (eq flag 'noforce) (ediff-get-fine-diff-vector n 'A))
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
633 (if (ediff-no-fine-diffs-p n)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
634 (message
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
635 "Only white-space differences in region %d %s"
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
636 (1+ n)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
637 (cond ((eq (ediff-no-fine-diffs-p n) 'A)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
638 "in buffers B & C")
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
639 ((eq (ediff-no-fine-diffs-p n) 'B)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
640 "in buffers A & C")
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
641 ((eq (ediff-no-fine-diffs-p n) 'C)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
642 "in buffers A & B")
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
643 (t "")))))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
644 ;; don't compute fine diffs for this region
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
645 ((eq flag 'skip)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
646 (or (ediff-get-fine-diff-vector n 'A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
647 (memq ediff-auto-refine '(off nix))
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
648 (ediff-message-if-verbose
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
649 "Region %d exceeds auto-refine limit. Type `%s' to refine"
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
650 (1+ n)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
651 (substitute-command-keys
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
652 "\\[ediff-make-or-kill-fine-diffs]")
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
653 )))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
654 (t
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
655 ;; recompute fine diffs
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
656 (ediff-wordify
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
657 (ediff-get-diff-posn 'A 'beg n)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
658 (ediff-get-diff-posn 'A 'end n)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
659 ediff-buffer-A
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
660 tmp-buffer
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
661 ediff-control-buffer)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
662 (setq file-A
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
663 (ediff-make-temp-file tmp-buffer "fineDiffA" file-A))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
664
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
665 (ediff-wordify
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
666 (ediff-get-diff-posn 'B 'beg n)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
667 (ediff-get-diff-posn 'B 'end n)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
668 ediff-buffer-B
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
669 tmp-buffer
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
670 ediff-control-buffer)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
671 (setq file-B
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
672 (ediff-make-temp-file tmp-buffer "fineDiffB" file-B))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
673
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
674 (if ediff-3way-job
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
675 (progn
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
676 (ediff-wordify
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
677 (ediff-get-diff-posn 'C 'beg n)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
678 (ediff-get-diff-posn 'C 'end n)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
679 ediff-buffer-C
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
680 tmp-buffer
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
681 ediff-control-buffer)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
682 (setq file-C
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
683 (ediff-make-temp-file
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
684 tmp-buffer "fineDiffC" file-C))))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
685
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
686 ;; save temp file names.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
687 (setq ediff-temp-file-A file-A
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
688 ediff-temp-file-B file-B
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
689 ediff-temp-file-C file-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
690
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
691 ;; set the new vector of fine diffs, if none exists
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
692 (cond ((and ediff-3way-job whitespace-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
693 (ediff-setup-fine-diff-regions nil file-B file-C n))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
694 ((and ediff-3way-job whitespace-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
695 (ediff-setup-fine-diff-regions file-A nil file-C n))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
696 ((and ediff-3way-job
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
697 ;; In merge-jobs, whitespace-C is t, since
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
698 ;; ediff-empty-diff-region-p returns t in this case
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
699 whitespace-C)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
700 (ediff-setup-fine-diff-regions file-A file-B nil n))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
701 (t
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
702 (ediff-setup-fine-diff-regions file-A file-B file-C n)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
703
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
704 (setq cumulative-fine-diff-length
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
705 (+ (length (ediff-get-fine-diff-vector n 'A))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
706 (length (ediff-get-fine-diff-vector n 'B))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
707 ;; in merge jobs, the merge buffer is never refined
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
708 (if (and file-C (not ediff-merge-job))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
709 (length (ediff-get-fine-diff-vector n 'C))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
710 0)))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
711
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
712 (cond ((or
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
713 ;; all regions are white space
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
714 (and whitespace-A whitespace-B whitespace-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
715 ;; none is white space and no fine diffs detected
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
716 (and (not whitespace-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
717 (not whitespace-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
718 (not (and ediff-3way-job whitespace-C))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
719 (eq cumulative-fine-diff-length 0)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
720 (ediff-mark-diff-as-space-only n t)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
721 (ediff-message-if-verbose
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
722 "Only white-space differences in region %d" (1+ n)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
723 ((eq cumulative-fine-diff-length 0)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
724 (ediff-message-if-verbose
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
725 "Only white-space differences in region %d %s"
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
726 (1+ n)
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
727 (cond (whitespace-A (ediff-mark-diff-as-space-only n 'A)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
728 "in buffers B & C")
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
729 (whitespace-B (ediff-mark-diff-as-space-only n 'B)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
730 "in buffers A & C")
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
731 (whitespace-C (ediff-mark-diff-as-space-only n 'C)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
732 "in buffers A & B"))))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
733 (t
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
734 (ediff-mark-diff-as-space-only n nil)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
735 )
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
736 ) ; end cond
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
737 (ediff-set-fine-diff-properties n)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
738 )))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
739
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
740 ;; Interface to ediff-make-fine-diffs. Checks for auto-refine limit, etc.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
741 (defun ediff-install-fine-diff-if-necessary (n)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
742 (cond ((eq ediff-auto-refine 'on)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
743 (if (and
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
744 (> ediff-auto-refine-limit
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
745 (- (ediff-get-diff-posn 'A 'end n)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
746 (ediff-get-diff-posn 'A 'beg n)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
747 (> ediff-auto-refine-limit
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
748 (- (ediff-get-diff-posn 'B 'end n)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
749 (ediff-get-diff-posn 'B 'beg n))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
750 (ediff-make-fine-diffs n 'noforce)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
751 (ediff-make-fine-diffs n 'skip)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
752
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
753 ;; highlight iff fine diffs already exist
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
754 ((eq ediff-auto-refine 'off)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
755 (ediff-make-fine-diffs n 'skip))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
756
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
757
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
758 ;; if fine diff vector is not set for diff N, then do nothing
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
759 (defun ediff-set-fine-diff-properties (n &optional default)
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
760 (or (not (ediff-has-face-support-p))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
761 (< n 0)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
762 (>= n ediff-number-of-differences)
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
763 ;; when faces are supported, set faces and priorities of fine overlays
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
764 (progn
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
765 (ediff-set-fine-diff-properties-in-one-buffer 'A n default)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
766 (ediff-set-fine-diff-properties-in-one-buffer 'B n default)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
767 (if ediff-3way-job
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
768 (ediff-set-fine-diff-properties-in-one-buffer 'C n default)))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
769
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
770 (defun ediff-set-fine-diff-properties-in-one-buffer (buf-type
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
771 n &optional default)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
772 (let ((fine-diff-vector (ediff-get-fine-diff-vector n buf-type))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
773 (face (if default
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
774 'default
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
775 (face-name
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
776 (ediff-get-symbol-from-alist
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
777 buf-type ediff-fine-diff-face-alist))))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
778 (priority (if default
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
779 0
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
780 (1+ (or (ediff-overlay-get
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
781 (symbol-value
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
782 (ediff-get-symbol-from-alist
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
783 buf-type
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
784 ediff-current-diff-overlay-alist))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
785 'priority)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
786 0)))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
787 (mapcar
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
788 (function (lambda (overl)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
789 (ediff-set-overlay-face overl face)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
790 (ediff-overlay-put overl 'priority priority)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
791 fine-diff-vector)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
792
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
793 ;; This assumes buffer C and that the region looks like a combination of
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
794 ;; regions in buffer A and C.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
795 (defun ediff-set-fine-overlays-for-combined-merge (diff-list reg-num)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
796 (let (overlay1 overlay2 overlay3)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
797 (setq overlay1 (ediff-make-bullet-proof-overlay (nth 0 diff-list)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
798 (nth 1 diff-list)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
799 ediff-buffer-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
800 overlay2 (ediff-make-bullet-proof-overlay (nth 2 diff-list)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
801 (nth 3 diff-list)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
802 ediff-buffer-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
803 overlay3 (ediff-make-bullet-proof-overlay (nth 4 diff-list)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
804 (nth 5 diff-list)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
805 ediff-buffer-C))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
806 (ediff-set-fine-diff-vector reg-num 'C (vector overlay1 overlay2 overlay3))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
807 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
808
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
809
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
810 ;; Convert diff list to overlays for a given DIFF-REGION
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
811 ;; in buffer of type BUF-TYPE
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
812 (defun ediff-set-fine-overlays-in-one-buffer (buf-type diff-list region-num)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
813 (let* ((current-diff -1)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
814 (reg-start (ediff-get-diff-posn buf-type 'beg region-num))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
815 (buff (ediff-get-buffer buf-type))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
816 combined-merge-diff-list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
817 diff-overlay-list list-element
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
818 begin end overlay)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
819
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
820 (ediff-clear-fine-differences-in-one-buffer region-num buf-type)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
821 (setq diff-list (cdr diff-list)) ; discard list type (words or points)
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
822 (ediff-with-current-buffer buff (goto-char reg-start))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
823
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
824 ;; if it is a combined merge then set overlays in buff C specially
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
825 (if (and ediff-merge-job (eq buf-type 'C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
826 (setq combined-merge-diff-list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
827 (ediff-looks-like-combined-merge region-num)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
828 (ediff-set-fine-overlays-for-combined-merge
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
829 combined-merge-diff-list region-num)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
830 ;; regular fine diff
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
831 (while diff-list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
832 (setq current-diff (1+ current-diff)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
833 list-element (car diff-list)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
834 begin (aref list-element (cond ((eq buf-type 'A) 0)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
835 ((eq buf-type 'B) 2)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
836 (t 4))) ; buf C
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
837 end (aref list-element (cond ((eq buf-type 'A) 1)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
838 ((eq buf-type 'B) 3)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
839 (t 5)))) ; buf C
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
840 (if (not (or begin end))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
841 () ; skip this diff
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
842 ;; Put overlays at appropriate places in buffers
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
843 ;; convert lines to points, if necessary
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
844 (setq begin (ediff-goto-word (1+ begin) buff)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
845 end (ediff-goto-word end buff 'end))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
846 (setq overlay (ediff-make-bullet-proof-overlay begin end buff))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
847 ;; record all overlays for this difference region
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
848 (setq diff-overlay-list (nconc diff-overlay-list (list overlay))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
849
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
850 (setq diff-list (cdr diff-list))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
851 ) ; while
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
852 ;; convert the list of difference information into a vector
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
853 ;; for fast access
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
854 (ediff-set-fine-diff-vector
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
855 region-num buf-type (vconcat diff-overlay-list))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
856 )))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
857
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
858
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
859 ;; Stolen from emerge.el
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
860 (defun ediff-get-diff3-group (file)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
861 ;; This save-excursion allows ediff-get-diff3-group to be called for the
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
862 ;; various groups of lines (1, 2, 3) in any order, and for the lines to
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
863 ;; appear in any order. The reason this is necessary is that Gnu diff3
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
864 ;; can produce the groups in the order 1, 2, 3 or 1, 3, 2.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
865 (save-excursion
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
866 (re-search-forward
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
867 (concat "^" file ":\\([0-9]+\\)\\(,\\([0-9]+\\)\\)?\\([ac]\\)$"))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
868 (beginning-of-line 2)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
869 ;; treatment depends on whether it is an "a" group or a "c" group
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
870 (if (string-equal (buffer-substring (match-beginning 4) (match-end 4)) "c")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
871 ;; it is a "c" group
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
872 (if (match-beginning 2)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
873 ;; it has two numbers
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
874 (list (string-to-int
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
875 (buffer-substring (match-beginning 1) (match-end 1)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
876 (1+ (string-to-int
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
877 (buffer-substring (match-beginning 3) (match-end 3)))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
878 ;; it has one number
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
879 (let ((x (string-to-int
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
880 (buffer-substring (match-beginning 1) (match-end 1)))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
881 (list x (1+ x))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
882 ;; it is an "a" group
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
883 (let ((x (1+ (string-to-int
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
884 (buffer-substring (match-beginning 1) (match-end 1))))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
885 (list x x)))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
886
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
887
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
888 ;; If WORD-MODE, construct vector of diffs using word numbers.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
889 ;; Else, use point values.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
890 ;; WORD-MODE also tells if we are in the word-mode or not.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
891 ;; If THREE-WAY-COMP, then it is a 3-way comparison. Else, it is merging
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
892 ;; with ancestor, in which case buffer-C contents is identical to buffer-A/B,
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
893 ;; contents (unless buffer-A is narrowed) depending on ediff-default-variant's
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
894 ;; value.
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
895 ;; BOUNDS specifies visibility bounds to use.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
896 (defun ediff-extract-diffs3 (diff-buffer word-mode three-way-comp
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
897 &optional bounds)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
898 (let ((A-buffer ediff-buffer-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
899 (B-buffer ediff-buffer-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
900 (C-buffer ediff-buffer-C)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
901 (anc-buffer ediff-ancestor-buffer)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
902 (a-prev 1) ; needed to set the first diff line correctly
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
903 (b-prev 1)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
904 (c-prev 1)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
905 (anc-prev 1)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
906 diff-list shift-A shift-B shift-C
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
907 )
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
908
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
909 ;; diff list contains word numbers or points, depending on word-mode
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
910 (setq diff-list (cons (if word-mode 'words 'points)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
911 diff-list))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
912 (if bounds
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
913 (setq shift-A
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
914 (ediff-overlay-start
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
915 (ediff-get-value-according-to-buffer-type 'A bounds))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
916 shift-B
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
917 (ediff-overlay-start
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
918 (ediff-get-value-according-to-buffer-type 'B bounds))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
919 shift-C
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
920 (if three-way-comp
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
921 (ediff-overlay-start
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
922 (ediff-get-value-according-to-buffer-type 'C bounds)))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
923
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
924 ;; reset point in buffers A, B, C
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
925 (ediff-with-current-buffer A-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
926 (goto-char (if shift-A shift-A (point-min))))
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
927 (ediff-with-current-buffer B-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
928 (goto-char (if shift-B shift-B (point-min))))
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
929 (if three-way-comp
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
930 (ediff-with-current-buffer C-buffer
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
931 (goto-char (if shift-C shift-C (point-min)))))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
932 (if (ediff-buffer-live-p anc-buffer)
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
933 (ediff-with-current-buffer anc-buffer
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
934 (goto-char (point-min))))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
935
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
936 (ediff-with-current-buffer diff-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
937 (goto-char (point-min))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
938 (while (re-search-forward ediff-match-diff3-line nil t)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
939 ;; leave point after matched line
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
940 (beginning-of-line 2)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
941 (let ((agreement (buffer-substring (match-beginning 1) (match-end 1))))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
942 ;; if the files A and B are the same and not 3way-comparison,
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
943 ;; ignore the difference
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
944 (if (or three-way-comp (not (string-equal agreement "3")))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
945 (let* ((a-begin (car (ediff-get-diff3-group "1")))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
946 (a-end (nth 1 (ediff-get-diff3-group "1")))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
947 (b-begin (car (ediff-get-diff3-group "2")))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
948 (b-end (nth 1 (ediff-get-diff3-group "2")))
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
949 (c-or-anc-begin (car (ediff-get-diff3-group "3")))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
950 (c-or-anc-end (nth 1 (ediff-get-diff3-group "3")))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
951 (state-of-merge
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
952 (cond ((string-equal agreement "1") 'prefer-A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
953 ((string-equal agreement "2") 'prefer-B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
954 (t ediff-default-variant)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
955 (state-of-diff-merge
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
956 (if (memq state-of-merge '(default-A prefer-A)) 'B 'A))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
957 (state-of-diff-comparison
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
958 (cond ((string-equal agreement "1") 'A)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
959 ((string-equal agreement "2") 'B)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
960 ((string-equal agreement "3") 'C)))
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
961 state-of-ancestor
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
962 c-begin c-end
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
963 a-begin-pt a-end-pt
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
964 b-begin-pt b-end-pt
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
965 c-begin-pt c-end-pt
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
966 anc-begin-pt anc-end-pt)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
967
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
968 (setq state-of-ancestor
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
969 (= c-or-anc-begin c-or-anc-end))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
970
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
971 (cond (three-way-comp
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
972 (setq c-begin c-or-anc-begin
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
973 c-end c-or-anc-end))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
974 ((eq ediff-default-variant 'default-B)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
975 (setq c-begin b-begin
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
976 c-end b-end))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
977 (t
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
978 (setq c-begin a-begin
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
979 c-end a-end)))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
980
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
981 ;; compute main diff vector
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
982 (if word-mode
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
983 ;; make diff-list contain word numbers
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
984 (setq diff-list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
985 (nconc diff-list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
986 (list (vector
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
987 (- a-begin a-prev) (- a-end a-begin)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
988 (- b-begin b-prev) (- b-end b-begin)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
989 (- c-begin c-prev) (- c-end c-begin)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
990 nil nil ; dummy ancestor
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
991 nil ; state of diff
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
992 nil ; state of merge
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
993 nil ; state of ancestor
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
994 )))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
995 a-prev a-end
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
996 b-prev b-end
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
997 c-prev c-end)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
998 ;; else convert lines to points
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
999 (ediff-with-current-buffer A-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1000 (forward-line (- a-begin a-prev))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1001 (setq a-begin-pt (point))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1002 (forward-line (- a-end a-begin))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1003 (setq a-end-pt (point)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1004 a-prev a-end))
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
1005 (ediff-with-current-buffer B-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1006 (forward-line (- b-begin b-prev))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1007 (setq b-begin-pt (point))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1008 (forward-line (- b-end b-begin))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1009 (setq b-end-pt (point)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1010 b-prev b-end))
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
1011 (ediff-with-current-buffer C-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1012 (forward-line (- c-begin c-prev))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1013 (setq c-begin-pt (point))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1014 (forward-line (- c-end c-begin))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1015 (setq c-end-pt (point)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1016 c-prev c-end))
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1017 (if (ediff-buffer-live-p anc-buffer)
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
1018 (ediff-with-current-buffer anc-buffer
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1019 (forward-line (- c-or-anc-begin anc-prev))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1020 (setq anc-begin-pt (point))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1021 (forward-line (- c-or-anc-end c-or-anc-begin))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1022 (setq anc-end-pt (point)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1023 anc-prev c-or-anc-end)))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1024 (setq diff-list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1025 (nconc
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1026 diff-list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1027 ;; if comparing with ancestor, then there also is a
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1028 ;; state-of-difference marker
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1029 (if three-way-comp
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1030 (list (vector
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1031 a-begin-pt a-end-pt
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1032 b-begin-pt b-end-pt
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1033 c-begin-pt c-end-pt
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1034 nil nil ; ancestor begin/end
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1035 state-of-diff-comparison
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1036 nil ; state of merge
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1037 nil ; state of ancestor
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1038 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1039 (list (vector a-begin-pt a-end-pt
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1040 b-begin-pt b-end-pt
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1041 c-begin-pt c-end-pt
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1042 anc-begin-pt anc-end-pt
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1043 state-of-diff-merge
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1044 state-of-merge
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1045 state-of-ancestor
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1046 )))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1047 )))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1048 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1049
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
1050 ))) ; end ediff-with-current-buffer
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1051 diff-list
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1052 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1053
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1054 ;; Generate the difference vector and overlays for three files
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1055 ;; File-C is either the third file to compare (in case of 3-way comparison)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1056 ;; or it is the ancestor file.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1057 (defun ediff-setup-diff-regions3 (file-A file-B file-C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1058 (or (ediff-buffer-live-p ediff-diff-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1059 (setq ediff-diff-buffer
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1060 (get-buffer-create (ediff-unique-buffer-name "*ediff-diff" "*"))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1061
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1062 (message "Computing differences ...")
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1063 (ediff-exec-process ediff-diff3-program ediff-diff-buffer 'synchronize
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1064 ediff-diff3-options file-A file-B file-C)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1065
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1066 (ediff-prepare-error-list ediff-diff3-ok-lines-regexp ediff-diff-buffer)
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1067 ;;(message "Computing differences ... done")
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1068 (ediff-convert-diffs-to-overlays
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1069 (ediff-extract-diffs3
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1070 ediff-diff-buffer
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1071 ediff-word-mode ediff-3way-comparison-job ediff-narrow-bounds)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1072 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1073
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1074
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
1075 ;; Execute PROGRAM asynchronously, unless OS/2, Windows-*, or DOS, or unless
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
1076 ;; SYNCH is non-nil. BUFFER must be a buffer object, and must be alive. The
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
1077 ;; OPTIONS arg is a list of options to pass to PROGRAM. It may be a blank
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
1078 ;; string. All elements in FILES must be strings. We also delete nil from
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
1079 ;; args.
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
1080 (defun ediff-exec-process (program buffer synch options &rest files)
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
1081 (let ((data (match-data))
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
1082 args)
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
1083 (setq args (append (split-string options) files))
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
1084 (setq args (delete "" (delq nil args))) ; delete nil and "" from arguments
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1085 (unwind-protect
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1086 (let ((directory default-directory)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1087 proc)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1088 (save-excursion
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1089 (set-buffer buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1090 (erase-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1091 (setq default-directory directory)
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
1092 (if (or (memq system-type '(emx ms-dos windows-nt windows-95))
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
1093 synch)
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
1094 ;; In OS/2 (emx) do it synchronously, since OS/2 doesn't let us
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1095 ;; delete files used by other processes. Thus, in ediff-buffers
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1096 ;; and similar functions, we can't delete temp files because
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
1097 ;; they might be used by the asynch process that computes
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1098 ;; custom diffs. So, we have to wait till custom diff
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1099 ;; subprocess is done.
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
1100 ;; Similarly for Windows-*
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
1101 ;; In DOS, must synchronize because DOS doesn't have
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
1102 ;; asynchronous processes.
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1103 (apply 'call-process program nil buffer nil args)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1104 ;; On other systems, do it asynchronously.
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1105 (setq proc (get-buffer-process buffer))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1106 (if proc (kill-process proc))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1107 (setq proc
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1108 (apply 'start-process "Custom Diff" buffer program args))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1109 (setq mode-line-process '(":%s"))
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1110 (set-process-sentinel proc 'ediff-process-sentinel)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1111 (set-process-filter proc 'ediff-process-filter)
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1112 )))
21940
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 21154
diff changeset
1113 (store-match-data data))))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1114
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1115 ;; This is shell-command-filter from simple.el in FSF Emacs.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1116 ;; Copied here because XEmacs doesn't have it.
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1117 (defun ediff-process-filter (proc string)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1118 ;; Do save-excursion by hand so that we can leave point numerically unchanged
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1119 ;; despite an insertion immediately after it.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1120 (let* ((obuf (current-buffer))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1121 (buffer (process-buffer proc))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1122 opoint
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1123 (window (get-buffer-window buffer))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1124 (pos (window-start window)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1125 (unwind-protect
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1126 (progn
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1127 (set-buffer buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1128 (or (= (point) (point-max))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1129 (setq opoint (point)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1130 (goto-char (point-max))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1131 (insert-before-markers string))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1132 ;; insert-before-markers moved this marker: set it back.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1133 (set-window-start window pos)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1134 ;; Finish our save-excursion.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1135 (if opoint
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1136 (goto-char opoint))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1137 (set-buffer obuf))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1138
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1139 ;; like shell-command-sentinel but doesn't print an exit status message
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1140 ;; we do this because diff always exits with status 1, if diffs are found
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1141 ;; so shell-command-sentinel displays a confusing message to the user
13127
4ca49c2e0c03 (ediff-setup-diff-regions,ediff-setup-diff-regions3,
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12086
diff changeset
1142 (defun ediff-process-sentinel (process signal)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1143 (if (and (memq (process-status process) '(exit signal))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1144 (buffer-name (process-buffer process)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1145 (progn
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1146 (save-excursion
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1147 (set-buffer (process-buffer process))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1148 (setq mode-line-process nil))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1149 (delete-process process))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1150
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1151
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1152 ;;; Word functions used to refine the current diff
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1153
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1154 (defvar ediff-forward-word-function 'ediff-forward-word
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1155 "*Function to call to move to the next word.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1156 Used for splitting difference regions into individual words.")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1157
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1158 (defvar ediff-whitespace " \n\t\f"
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1159 "*Characters constituting white space.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1160 These characters are ignored when differing regions are split into words.")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1161
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1162 ;;(defvar ediff-word-1 "a-zA-Z---_`'.?!:"
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1163 (defvar ediff-word-1 "a-zA-Z---_"
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1164 "*Characters that constitute words of type 1.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1165 More precisely, [ediff-word-1] is a regexp that matches type 1 words.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1166 See `ediff-forward-word' for more details.")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1167
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1168 (defvar ediff-word-2 "0-9.,"
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1169 "*Characters that constitute words of type 2.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1170 More precisely, [ediff-word-2] is a regexp that matches type 2 words.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1171 See `ediff-forward-word' for more details.")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1172
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1173 (defvar ediff-word-3 "`'?!:;\"{}[]()"
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1174 "*Characters that constitute words of type 3.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1175 More precisely, [ediff-word-3] is a regexp that matches type 3 words.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1176 See `ediff-forward-word' for more details.")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1177
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1178 (defvar ediff-word-4
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1179 (concat "^" ediff-word-1 ediff-word-2 ediff-word-3 ediff-whitespace)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1180 "*Characters that constitute words of type 4.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1181 More precisely, [ediff-word-4] is a regexp that matches type 4 words.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1182 See `ediff-forward-word' for more details.")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1183
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1184 ;; Split region along word boundaries. Each word will be on its own line.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1185 ;; Output to buffer out-buffer.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1186 (defun ediff-forward-word ()
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1187 "Move point one word forward.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1188 There are four types of words, each of which consists entirely of
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1189 characters in `ediff-word-1', `ediff-word-2', `ediff-word-3', or
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1190 `ediff-word-4'. Words are recognized by passing these in turn as the
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1191 argument to `skip-chars-forward'."
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1192 (or (> (skip-chars-forward ediff-word-1) 0)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1193 (> (skip-chars-forward ediff-word-2) 0)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1194 (> (skip-chars-forward ediff-word-3) 0)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1195 (> (skip-chars-forward ediff-word-4) 0)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1196 ))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1197
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1198 (defun ediff-wordify (beg end in-buffer out-buffer &optional control-buf)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1199 (let (sv-point string)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1200 (save-excursion
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1201 (set-buffer in-buffer)
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
1202 (setq string (buffer-substring-no-properties beg end))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1203
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1204 (set-buffer out-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1205 (erase-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1206 (insert string)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1207 (goto-char (point-min))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1208 (skip-chars-forward ediff-whitespace)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1209 (delete-region (point-min) (point))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1210
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1211 (while (not (eobp))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1212 ;; eval incontrol buf to let user create local versions for
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1213 ;; different invocations
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1214 (if control-buf
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1215 (funcall
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
1216 (ediff-with-current-buffer control-buf ediff-forward-word-function))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1217 (funcall ediff-forward-word-function))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1218 (setq sv-point (point))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1219 (skip-chars-forward ediff-whitespace)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1220 (delete-region sv-point (point))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1221 (insert "\n")))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1222
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1223 ;; copy string from BEG END from IN-BUF to OUT-BUF
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1224 (defun ediff-copy-to-buffer (beg end in-buffer out-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1225 (let (string)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1226 (save-excursion
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1227 (set-buffer in-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1228 (setq string (buffer-substring beg end))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1229
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1230 (set-buffer out-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1231 (erase-buffer)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1232 (insert string)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1233 (goto-char (point-min)))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1234
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1235
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1236 ;; goto word #n starting at current position in buffer `buf'
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1237 ;; For ediff, a word is either a string of a-z,A-Z, incl `-' and `_';
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1238 ;; or a string of other non-blanks. A blank is a \n\t\f
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1239 ;; If `flag' is non-nil, goto the end of the n-th word.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1240 (defun ediff-goto-word (n buf &optional flag)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1241 ;; remember val ediff-forward-word-function has in ctl buf
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1242 (let ((fwd-word-fun ediff-forward-word-function))
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
1243 (ediff-with-current-buffer buf
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1244 (skip-chars-forward ediff-whitespace)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1245 (while (> n 1)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1246 (funcall fwd-word-fun)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1247 (skip-chars-forward ediff-whitespace)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1248 (setq n (1- n)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1249 (if (and flag (> n 0))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1250 (funcall fwd-word-fun))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1251 (point))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1252
20206
f44ff2c52fac new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19774
diff changeset
1253 (defun ediff-same-file-contents (f1 f2)
f44ff2c52fac new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19774
diff changeset
1254 "T if F1 and F2 have identical contents."
f44ff2c52fac new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19774
diff changeset
1255 (let ((res (call-process ediff-cmp-program nil nil nil f1 f2)))
f44ff2c52fac new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19774
diff changeset
1256 (and (numberp res) (eq res 0))))
f44ff2c52fac new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19774
diff changeset
1257
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1258
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
1259 ;;; Local Variables:
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
1260 ;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
1261 ;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
1262 ;;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
1263 ;;; End:
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15175
diff changeset
1264
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
1265
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1266 ;; ediff-diff.el ends here