annotate lisp/ediff-merg.el @ 93762:46d39c0f7bf9

(uniscribe_shape): Increase items buffer size. Give up if glyph indices not supported. Use uniscribe obtained ABC widths for individual metrics. Map glyph clusters back to characters using fClusterStart flag. Return number of glyphs produced, not chars processed.
author Jason Rumney <jasonr@gnu.org>
date Sun, 06 Apr 2008 01:04:45 +0000
parents 6523ed37006c
children 1e3a407766b9
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-merg.el --- merging utilities
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2
64762
41bb365f41c4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64091
diff changeset
3 ;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
79721
73661ddc7ac7 Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78236
diff changeset
4 ;; 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5
42602
633233bf2bbf 2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 42206
diff changeset
6 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
78236
9355f9b7bbff Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents: 75347
diff changeset
12 ;; the Free Software Foundation; either version 3, or (at your option)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
13 ;; any later version.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
14
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
19
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64091
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
22 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
23 ;; Boston, MA 02110-1301, USA.
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
24
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 33394
diff changeset
25 ;;; Commentary:
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 33394
diff changeset
26
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
27 ;;; Code:
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
28
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
29
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
30 ;; compiler pacifier
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
31 (defvar ediff-window-A)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
32 (defvar ediff-window-B)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
33 (defvar ediff-window-C)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
34 (defvar ediff-merge-window-share)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
35 (defvar ediff-window-config-saved)
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
36
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
37 (eval-when-compile
93652
6523ed37006c 2008-04-04 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 87649
diff changeset
38 (require 'ediff-init)
6523ed37006c 2008-04-04 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 87649
diff changeset
39 (require 'ediff-util)
6523ed37006c 2008-04-04 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 87649
diff changeset
40 )
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
41 ;; end pacifier
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
42
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
43 (require 'ediff-init)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
44
18839
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
45 (defcustom ediff-quit-merge-hook 'ediff-maybe-save-and-delete-merge
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
46 "*Hooks to run before quitting a merge job.
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
47 The most common use is to save and delete the merge buffer."
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
48 :type 'hook
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
49 :group 'ediff-merge)
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18054
diff changeset
50
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
51
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
52 (defcustom ediff-default-variant 'combined
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
53 "*The variant to be used as a default for buffer C in merging.
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
54 Valid values are the symbols `default-A', `default-B', and `combined'."
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
55 :type '(radio (const default-A) (const default-B) (const combined))
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
56 :group 'ediff-merge)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
57
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
58 (defcustom ediff-combination-pattern
26585
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
59 '("<<<<<<< variant A" A ">>>>>>> variant B" B "####### Ancestor" Ancestor "======= end")
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
60 "*Pattern to be used for combining difference regions in buffers A and B.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
61 The value must be a list of the form
74585
402a04b0362f (ediff-combination-pattern): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 68997
diff changeset
62 \(STRING1 bufspec1 STRING2 bufspec2 STRING3 bufspec3 STRING4)
26585
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
63 where bufspec is the symbol A, B, or Ancestor. For instance, if the value is
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
64 '(STRING1 A STRING2 Ancestor STRING3 B STRING4) then the
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
65 combined text will look like this:
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
66
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
67 STRING1
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
68 diff region from variant A
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
69 STRING2
26585
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
70 diff region from the ancestor
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
71 STRING3
26585
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
72 diff region from variant B
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
73 STRING4
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
74 "
26585
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
75 :type '(choice (list string symbol string symbol string)
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
76 (list string symbol string symbol string symbol string))
18054
0b9d9cbf3cd4 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16248
diff changeset
77 :group 'ediff-merge)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
78
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
79 (defcustom ediff-show-clashes-only nil
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
80 "*If t, show only those diff regions where both buffers disagree with the ancestor.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
81 This means that regions that have status prefer-A or prefer-B will be
74585
402a04b0362f (ediff-combination-pattern): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 68997
diff changeset
82 skipped over. A value of nil means show all regions."
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
83 :type 'boolean
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
84 :group 'ediff-merge
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
85 )
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
86 (make-variable-buffer-local 'ediff-show-clashes-only)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
87
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
88 (defcustom ediff-skip-merge-regions-that-differ-from-default nil
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
89 "*If t, show only the regions that have not been changed by the user.
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
90 A region is considered to have been changed if it is different from the current
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
91 default (`default-A', `default-B', `combined') and it hasn't been marked as
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
92 `prefer-A' or `prefer-B'.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
93 A region is considered to have been changed also when it is marked as
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
94 as `prefer-A', but is different from the corresponding difference region in
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
95 Buffer A or if it is marked as `prefer-B' and is different from the region in
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
96 Buffer B."
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
97 :type 'boolean
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
98 :group 'ediff-merge
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
99 )
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
100 (make-variable-buffer-local 'ediff-skip-merge-regions-that-differ-from-default)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
101
65856
d64aeb0dc54e 2005-10-05 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 64762
diff changeset
102 ;; check if there is no clash between the ancestor and one of the variants.
66687
26faad662ac6 2005-11-04 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 65856
diff changeset
103 ;; if it is not a merge job then return true
65856
d64aeb0dc54e 2005-10-05 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 64762
diff changeset
104 (defsubst ediff-merge-region-is-non-clash (n)
66687
26faad662ac6 2005-11-04 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 65856
diff changeset
105 (if (ediff-merge-job)
26faad662ac6 2005-11-04 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 65856
diff changeset
106 (string-match "prefer" (or (ediff-get-state-of-merge n) ""))
26faad662ac6 2005-11-04 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 65856
diff changeset
107 t))
65856
d64aeb0dc54e 2005-10-05 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 64762
diff changeset
108
20003
9bc6a4017c8c new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19047
diff changeset
109 ;; If ediff-show-clashes-only, check if there is no clash between the ancestor
9bc6a4017c8c new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19047
diff changeset
110 ;; and one of the variants.
65856
d64aeb0dc54e 2005-10-05 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 64762
diff changeset
111 (defsubst ediff-merge-region-is-non-clash-to-skip (n)
20003
9bc6a4017c8c new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19047
diff changeset
112 (and ediff-show-clashes-only
65856
d64aeb0dc54e 2005-10-05 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 64762
diff changeset
113 (ediff-merge-region-is-non-clash n)))
20003
9bc6a4017c8c new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19047
diff changeset
114
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
115 ;; If ediff-skip-changed-regions, check if the merge region differs from
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
116 ;; the current default. If a region is different from the default, it means
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
117 ;; that the user has made determination as to how to merge for this particular
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
118 ;; region.
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
119 (defsubst ediff-skip-merge-region-if-changed-from-default-p (n)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
120 (and ediff-skip-merge-regions-that-differ-from-default
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
121 (ediff-merge-changed-from-default-p n 'prefers-too)))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
122
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
123
26585
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
124 (defun ediff-get-combined-region (n)
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
125 (let ((pattern-list ediff-combination-pattern)
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
126 (combo-region "")
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
127 (err-msg
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
128 "ediff-combination-pattern: Invalid format. Please consult the documentation")
42602
633233bf2bbf 2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 42206
diff changeset
129 region-delim region-spec)
26585
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
130
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
131 (if (< (length pattern-list) 5)
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
132 (error err-msg))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
133
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
134 (while (> (length pattern-list) 2)
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
135 (setq region-delim (nth 0 pattern-list)
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
136 region-spec (nth 1 pattern-list))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
137 (or (and (stringp region-delim) (memq region-spec '(A B Ancestor)))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
138 (error err-msg))
13216
b9dc8cc658d5 Moved defsubsts up.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 13129
diff changeset
139
42602
633233bf2bbf 2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 42206
diff changeset
140 (condition-case nil
26585
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
141 (setq combo-region
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
142 (concat combo-region
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
143 region-delim "\n"
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
144 (ediff-get-region-contents
26585
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
145 n region-spec ediff-control-buffer)))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
146 (error ""))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
147 (setq pattern-list (cdr (cdr pattern-list)))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
148 )
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
149
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
150 (setq region-delim (nth 0 pattern-list))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
151 (or (stringp region-delim)
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
152 (error err-msg))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
153 (setq combo-region (concat combo-region region-delim "\n"))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
154 ))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
155
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
156 ;;(defsubst ediff-make-combined-diff (regA regB)
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
157 ;; (concat (nth 0 ediff-combination-pattern) "\n"
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
158 ;; regA
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
159 ;; (nth 1 ediff-combination-pattern) "\n"
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
160 ;; regB
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
161 ;; (nth 2 ediff-combination-pattern) "\n"))
13216
b9dc8cc658d5 Moved defsubsts up.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 13129
diff changeset
162
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
163 (defsubst ediff-set-state-of-all-diffs-in-all-buffers (ctl-buf)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
164 (let ((n 0))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
165 (while (< n ediff-number-of-differences)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
166 (ediff-set-state-of-diff-in-all-buffers n ctl-buf)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
167 (setq n (1+ n)))))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
168
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
169 (defun ediff-set-state-of-diff-in-all-buffers (n ctl-buf)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
170 (let ((regA (ediff-get-region-contents n 'A ctl-buf))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
171 (regB (ediff-get-region-contents n 'B ctl-buf))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
172 (regC (ediff-get-region-contents n 'C ctl-buf)))
12167
87f8b79217b3 Converted xemacs *screen* nomenclature to *frame*.
Karl Heuer <kwzh@gnu.org>
parents: 11234
diff changeset
173 (cond ((and (string= regA regB) (string= regA regC))
87f8b79217b3 Converted xemacs *screen* nomenclature to *frame*.
Karl Heuer <kwzh@gnu.org>
parents: 11234
diff changeset
174 (ediff-set-state-of-diff n 'A "=diff(B)")
87f8b79217b3 Converted xemacs *screen* nomenclature to *frame*.
Karl Heuer <kwzh@gnu.org>
parents: 11234
diff changeset
175 (ediff-set-state-of-diff n 'B "=diff(C)")
87f8b79217b3 Converted xemacs *screen* nomenclature to *frame*.
Karl Heuer <kwzh@gnu.org>
parents: 11234
diff changeset
176 (ediff-set-state-of-diff n 'C "=diff(A)"))
87f8b79217b3 Converted xemacs *screen* nomenclature to *frame*.
Karl Heuer <kwzh@gnu.org>
parents: 11234
diff changeset
177 ((string= regA regB)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
178 (ediff-set-state-of-diff n 'A "=diff(B)")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
179 (ediff-set-state-of-diff n 'B "=diff(A)")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
180 (ediff-set-state-of-diff n 'C nil))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
181 ((string= regA regC)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
182 (ediff-set-state-of-diff n 'A "=diff(C)")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
183 (ediff-set-state-of-diff n 'C "=diff(A)")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
184 (ediff-set-state-of-diff n 'B nil))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
185 ((string= regB regC)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
186 (ediff-set-state-of-diff n 'C "=diff(B)")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
187 (ediff-set-state-of-diff n 'B "=diff(C)")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
188 (ediff-set-state-of-diff n 'A nil))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
189 ((string= regC (ediff-get-combined-region n))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
190 (ediff-set-state-of-diff n 'A nil)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
191 (ediff-set-state-of-diff n 'B nil)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
192 (ediff-set-state-of-diff n 'C "=diff(A+B)"))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
193 (t (ediff-set-state-of-diff n 'A nil)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
194 (ediff-set-state-of-diff n 'B nil)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
195 (ediff-set-state-of-diff n 'C nil)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
196 ))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
197
12167
87f8b79217b3 Converted xemacs *screen* nomenclature to *frame*.
Karl Heuer <kwzh@gnu.org>
parents: 11234
diff changeset
198 (defun ediff-set-merge-mode ()
87f8b79217b3 Converted xemacs *screen* nomenclature to *frame*.
Karl Heuer <kwzh@gnu.org>
parents: 11234
diff changeset
199 (normal-mode t)
87f8b79217b3 Converted xemacs *screen* nomenclature to *frame*.
Karl Heuer <kwzh@gnu.org>
parents: 11234
diff changeset
200 (remove-hook 'local-write-file-hooks 'ediff-set-merge-mode))
13129
9d432c26c3a7 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12167
diff changeset
201
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
202
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
203 ;; Go over all diffs starting with DIFF-NUM and copy regions into buffer C
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
204 ;; according to the state of the difference.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
205 ;; Since ediff-copy-diff refuses to copy identical diff regions, there is
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
206 ;; no need to optimize ediff-do-merge any further.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
207 ;;
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
208 ;; If re-merging, change state of merge in all diffs starting with
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
209 ;; DIFF-NUM, except those where the state is prefer-* or where it is
12167
87f8b79217b3 Converted xemacs *screen* nomenclature to *frame*.
Karl Heuer <kwzh@gnu.org>
parents: 11234
diff changeset
210 ;; `default-*' or `combined' but the buf C region appears to be modified
87f8b79217b3 Converted xemacs *screen* nomenclature to *frame*.
Karl Heuer <kwzh@gnu.org>
parents: 11234
diff changeset
211 ;; since last set by default.
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
212 (defun ediff-do-merge (diff-num &optional remerging)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
213 (if (< diff-num 0) (setq diff-num 0))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
214 (let ((n diff-num)
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
215 ;;(default-state-of-merge (format "%S" ediff-default-variant))
12167
87f8b79217b3 Converted xemacs *screen* nomenclature to *frame*.
Karl Heuer <kwzh@gnu.org>
parents: 11234
diff changeset
216 do-not-copy state-of-merge)
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
217 (while (< n ediff-number-of-differences)
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
218 (setq do-not-copy nil) ; reset after each cycle
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
219 (if (= (mod n 10) 0)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
220 (message "%s buffers A & B into C ... region %d of %d"
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
221 (if remerging "Re-merging" "Merging")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
222 n
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
223 ediff-number-of-differences))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
224
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
225 (setq state-of-merge (ediff-get-state-of-merge n))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
226
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
227 (if remerging
42602
633233bf2bbf 2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 42206
diff changeset
228 ;;(let ((reg-A (ediff-get-region-contents n 'A ediff-control-buffer))
633233bf2bbf 2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 42206
diff changeset
229 ;; (reg-B (ediff-get-region-contents n 'B ediff-control-buffer))
633233bf2bbf 2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 42206
diff changeset
230 ;; (reg-C (ediff-get-region-contents n 'C ediff-control-buffer)))
633233bf2bbf 2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 42206
diff changeset
231 (let ()
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
232
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14582
diff changeset
233 ;; if region was edited since it was first set by default
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
234 (if (or (ediff-merge-changed-from-default-p n)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
235 ;; was preferred
12167
87f8b79217b3 Converted xemacs *screen* nomenclature to *frame*.
Karl Heuer <kwzh@gnu.org>
parents: 11234
diff changeset
236 (string-match "prefer" state-of-merge))
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
237 ;; then ignore
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
238 (setq do-not-copy t))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
239
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
240 ;; change state of merge for this diff, if necessary
12167
87f8b79217b3 Converted xemacs *screen* nomenclature to *frame*.
Karl Heuer <kwzh@gnu.org>
parents: 11234
diff changeset
241 (if (and (string-match "\\(default\\|combined\\)" state-of-merge)
87f8b79217b3 Converted xemacs *screen* nomenclature to *frame*.
Karl Heuer <kwzh@gnu.org>
parents: 11234
diff changeset
242 (not do-not-copy))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
243 (ediff-set-state-of-merge
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
244 n (format "%S" ediff-default-variant)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
245 ))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
246
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
247 ;; state-of-merge may have changed via ediff-set-state-of-merge, so
12167
87f8b79217b3 Converted xemacs *screen* nomenclature to *frame*.
Karl Heuer <kwzh@gnu.org>
parents: 11234
diff changeset
248 ;; check it once again
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
249 (setq state-of-merge (ediff-get-state-of-merge n))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
250
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
251 (or do-not-copy
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
252 (if (string= state-of-merge "combined")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
253 ;; use n+1 because ediff-combine-diffs works via user numbering
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
254 ;; of diffs, which is 1+ to what ediff uses internally
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
255 (ediff-combine-diffs (1+ n) 'batch)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
256 (ediff-copy-diff
12167
87f8b79217b3 Converted xemacs *screen* nomenclature to *frame*.
Karl Heuer <kwzh@gnu.org>
parents: 11234
diff changeset
257 n (if (string-match "-A" state-of-merge) 'A 'B) 'C 'batch)))
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
258 (setq n (1+ n)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
259 (message "Merging buffers A & B into C ... Done")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
260 ))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
261
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
262
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
263 (defun ediff-re-merge ()
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
264 "Remerge unmodified diff regions using a new default. Start with the current region."
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
265 (interactive)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
266 (let* ((default-variant-alist
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
267 (list '("default-A") '("default-B") '("combined")))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
268 (actual-alist
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
269 (delete (list (symbol-name ediff-default-variant))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
270 default-variant-alist)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
271 (setq ediff-default-variant
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
272 (intern
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
273 (completing-read
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
274 (format "Current merge default is `%S'. New default: "
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
275 ediff-default-variant)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
276 actual-alist nil 'must-match)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
277 (ediff-do-merge ediff-current-difference 'remerge)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
278 (ediff-recenter)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
279 ))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
280
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
281 (defun ediff-shrink-window-C (arg)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
282 "Shrink window C to just one line.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
283 With a prefix argument, returns window C to its normal size.
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
284 Used only for merging jobs."
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
285 (interactive "P")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
286 (if (not ediff-merge-job)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
287 (error "ediff-shrink-window-C can be used only for merging jobs"))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
288 (cond ((eq arg '-) (setq arg -1))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
289 ((not (numberp arg)) (setq arg nil)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
290 (cond ((null arg)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
291 (let ((ediff-merge-window-share
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
292 (if (< (window-height ediff-window-C) 3)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
293 ediff-merge-window-share 0)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
294 (setq ediff-window-config-saved "") ; force redisplay
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
295 (ediff-recenter 'no-rehighlight)))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
296 ((and (< arg 0) (> (window-height ediff-window-C) 2))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
297 (setq ediff-merge-window-share (* ediff-merge-window-share 0.9))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
298 (setq ediff-window-config-saved "") ; force redisplay
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
299 (ediff-recenter 'no-rehighlight))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
300 ((and (> arg 0) (> (window-height ediff-window-A) 2))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
301 (setq ediff-merge-window-share (* ediff-merge-window-share 1.1))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
302 (setq ediff-window-config-saved "") ; force redisplay
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
303 (ediff-recenter 'no-rehighlight))))
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
304
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
305
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
306 ;; N here is the user's region number. It is 1+ what Ediff uses internally.
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
307 (defun ediff-combine-diffs (n &optional batch-invocation)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
308 "Combine Nth diff regions of buffers A and B and place the combination in C.
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
309 N is a prefix argument. If nil, combine the current difference regions.
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
310 Combining is done according to the specifications in variable
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
311 `ediff-combination-pattern'."
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
312 (interactive "P")
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
313 (setq n (if (numberp n) (1- n) ediff-current-difference))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
314
42602
633233bf2bbf 2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 42206
diff changeset
315 (let (reg-combined)
26585
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
316 ;;(setq regA (ediff-get-region-contents n 'A ediff-control-buffer)
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
317 ;; regB (ediff-get-region-contents n 'B ediff-control-buffer))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
318 ;;(setq reg-combined (ediff-make-combined-diff regA regB))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
319 (setq reg-combined (ediff-get-combined-region n))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
320
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
321 (ediff-copy-diff n nil 'C batch-invocation reg-combined))
14582
c768f6d7daaa *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
322 (or batch-invocation (ediff-jump-to-difference (1+ n))))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
323
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
324
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
325 ;; Checks if the region in buff C looks like a combination of the regions
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
326 ;; in buffers A and B. Return a list (reg-a-beg reg-a-end reg-b-beg reg-b-end)
26585
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
327 ;; These refer to where the delimiters for region A, B, Ancestor start and end
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
328 ;; in buffer C
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
329 (defun ediff-looks-like-combined-merge (region-num)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
330 (if ediff-merge-job
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
331 (let ((combined (string-match (regexp-quote "(A+B)")
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
332 (or (ediff-get-state-of-diff region-num 'C)
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
333 "")))
26585
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
334 (mrgreg-beg (ediff-get-diff-posn 'C 'beg region-num))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
335 (mrgreg-end (ediff-get-diff-posn 'C 'end region-num))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
336 (pattern-list ediff-combination-pattern)
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
337 delim reg-beg reg-end delim-regs-list)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
338
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
339 (if combined
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
340 (ediff-with-current-buffer ediff-buffer-C
26585
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
341 (while pattern-list
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
342 (goto-char mrgreg-beg)
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
343 (setq delim (nth 0 pattern-list))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
344 (search-forward delim mrgreg-end 'noerror)
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
345 (setq reg-beg (match-beginning 0))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
346 (setq reg-end (match-end 0))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
347 (if (and reg-beg reg-end)
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
348 (setq delim-regs-list
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
349 ;; in reverse
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
350 (cons reg-end (cons reg-beg delim-regs-list))))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
351 (if (> (length pattern-list) 1)
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
352 (setq pattern-list (cdr (cdr pattern-list)))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
353 (setq pattern-list nil))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
354 )))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
355
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
356 (reverse delim-regs-list)
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
357 )))
33394
237411236185 (state-or-merge): Defvar when compiling.
Dave Love <fx@gnu.org>
parents: 33019
diff changeset
358
237411236185 (state-or-merge): Defvar when compiling.
Dave Love <fx@gnu.org>
parents: 33019
diff changeset
359 (eval-when-compile (defvar state-of-merge)) ; dynamic var
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
360
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
361 ;; Check if the non-preferred merge has been modified since originally set.
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
362 ;; This affects only the regions that are marked as default-A/B or combined.
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
363 ;; If PREFERS-TOO is non-nil, then look at the regions marked as prefers-A/B as
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
364 ;; well.
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
365 (defun ediff-merge-changed-from-default-p (diff-num &optional prefers-too)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
366 (let ((reg-A (ediff-get-region-contents diff-num 'A ediff-control-buffer))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
367 (reg-B (ediff-get-region-contents diff-num 'B ediff-control-buffer))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
368 (reg-C (ediff-get-region-contents diff-num 'C ediff-control-buffer)))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
369
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
370 (setq state-of-merge (ediff-get-state-of-merge diff-num))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
371
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
372 ;; if region was edited since it was first set by default
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
373 (or (and (string= state-of-merge "default-A")
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
374 (not (string= reg-A reg-C)))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
375 (and (string= state-of-merge "default-B")
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
376 (not (string= reg-B reg-C)))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
377 (and (string= state-of-merge "combined")
26585
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
378 ;;(not (string= (ediff-make-combined-diff reg-A reg-B) reg-C)))
3ec5a485d0ab *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
379 (not (string= (ediff-get-combined-region diff-num) reg-C)))
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
380 (and prefers-too
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
381 (string= state-of-merge "prefer-A")
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
382 (not (string= reg-A reg-C)))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
383 (and prefers-too
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
384 (string= state-of-merge "prefer-B")
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
385 (not (string= reg-B reg-C)))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 20206
diff changeset
386 )))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42602
diff changeset
387
11042
57316020d271 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
388
68997
6169b51037af 2006-02-19 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 68651
diff changeset
389 (provide 'ediff-merg)
6169b51037af 2006-02-19 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 68651
diff changeset
390
6169b51037af 2006-02-19 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 68651
diff changeset
391
16248
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15480
diff changeset
392 ;;; Local Variables:
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15480
diff changeset
393 ;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
19047
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
394 ;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)
f90d40b0bff5 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
395 ;;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body))
16248
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15480
diff changeset
396 ;;; End:
b2fae8abc5b0 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15480
diff changeset
397
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49588
diff changeset
398 ;;; arch-tag: 9b798cf9-02ba-487f-a62e-b63aa823dbfb
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 33394
diff changeset
399 ;;; ediff-merg.el ends here