Mercurial > emacs
annotate lisp/emerge.el @ 46205:6676ac71682b
Update mouse button info.
Don't give the names of Emacs commands that the characters run.
Clarify what SPC and DEL do.
Clarify the description of the minibuffer.
Wording change for completion.
Explain Mouse-2 better.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 07 Jul 2002 11:31:31 +0000 |
parents | 44babbee535a |
children | f8c302d7433b |
rev | line source |
---|---|
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1 ;;; emerge.el --- merge diffs under Emacs control |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2 |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3 ;;; The author has placed this file in the public domain. |
2307
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2029
diff
changeset
|
4 |
38436
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
29884
diff
changeset
|
5 ;; This file is part of GNU Emacs. |
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
29884
diff
changeset
|
6 |
14659 | 7 ;; Author: Dale R. Worley <worley@world.std.com> |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
8 ;; Version: 5fsf |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
9 ;; Keywords: unix, tools |
583 | 10 |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
11 ;; This software was created by Dale R. Worley and is |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
12 ;; distributed free of charge. It is placed in the public domain and |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
13 ;; permission is granted to anyone to use, duplicate, modify and redistribute |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
14 ;; it provided that this notice is attached. |
2307
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2029
diff
changeset
|
15 |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
16 ;; Dale R. Worley provides absolutely NO WARRANTY OF ANY KIND |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
17 ;; with respect to this software. The entire risk as to the quality and |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
18 ;; performance of this software is with the user. IN NO EVENT WILL DALE |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
19 ;; R. WORLEY BE LIABLE TO ANYONE FOR ANY DAMAGES ARISING OUT THE |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
20 ;; USE OF THIS SOFTWARE, INCLUDING, WITHOUT LIMITATION, DAMAGES RESULTING FROM |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
21 ;; LOST DATA OR LOST PROFITS, OR FOR ANY SPECIAL, INCIDENTAL OR CONSEQUENTIAL |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
22 ;; DAMAGES. |
583 | 23 |
38436
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
29884
diff
changeset
|
24 ;;; Commentary: |
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
29884
diff
changeset
|
25 |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
26 ;;; Code: |
583 | 27 |
6281
e98ae7dec34d
(menu-bar-emerge-menu): Autoload the whole setup.
Richard M. Stallman <rms@gnu.org>
parents:
5798
diff
changeset
|
28 ;;;###autoload |
6809
071551122256
(menu-bar-emerge-menu): Improve menu title.
Richard M. Stallman <rms@gnu.org>
parents:
6556
diff
changeset
|
29 (defvar menu-bar-emerge-menu (make-sparse-keymap "Emerge")) |
6281
e98ae7dec34d
(menu-bar-emerge-menu): Autoload the whole setup.
Richard M. Stallman <rms@gnu.org>
parents:
5798
diff
changeset
|
30 ;;;###autoload |
e98ae7dec34d
(menu-bar-emerge-menu): Autoload the whole setup.
Richard M. Stallman <rms@gnu.org>
parents:
5798
diff
changeset
|
31 (fset 'menu-bar-emerge-menu (symbol-value 'menu-bar-emerge-menu)) |
5798
c75960d5f2ca
(menu-bar-emerge-menu): New map.
Richard M. Stallman <rms@gnu.org>
parents:
5796
diff
changeset
|
32 |
6281
e98ae7dec34d
(menu-bar-emerge-menu): Autoload the whole setup.
Richard M. Stallman <rms@gnu.org>
parents:
5798
diff
changeset
|
33 ;;;###autoload |
5798
c75960d5f2ca
(menu-bar-emerge-menu): New map.
Richard M. Stallman <rms@gnu.org>
parents:
5796
diff
changeset
|
34 (define-key menu-bar-emerge-menu [emerge-merge-directories] |
14110
454c8269c985
(menu-bar-emerge-menu): Delete spaces before `...'.
Karl Heuer <kwzh@gnu.org>
parents:
14040
diff
changeset
|
35 '("Merge Directories..." . emerge-merge-directories)) |
6281
e98ae7dec34d
(menu-bar-emerge-menu): Autoload the whole setup.
Richard M. Stallman <rms@gnu.org>
parents:
5798
diff
changeset
|
36 ;;;###autoload |
5798
c75960d5f2ca
(menu-bar-emerge-menu): New map.
Richard M. Stallman <rms@gnu.org>
parents:
5796
diff
changeset
|
37 (define-key menu-bar-emerge-menu [emerge-revisions-with-ancestor] |
14110
454c8269c985
(menu-bar-emerge-menu): Delete spaces before `...'.
Karl Heuer <kwzh@gnu.org>
parents:
14040
diff
changeset
|
38 '("Revisions with Ancestor..." . emerge-revisions-with-ancestor)) |
6286
676773222f1f
(emerge-revisions, emerge-revisions-with-ancestor)
Richard M. Stallman <rms@gnu.org>
parents:
6281
diff
changeset
|
39 ;;;###autoload |
5798
c75960d5f2ca
(menu-bar-emerge-menu): New map.
Richard M. Stallman <rms@gnu.org>
parents:
5796
diff
changeset
|
40 (define-key menu-bar-emerge-menu [emerge-revisions] |
14110
454c8269c985
(menu-bar-emerge-menu): Delete spaces before `...'.
Karl Heuer <kwzh@gnu.org>
parents:
14040
diff
changeset
|
41 '("Revisions..." . emerge-revisions)) |
6281
e98ae7dec34d
(menu-bar-emerge-menu): Autoload the whole setup.
Richard M. Stallman <rms@gnu.org>
parents:
5798
diff
changeset
|
42 ;;;###autoload |
5798
c75960d5f2ca
(menu-bar-emerge-menu): New map.
Richard M. Stallman <rms@gnu.org>
parents:
5796
diff
changeset
|
43 (define-key menu-bar-emerge-menu [emerge-files-with-ancestor] |
14110
454c8269c985
(menu-bar-emerge-menu): Delete spaces before `...'.
Karl Heuer <kwzh@gnu.org>
parents:
14040
diff
changeset
|
44 '("Files with Ancestor..." . emerge-files-with-ancestor)) |
6281
e98ae7dec34d
(menu-bar-emerge-menu): Autoload the whole setup.
Richard M. Stallman <rms@gnu.org>
parents:
5798
diff
changeset
|
45 ;;;###autoload |
5798
c75960d5f2ca
(menu-bar-emerge-menu): New map.
Richard M. Stallman <rms@gnu.org>
parents:
5796
diff
changeset
|
46 (define-key menu-bar-emerge-menu [emerge-files] |
14110
454c8269c985
(menu-bar-emerge-menu): Delete spaces before `...'.
Karl Heuer <kwzh@gnu.org>
parents:
14040
diff
changeset
|
47 '("Files..." . emerge-files)) |
6281
e98ae7dec34d
(menu-bar-emerge-menu): Autoload the whole setup.
Richard M. Stallman <rms@gnu.org>
parents:
5798
diff
changeset
|
48 ;;;###autoload |
5798
c75960d5f2ca
(menu-bar-emerge-menu): New map.
Richard M. Stallman <rms@gnu.org>
parents:
5796
diff
changeset
|
49 (define-key menu-bar-emerge-menu [emerge-buffers-with-ancestor] |
14110
454c8269c985
(menu-bar-emerge-menu): Delete spaces before `...'.
Karl Heuer <kwzh@gnu.org>
parents:
14040
diff
changeset
|
50 '("Buffers with Ancestor..." . emerge-buffers-with-ancestor)) |
6281
e98ae7dec34d
(menu-bar-emerge-menu): Autoload the whole setup.
Richard M. Stallman <rms@gnu.org>
parents:
5798
diff
changeset
|
51 ;;;###autoload |
5798
c75960d5f2ca
(menu-bar-emerge-menu): New map.
Richard M. Stallman <rms@gnu.org>
parents:
5796
diff
changeset
|
52 (define-key menu-bar-emerge-menu [emerge-buffers] |
14110
454c8269c985
(menu-bar-emerge-menu): Delete spaces before `...'.
Karl Heuer <kwzh@gnu.org>
parents:
14040
diff
changeset
|
53 '("Buffers..." . emerge-buffers)) |
5798
c75960d5f2ca
(menu-bar-emerge-menu): New map.
Richard M. Stallman <rms@gnu.org>
parents:
5796
diff
changeset
|
54 |
583 | 55 ;;; Macros |
56 | |
57 (defmacro emerge-eval-in-buffer (buffer &rest forms) | |
58 "Macro to switch to BUFFER, evaluate FORMS, returns to original buffer. | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
59 Differs from `save-excursion' in that it doesn't save the point and mark." |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
60 `(let ((StartBuffer (current-buffer))) |
583 | 61 (unwind-protect |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
62 (progn |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
63 (set-buffer ,buffer) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
64 ,@forms) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
65 (set-buffer StartBuffer)))) |
583 | 66 |
67 (defmacro emerge-defvar-local (var value doc) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
68 "Defines SYMBOL as an advertised variable. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
69 Performs a defvar, then executes `make-variable-buffer-local' on |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
70 the variable. Also sets the `preserved' property, so that |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
71 `kill-all-local-variables' (called by major-mode setting commands) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
72 won't destroy Emerge control variables." |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
73 `(progn |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
74 (defvar ,var ,value ,doc) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
75 (make-variable-buffer-local ',var) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
76 (put ',var 'preserved t))) |
583 | 77 |
78 ;; Add entries to minor-mode-alist so that emerge modes show correctly | |
5796
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
79 (defvar emerge-minor-modes-list |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
80 '((emerge-mode " Emerge") |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
81 (emerge-fast-mode " F") |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
82 (emerge-edit-mode " E") |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
83 (emerge-auto-advance " A") |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
84 (emerge-skip-prefers " S"))) |
583 | 85 (if (not (assq 'emerge-mode minor-mode-alist)) |
86 (setq minor-mode-alist (append emerge-minor-modes-list | |
87 minor-mode-alist))) | |
88 | |
89 ;; We need to define this function so describe-mode can describe Emerge mode. | |
90 (defun emerge-mode () | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
91 "Emerge mode is used by the Emerge file-merging package. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
92 It is entered only through one of the functions: |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
93 `emerge-files' |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
94 `emerge-files-with-ancestor' |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
95 `emerge-buffers' |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
96 `emerge-buffers-with-ancestor' |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
97 `emerge-files-command' |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
98 `emerge-files-with-ancestor-command' |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
99 `emerge-files-remote' |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
100 `emerge-files-with-ancestor-remote' |
583 | 101 |
102 Commands: | |
103 \\{emerge-basic-keymap} | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
104 Commands must be prefixed by \\<emerge-fast-keymap>\\[emerge-basic-keymap] in `edit' mode, |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
105 but can be invoked directly in `fast' mode.") |
583 | 106 |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
107 (defvar emerge-version "5fsf" |
583 | 108 "The version of Emerge.") |
109 | |
110 (defun emerge-version () | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
111 "Return string describing the version of Emerge. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
112 When called interactively, displays the version." |
583 | 113 (interactive) |
114 (if (interactive-p) | |
115 (message "Emerge version %s" (emerge-version)) | |
116 emerge-version)) | |
117 | |
118 ;;; Emerge configuration variables | |
119 | |
20597 | 120 (defgroup emerge nil |
121 "Merge diffs under Emacs control." | |
122 :group 'tools) | |
123 | |
583 | 124 ;; Commands that produce difference files |
125 ;; All that can be configured is the name of the programs to execute | |
126 ;; (emerge-diff-program and emerge-diff3-program) and the options | |
127 ;; to be provided (emerge-diff-options). The order in which the file names | |
128 ;; are given is fixed. | |
129 ;; The file names are always expanded (see expand-file-name) before being | |
130 ;; passed to diff, thus they need not be invoked under a shell that | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
131 ;; understands `~'. |
583 | 132 ;; The code which processes the diff/diff3 output depends on all the |
133 ;; finicky details of their output, including the somewhat strange | |
134 ;; way they number lines of a file. | |
20597 | 135 (defcustom emerge-diff-program "diff" |
136 "*Name of the program which compares two files." | |
137 :type 'string | |
138 :group 'emerge) | |
139 (defcustom emerge-diff3-program "diff3" | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
140 "*Name of the program which compares three files. |
20597 | 141 Its arguments are the ancestor file and the two variant files." |
142 :type 'string | |
143 :group 'emerge) | |
144 (defcustom emerge-diff-options "" | |
145 "*Options to pass to `emerge-diff-program' and `emerge-diff3-program'." | |
146 :type 'string | |
147 :group 'emerge) | |
148 (defcustom emerge-match-diff-line | |
149 (let ((x "\\([0-9]+\\)\\(\\|,\\([0-9]+\\)\\)")) | |
150 (concat "^" x "\\([acd]\\)" x "$")) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
151 "*Pattern to match lines produced by diff that describe differences. |
20597 | 152 This is as opposed to lines from the source files." |
153 :type 'regexp | |
154 :group 'emerge) | |
155 (defcustom emerge-diff-ok-lines-regexp | |
583 | 156 "^\\([0-9,]+[acd][0-9,]+$\\|[<>] \\|---\\)" |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
157 "*Regexp that matches normal output lines from `emerge-diff-program'. |
20597 | 158 Lines that do not match are assumed to be error messages." |
159 :type 'regexp | |
160 :group 'emerge) | |
161 (defcustom emerge-diff3-ok-lines-regexp | |
583 | 162 "^\\([1-3]:\\|====\\| \\)" |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
163 "*Regexp that matches normal output lines from `emerge-diff3-program'. |
20597 | 164 Lines that do not match are assumed to be error messages." |
165 :type 'regexp | |
166 :group 'emerge) | |
583 | 167 |
20597 | 168 (defcustom emerge-rcs-ci-program "ci" |
169 "*Name of the program that checks in RCS revisions." | |
170 :type 'string | |
171 :group 'emerge) | |
172 (defcustom emerge-rcs-co-program "co" | |
173 "*Name of the program that checks out RCS revisions." | |
174 :type 'string | |
175 :group 'emerge) | |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
176 |
20597 | 177 (defcustom emerge-process-local-variables nil |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
178 "*Non-nil if Emerge should process local-variables lists in merge buffers. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
179 \(You can explicitly request processing the local-variables |
20597 | 180 by executing `(hack-local-variables)'.)" |
181 :type 'boolean | |
182 :group 'emerge) | |
183 (defcustom emerge-execute-line-deletions nil | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
184 "*If non-nil: `emerge-execute-line' makes no output if an input was deleted. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
185 It concludes that an input version has been deleted when an ancestor entry |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
186 is present, only one A or B entry is present, and an output entry is present. |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
187 If nil: In such circumstances, the A or B file that is present will be |
20597 | 188 copied to the designated output file." |
189 :type 'boolean | |
190 :group 'emerge) | |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
191 |
20597 | 192 (defcustom emerge-before-flag "vvvvvvvvvvvvvvvvvvvv\n" |
5796
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
193 "*Flag placed above the highlighted block of code. Must end with newline. |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
194 Must be set before Emerge is loaded, or emerge-new-flags must be run |
20597 | 195 after setting." |
196 :type 'string | |
197 :group 'emerge) | |
198 (defcustom emerge-after-flag "^^^^^^^^^^^^^^^^^^^^\n" | |
5796
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
199 "*Flag placed below the highlighted block of code. Must end with newline. |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
200 Must be set before Emerge is loaded, or emerge-new-flags must be run |
20597 | 201 after setting." |
202 :type 'string | |
203 :group 'emerge) | |
5796
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
204 |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
205 ;; Hook variables |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
206 |
20597 | 207 (defcustom emerge-startup-hook nil |
208 "*Hook to run in the merge buffer after the merge has been set up." | |
209 :type 'hook | |
210 :group 'emerge) | |
211 (defcustom emerge-select-hook nil | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
212 "*Hook to run after a difference has been selected. |
20597 | 213 The variable `n' holds the (internal) number of the difference." |
214 :type 'hook | |
215 :group 'emerge) | |
216 (defcustom emerge-unselect-hook nil | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
217 "*Hook to run after a difference has been unselected. |
20597 | 218 The variable `n' holds the (internal) number of the difference." |
219 :type 'hook | |
220 :group 'emerge) | |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
221 |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
222 ;; Variables to control the default directories of the arguments to |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
223 ;; Emerge commands. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
224 |
20597 | 225 (defcustom emerge-default-last-directories nil |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
226 "*If nil, default dir for filenames in emerge is `default-directory'. |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
227 If non-nil, filenames complete in the directory of the last argument of the |
20597 | 228 same type to an `emerge-files...' command." |
229 :type 'boolean | |
230 :group 'emerge) | |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
231 |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
232 (defvar emerge-last-dir-A nil |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
233 "Last directory for the first file of an `emerge-files...' command.") |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
234 (defvar emerge-last-dir-B nil |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
235 "Last directory for the second file of an `emerge-files...' command.") |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
236 (defvar emerge-last-dir-ancestor nil |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
237 "Last directory for the ancestor file of an `emerge-files...' command.") |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
238 (defvar emerge-last-dir-output nil |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
239 "Last directory for the output file of an `emerge-files...' command.") |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
240 (defvar emerge-last-revision-A nil |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
241 "Last RCS revision used for first file of an `emerge-revisions...' command.") |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
242 (defvar emerge-last-revision-B nil |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
243 "Last RCS revision used for second file of an `emerge-revisions...' command.") |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
244 (defvar emerge-last-revision-ancestor nil |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
245 "Last RCS revision used for ancestor file of an `emerge-revisions...' command.") |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
246 |
5796
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
247 (defvar emerge-before-flag-length) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
248 (defvar emerge-before-flag-lines) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
249 (defvar emerge-before-flag-match) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
250 (defvar emerge-after-flag-length) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
251 (defvar emerge-after-flag-lines) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
252 (defvar emerge-after-flag-match) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
253 (defvar emerge-diff-buffer) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
254 (defvar emerge-diff-error-buffer) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
255 (defvar emerge-prefix-argument) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
256 (defvar emerge-file-out) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
257 (defvar emerge-exit-func) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
258 (defvar emerge-globalized-difference-list) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
259 (defvar emerge-globalized-number-of-differences) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
260 |
583 | 261 ;; The flags used to mark differences in the buffers. |
262 | |
263 ;; These function definitions need to be up here, because they are used | |
264 ;; during loading. | |
265 (defun emerge-new-flags () | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
266 "Function to be called after `emerge-{before,after}-flag'. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
267 This is called after these functions are changed to compute values that |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
268 depend on the flags." |
583 | 269 (setq emerge-before-flag-length (length emerge-before-flag)) |
270 (setq emerge-before-flag-lines | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
271 (emerge-count-matches-string emerge-before-flag "\n")) |
583 | 272 (setq emerge-before-flag-match (regexp-quote emerge-before-flag)) |
273 (setq emerge-after-flag-length (length emerge-after-flag)) | |
274 (setq emerge-after-flag-lines | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
275 (emerge-count-matches-string emerge-after-flag "\n")) |
583 | 276 (setq emerge-after-flag-match (regexp-quote emerge-after-flag))) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
277 |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
278 (defun emerge-count-matches-string (string regexp) |
583 | 279 "Return the number of matches in STRING for REGEXP." |
280 (let ((i 0) | |
281 (count 0)) | |
282 (while (string-match regexp string i) | |
283 (setq count (1+ count)) | |
284 (setq i (match-end 0))) | |
285 count)) | |
286 | |
287 ;; Calculate dependent variables | |
288 (emerge-new-flags) | |
289 | |
20597 | 290 (defcustom emerge-min-visible-lines 3 |
583 | 291 "*Number of lines that we want to show above and below the flags when we are |
20597 | 292 displaying a difference." |
293 :type 'integer | |
294 :group 'emerge) | |
583 | 295 |
20597 | 296 (defcustom emerge-temp-file-prefix |
22099
50b3a29265e4
(emerge-temp-file-prefix): Use temporary-file-directory.
Richard M. Stallman <rms@gnu.org>
parents:
22089
diff
changeset
|
297 (expand-file-name "emerge" temporary-file-directory) |
583 | 298 "*Prefix to put on Emerge temporary file names. |
22099
50b3a29265e4
(emerge-temp-file-prefix): Use temporary-file-directory.
Richard M. Stallman <rms@gnu.org>
parents:
22089
diff
changeset
|
299 Do not start with `~/' or `~USERNAME/'." |
20597 | 300 :type 'string |
301 :group 'emerge) | |
583 | 302 |
20597 | 303 (defcustom emerge-temp-file-mode 384 ; u=rw only |
304 "*Mode for Emerge temporary files." | |
305 :type 'integer | |
306 :group 'emerge) | |
583 | 307 |
20597 | 308 (defcustom emerge-combine-versions-template |
14668
a281f3b85f32
(emerge-combine-versions-template): Make the
Richard M. Stallman <rms@gnu.org>
parents:
14659
diff
changeset
|
309 "#ifdef NEW\n%b#else /* not NEW */\n%a#endif /* not NEW */\n" |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
310 "*Template for `emerge-combine-versions' to combine the two versions. |
583 | 311 The template is inserted as a string, with the following interpolations: |
312 %a the A version of the difference | |
313 %b the B version of the difference | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
314 %% the character `%' |
583 | 315 Don't forget to end the template with a newline. |
316 Note that this variable can be made local to a particular merge buffer by | |
20597 | 317 giving a prefix argument to `emerge-set-combine-versions-template'." |
318 :type 'string | |
319 :group 'emerge) | |
583 | 320 |
321 ;; Build keymaps | |
322 | |
323 (defvar emerge-basic-keymap nil | |
324 "Keymap of Emerge commands. | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
325 Directly available in `fast' mode; |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
326 must be prefixed by \\<emerge-fast-keymap>\\[emerge-basic-keymap] in `edit' mode.") |
583 | 327 |
328 (defvar emerge-fast-keymap nil | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
329 "Local keymap used in Emerge `fast' mode. |
583 | 330 Makes Emerge commands directly available.") |
331 | |
5796
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
332 (defvar emerge-options-menu |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
333 (make-sparse-keymap "Options")) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
334 |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
335 (defvar emerge-merge-menu |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
336 (make-sparse-keymap "Merge")) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
337 |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
338 (defvar emerge-move-menu |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
339 (make-sparse-keymap "Move")) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
340 |
20597 | 341 (defcustom emerge-command-prefix "\C-c\C-c" |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
342 "*Command prefix for Emerge commands in `edit' mode. |
20597 | 343 Must be set before Emerge is loaded." |
344 :type 'string | |
345 :group 'emerge) | |
583 | 346 |
347 ;; This function sets up the fixed keymaps. It is executed when the first | |
348 ;; Emerge is done to allow the user maximum time to set up the global keymap. | |
349 (defun emerge-setup-fixed-keymaps () | |
350 ;; Set up the basic keymap | |
351 (setq emerge-basic-keymap (make-keymap)) | |
352 (suppress-keymap emerge-basic-keymap) ; this sets 0..9 to digit-argument and | |
353 ; - to negative-argument | |
354 (define-key emerge-basic-keymap "p" 'emerge-previous-difference) | |
355 (define-key emerge-basic-keymap "n" 'emerge-next-difference) | |
356 (define-key emerge-basic-keymap "a" 'emerge-select-A) | |
357 (define-key emerge-basic-keymap "b" 'emerge-select-B) | |
358 (define-key emerge-basic-keymap "j" 'emerge-jump-to-difference) | |
2773
8ab8f28b78d1
(emerge-find-difference-diff): Renamed from emerge-find-difference.
Richard M. Stallman <rms@gnu.org>
parents:
2772
diff
changeset
|
359 (define-key emerge-basic-keymap "." 'emerge-find-difference) |
583 | 360 (define-key emerge-basic-keymap "q" 'emerge-quit) |
2772
9dba5812b3ff
(emerge-setup-fixed-keymaps): Put emerge-abort on C-].
Richard M. Stallman <rms@gnu.org>
parents:
2771
diff
changeset
|
361 (define-key emerge-basic-keymap "\C-]" 'emerge-abort) |
583 | 362 (define-key emerge-basic-keymap "f" 'emerge-fast-mode) |
363 (define-key emerge-basic-keymap "e" 'emerge-edit-mode) | |
364 (define-key emerge-basic-keymap "s" nil) | |
365 (define-key emerge-basic-keymap "sa" 'emerge-auto-advance) | |
366 (define-key emerge-basic-keymap "ss" 'emerge-skip-prefers) | |
367 (define-key emerge-basic-keymap "l" 'emerge-recenter) | |
368 (define-key emerge-basic-keymap "d" nil) | |
369 (define-key emerge-basic-keymap "da" 'emerge-default-A) | |
370 (define-key emerge-basic-keymap "db" 'emerge-default-B) | |
371 (define-key emerge-basic-keymap "c" nil) | |
372 (define-key emerge-basic-keymap "ca" 'emerge-copy-as-kill-A) | |
373 (define-key emerge-basic-keymap "cb" 'emerge-copy-as-kill-B) | |
374 (define-key emerge-basic-keymap "i" nil) | |
375 (define-key emerge-basic-keymap "ia" 'emerge-insert-A) | |
376 (define-key emerge-basic-keymap "ib" 'emerge-insert-B) | |
377 (define-key emerge-basic-keymap "m" 'emerge-mark-difference) | |
378 (define-key emerge-basic-keymap "v" 'emerge-scroll-up) | |
379 (define-key emerge-basic-keymap "^" 'emerge-scroll-down) | |
380 (define-key emerge-basic-keymap "<" 'emerge-scroll-left) | |
381 (define-key emerge-basic-keymap ">" 'emerge-scroll-right) | |
382 (define-key emerge-basic-keymap "|" 'emerge-scroll-reset) | |
383 (define-key emerge-basic-keymap "x" nil) | |
384 (define-key emerge-basic-keymap "x1" 'emerge-one-line-window) | |
385 (define-key emerge-basic-keymap "xc" 'emerge-combine-versions) | |
386 (define-key emerge-basic-keymap "xC" 'emerge-combine-versions-register) | |
387 (define-key emerge-basic-keymap "xf" 'emerge-file-names) | |
388 (define-key emerge-basic-keymap "xj" 'emerge-join-differences) | |
389 (define-key emerge-basic-keymap "xl" 'emerge-line-numbers) | |
390 (define-key emerge-basic-keymap "xm" 'emerge-set-merge-mode) | |
391 (define-key emerge-basic-keymap "xs" 'emerge-split-difference) | |
392 (define-key emerge-basic-keymap "xt" 'emerge-trim-difference) | |
393 (define-key emerge-basic-keymap "xx" 'emerge-set-combine-versions-template) | |
394 ;; Allow emerge-basic-keymap to be referenced indirectly | |
395 (fset 'emerge-basic-keymap emerge-basic-keymap) | |
396 ;; Set up the fast mode keymap | |
397 (setq emerge-fast-keymap (copy-keymap emerge-basic-keymap)) | |
398 ;; Allow prefixed commands to work in fast mode | |
399 (define-key emerge-fast-keymap emerge-command-prefix 'emerge-basic-keymap) | |
400 ;; Allow emerge-fast-keymap to be referenced indirectly | |
401 (fset 'emerge-fast-keymap emerge-fast-keymap) | |
402 ;; Suppress write-file and save-buffer | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
403 (substitute-key-definition 'write-file 'emerge-query-write-file |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
404 emerge-fast-keymap (current-global-map)) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
405 (substitute-key-definition 'save-buffer 'emerge-query-save-buffer |
5796
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
406 emerge-fast-keymap (current-global-map)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
407 |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
408 (define-key emerge-basic-keymap [menu-bar] (make-sparse-keymap)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
409 |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
410 (define-key emerge-fast-keymap [menu-bar options] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
411 (cons "Options" emerge-options-menu)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
412 (define-key emerge-fast-keymap [menu-bar merge] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
413 (cons "Merge" emerge-merge-menu)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
414 (define-key emerge-fast-keymap [menu-bar move] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
415 (cons "Move" emerge-move-menu)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
416 |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
417 (define-key emerge-move-menu [emerge-scroll-reset] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
418 '("Scroll Reset" . emerge-scroll-reset)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
419 (define-key emerge-move-menu [emerge-scroll-right] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
420 '("Scroll Right" . emerge-scroll-right)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
421 (define-key emerge-move-menu [emerge-scroll-left] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
422 '("Scroll Left" . emerge-scroll-left)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
423 (define-key emerge-move-menu [emerge-scroll-down] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
424 '("Scroll Down" . emerge-scroll-down)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
425 (define-key emerge-move-menu [emerge-scroll-up] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
426 '("Scroll Up" . emerge-scroll-up)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
427 (define-key emerge-move-menu [emerge-recenter] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
428 '("Recenter" . emerge-recenter)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
429 (define-key emerge-move-menu [emerge-mark-difference] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
430 '("Mark Difference" . emerge-mark-difference)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
431 (define-key emerge-move-menu [emerge-jump-to-difference] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
432 '("Jump To Difference" . emerge-jump-to-difference)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
433 (define-key emerge-move-menu [emerge-find-difference] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
434 '("Find Difference" . emerge-find-difference)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
435 (define-key emerge-move-menu [emerge-previous-difference] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
436 '("Previous Difference" . emerge-previous-difference)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
437 (define-key emerge-move-menu [emerge-next-difference] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
438 '("Next Difference" . emerge-next-difference)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
439 |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
440 |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
441 (define-key emerge-options-menu [emerge-one-line-window] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
442 '("One Line Window" . emerge-one-line-window)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
443 (define-key emerge-options-menu [emerge-set-merge-mode] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
444 '("Set Merge Mode" . emerge-set-merge-mode)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
445 (define-key emerge-options-menu [emerge-set-combine-template] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
446 '("Set Combine Template..." . emerge-set-combine-template)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
447 (define-key emerge-options-menu [emerge-default-B] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
448 '("Default B" . emerge-default-B)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
449 (define-key emerge-options-menu [emerge-default-A] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
450 '("Default A" . emerge-default-A)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
451 (define-key emerge-options-menu [emerge-skip-prefers] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
452 '("Skip Prefers" . emerge-skip-prefers)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
453 (define-key emerge-options-menu [emerge-auto-advance] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
454 '("Auto Advance" . emerge-auto-advance)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
455 (define-key emerge-options-menu [emerge-edit-mode] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
456 '("Edit Mode" . emerge-edit-mode)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
457 (define-key emerge-options-menu [emerge-fast-mode] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
458 '("Fast Mode" . emerge-fast-mode)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
459 |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
460 (define-key emerge-merge-menu [emerge-abort] '("Abort" . emerge-abort)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
461 (define-key emerge-merge-menu [emerge-quit] '("Quit" . emerge-quit)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
462 (define-key emerge-merge-menu [emerge-split-difference] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
463 '("Split Difference" . emerge-split-difference)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
464 (define-key emerge-merge-menu [emerge-join-differences] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
465 '("Join Differences" . emerge-join-differences)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
466 (define-key emerge-merge-menu [emerge-trim-difference] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
467 '("Trim Difference" . emerge-trim-difference)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
468 (define-key emerge-merge-menu [emerge-combine-versions] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
469 '("Combine Versions" . emerge-combine-versions)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
470 (define-key emerge-merge-menu [emerge-copy-as-kill-B] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
471 '("Copy B as Kill" . emerge-copy-as-kill-B)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
472 (define-key emerge-merge-menu [emerge-copy-as-kill-A] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
473 '("Copy A as Kill" . emerge-copy-as-kill-A)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
474 (define-key emerge-merge-menu [emerge-insert-B] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
475 '("Insert B" . emerge-insert-B)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
476 (define-key emerge-merge-menu [emerge-insert-A] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
477 '("Insert A" . emerge-insert-A)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
478 (define-key emerge-merge-menu [emerge-select-B] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
479 '("Select B" . emerge-select-B)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
480 (define-key emerge-merge-menu [emerge-select-A] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
481 '("Select A" . emerge-select-A))) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
482 |
583 | 483 |
484 ;; Variables which control each merge. They are local to the merge buffer. | |
485 | |
486 ;; Mode variables | |
487 (emerge-defvar-local emerge-mode nil | |
488 "Indicator for emerge-mode.") | |
489 (emerge-defvar-local emerge-fast-mode nil | |
490 "Indicator for emerge-mode fast submode.") | |
491 (emerge-defvar-local emerge-edit-mode nil | |
492 "Indicator for emerge-mode edit submode.") | |
493 (emerge-defvar-local emerge-A-buffer nil | |
494 "The buffer in which the A variant is stored.") | |
495 (emerge-defvar-local emerge-B-buffer nil | |
496 "The buffer in which the B variant is stored.") | |
497 (emerge-defvar-local emerge-merge-buffer nil | |
498 "The buffer in which the merged file is manipulated.") | |
499 (emerge-defvar-local emerge-ancestor-buffer nil | |
500 "The buffer in which the ancestor variant is stored, | |
501 or nil if there is none.") | |
502 | |
503 (defconst emerge-saved-variables | |
504 '((buffer-modified-p set-buffer-modified-p) | |
505 buffer-read-only | |
506 buffer-auto-save-file-name) | |
507 "Variables and properties of a buffer which are saved, modified and restored | |
508 during a merge.") | |
509 (defconst emerge-merging-values '(nil t nil) | |
510 "Values to be assigned to emerge-saved-variables during a merge.") | |
511 | |
512 (emerge-defvar-local emerge-A-buffer-values nil | |
513 "Remembers emerge-saved-variables for emerge-A-buffer.") | |
514 (emerge-defvar-local emerge-B-buffer-values nil | |
515 "Remembers emerge-saved-variables for emerge-B-buffer.") | |
516 | |
517 (emerge-defvar-local emerge-difference-list nil | |
518 "Vector of differences between the variants, and markers in the buffers to | |
519 show where they are. Each difference is represented by a vector of seven | |
520 elements. The first two are markers to the beginning and end of the difference | |
521 section in the A buffer, the second two are markers for the B buffer, the third | |
522 two are markers for the merge buffer, and the last element is the \"state\" of | |
523 that difference in the merge buffer. | |
524 A section of a buffer is described by two markers, one to the beginning of | |
525 the first line of the section, and one to the beginning of the first line | |
526 after the section. (If the section is empty, both markers point to the same | |
527 point.) If the section is part of the selected difference, then the markers | |
528 are moved into the flags, so the user can edit the section without disturbing | |
529 the markers. | |
530 The \"states\" are: | |
531 A the merge buffer currently contains the A variant | |
532 B the merge buffer currently contains the B variant | |
533 default-A the merge buffer contains the A variant by default, | |
534 but this difference hasn't been selected yet, so | |
535 change-default commands can alter it | |
536 default-B the merge buffer contains the B variant by default, | |
537 but this difference hasn't been selected yet, so | |
538 change-default commands can alter it | |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
2773
diff
changeset
|
539 prefer-A in a three-file merge, the A variant is the preferred |
583 | 540 choice |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
2773
diff
changeset
|
541 prefer-B in a three-file merge, the B variant is the preferred |
583 | 542 choice") |
543 (emerge-defvar-local emerge-current-difference -1 | |
544 "The difference that is currently selected.") | |
545 (emerge-defvar-local emerge-number-of-differences nil | |
546 "Number of differences found.") | |
547 (emerge-defvar-local emerge-edit-keymap nil | |
548 "The local keymap for the merge buffer, with the emerge commands defined in | |
549 it. Used to save the local keymap during fast mode, when the local keymap is | |
550 replaced by emerge-fast-keymap.") | |
551 (emerge-defvar-local emerge-old-keymap nil | |
552 "The original local keymap for the merge buffer.") | |
553 (emerge-defvar-local emerge-auto-advance nil | |
554 "*If non-nil, emerge-select-A and emerge-select-B automatically advance to | |
555 the next difference.") | |
556 (emerge-defvar-local emerge-skip-prefers nil | |
557 "*If non-nil, differences for which there is a preference are automatically | |
558 skipped.") | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
559 (emerge-defvar-local emerge-quit-hook nil |
583 | 560 "Hooks to run in the merge buffer after the merge has been finished. |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
561 `emerge-prefix-argument' will hold the prefix argument of the `emerge-quit' |
583 | 562 command. |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
563 This is *not* a user option, since Emerge uses it for its own processing.") |
583 | 564 (emerge-defvar-local emerge-output-description nil |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
565 "Describes output destination of emerge, for `emerge-file-names'.") |
583 | 566 |
567 ;;; Setup functions for two-file mode. | |
568 | |
569 (defun emerge-files-internal (file-A file-B &optional startup-hooks quit-hooks | |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
570 output-file) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
571 (if (not (file-readable-p file-A)) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
572 (error "File `%s' does not exist or is not readable" file-A)) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
573 (if (not (file-readable-p file-B)) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
574 (error "File `%s' does not exist or is not readable" file-B)) |
583 | 575 (let ((buffer-A (find-file-noselect file-A)) |
576 (buffer-B (find-file-noselect file-B))) | |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
577 ;; Record the directories of the files |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
578 (setq emerge-last-dir-A (file-name-directory file-A)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
579 (setq emerge-last-dir-B (file-name-directory file-B)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
580 (if output-file |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
581 (setq emerge-last-dir-output (file-name-directory output-file))) |
583 | 582 ;; Make sure the entire files are seen, and they reflect what is on disk |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
583 (emerge-eval-in-buffer |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
584 buffer-A |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
585 (widen) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
586 (let ((temp (file-local-copy file-A))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
587 (if temp |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
588 (setq file-A temp |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
589 startup-hooks |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
590 (cons `(lambda () (delete-file ,file-A)) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
591 startup-hooks)) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
592 ;; Verify that the file matches the buffer |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
593 (emerge-verify-file-buffer)))) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
594 (emerge-eval-in-buffer |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
595 buffer-B |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
596 (widen) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
597 (let ((temp (file-local-copy file-B))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
598 (if temp |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
599 (setq file-B temp |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
600 startup-hooks |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
601 (cons `(lambda () (delete-file ,file-B)) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
602 startup-hooks)) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
603 ;; Verify that the file matches the buffer |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
604 (emerge-verify-file-buffer)))) |
583 | 605 (emerge-setup buffer-A file-A buffer-B file-B startup-hooks quit-hooks |
606 output-file))) | |
607 | |
608 ;; Start up Emerge on two files | |
609 (defun emerge-setup (buffer-A file-A buffer-B file-B startup-hooks quit-hooks | |
610 output-file) | |
611 (setq file-A (expand-file-name file-A)) | |
612 (setq file-B (expand-file-name file-B)) | |
613 (setq output-file (and output-file (expand-file-name output-file))) | |
614 (let* ((merge-buffer-name (emerge-unique-buffer-name "*merge" "*")) | |
615 ;; create the merge buffer from buffer A, so it inherits buffer A's | |
616 ;; default directory, etc. | |
617 (merge-buffer (emerge-eval-in-buffer | |
618 buffer-A | |
619 (get-buffer-create merge-buffer-name)))) | |
620 (emerge-eval-in-buffer | |
621 merge-buffer | |
622 (emerge-copy-modes buffer-A) | |
623 (setq buffer-read-only nil) | |
624 (auto-save-mode 1) | |
625 (setq emerge-mode t) | |
626 (setq emerge-A-buffer buffer-A) | |
627 (setq emerge-B-buffer buffer-B) | |
628 (setq emerge-ancestor-buffer nil) | |
629 (setq emerge-merge-buffer merge-buffer) | |
630 (setq emerge-output-description | |
631 (if output-file | |
632 (concat "Output to file: " output-file) | |
633 (concat "Output to buffer: " (buffer-name merge-buffer)))) | |
634 (insert-buffer emerge-A-buffer) | |
635 (emerge-set-keys) | |
636 (setq emerge-difference-list (emerge-make-diff-list file-A file-B)) | |
637 (setq emerge-number-of-differences (length emerge-difference-list)) | |
638 (setq emerge-current-difference -1) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
639 (setq emerge-quit-hook quit-hooks) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
640 (emerge-remember-buffer-characteristics) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
641 (emerge-handle-local-variables)) |
583 | 642 (emerge-setup-windows buffer-A buffer-B merge-buffer t) |
643 (emerge-eval-in-buffer merge-buffer | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
644 (run-hooks 'startup-hooks 'emerge-startup-hook) |
583 | 645 (setq buffer-read-only t)))) |
646 | |
647 ;; Generate the Emerge difference list between two files | |
648 (defun emerge-make-diff-list (file-A file-B) | |
649 (setq emerge-diff-buffer (get-buffer-create "*emerge-diff*")) | |
650 (emerge-eval-in-buffer | |
651 emerge-diff-buffer | |
652 (erase-buffer) | |
653 (shell-command | |
654 (format "%s %s %s %s" | |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
655 emerge-diff-program emerge-diff-options |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
656 (emerge-protect-metachars file-A) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
657 (emerge-protect-metachars file-B)) |
583 | 658 t)) |
2773
8ab8f28b78d1
(emerge-find-difference-diff): Renamed from emerge-find-difference.
Richard M. Stallman <rms@gnu.org>
parents:
2772
diff
changeset
|
659 (emerge-prepare-error-list emerge-diff-ok-lines-regexp) |
583 | 660 (emerge-convert-diffs-to-markers |
661 emerge-A-buffer emerge-B-buffer emerge-merge-buffer | |
662 (emerge-extract-diffs emerge-diff-buffer))) | |
663 | |
664 (defun emerge-extract-diffs (diff-buffer) | |
665 (let (list) | |
666 (emerge-eval-in-buffer | |
667 diff-buffer | |
668 (goto-char (point-min)) | |
669 (while (re-search-forward emerge-match-diff-line nil t) | |
670 (let* ((a-begin (string-to-int (buffer-substring (match-beginning 1) | |
671 (match-end 1)))) | |
672 (a-end (let ((b (match-beginning 3)) | |
673 (e (match-end 3))) | |
674 (if b | |
675 (string-to-int (buffer-substring b e)) | |
676 a-begin))) | |
677 (diff-type (buffer-substring (match-beginning 4) (match-end 4))) | |
678 (b-begin (string-to-int (buffer-substring (match-beginning 5) | |
679 (match-end 5)))) | |
680 (b-end (let ((b (match-beginning 7)) | |
681 (e (match-end 7))) | |
682 (if b | |
683 (string-to-int (buffer-substring b e)) | |
684 b-begin)))) | |
685 ;; fix the beginning and end numbers, because diff is somewhat | |
686 ;; strange about how it numbers lines | |
687 (if (string-equal diff-type "a") | |
688 (progn | |
689 (setq b-end (1+ b-end)) | |
690 (setq a-begin (1+ a-begin)) | |
691 (setq a-end a-begin)) | |
692 (if (string-equal diff-type "d") | |
693 (progn | |
694 (setq a-end (1+ a-end)) | |
695 (setq b-begin (1+ b-begin)) | |
696 (setq b-end b-begin)) | |
697 ;; (string-equal diff-type "c") | |
698 (progn | |
699 (setq a-end (1+ a-end)) | |
700 (setq b-end (1+ b-end))))) | |
701 (setq list (cons (vector a-begin a-end | |
702 b-begin b-end | |
703 'default-A) | |
704 list))))) | |
705 (nreverse list))) | |
706 | |
707 ;; Set up buffer of diff/diff3 error messages. | |
708 (defun emerge-prepare-error-list (ok-regexp) | |
709 (setq emerge-diff-error-buffer (get-buffer-create "*emerge-diff-errors*")) | |
710 (emerge-eval-in-buffer | |
711 emerge-diff-error-buffer | |
712 (erase-buffer) | |
713 (insert-buffer emerge-diff-buffer) | |
714 (delete-matching-lines ok-regexp))) | |
715 | |
716 ;;; Top-level and setup functions for three-file mode. | |
717 | |
718 (defun emerge-files-with-ancestor-internal (file-A file-B file-ancestor | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
719 &optional startup-hooks quit-hooks |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
720 output-file) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
721 (if (not (file-readable-p file-A)) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
722 (error "File `%s' does not exist or is not readable" file-A)) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
723 (if (not (file-readable-p file-B)) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
724 (error "File `%s' does not exist or is not readable" file-B)) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
725 (if (not (file-readable-p file-ancestor)) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
726 (error "File `%s' does not exist or is not readable" file-ancestor)) |
583 | 727 (let ((buffer-A (find-file-noselect file-A)) |
728 (buffer-B (find-file-noselect file-B)) | |
729 (buffer-ancestor (find-file-noselect file-ancestor))) | |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
730 ;; Record the directories of the files |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
731 (setq emerge-last-dir-A (file-name-directory file-A)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
732 (setq emerge-last-dir-B (file-name-directory file-B)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
733 (setq emerge-last-dir-ancestor (file-name-directory file-ancestor)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
734 (if output-file |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
735 (setq emerge-last-dir-output (file-name-directory output-file))) |
583 | 736 ;; Make sure the entire files are seen, and they reflect what is on disk |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
737 (emerge-eval-in-buffer |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
738 buffer-A |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
739 (widen) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
740 (let ((temp (file-local-copy file-A))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
741 (if temp |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
742 (setq file-A temp |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
743 startup-hooks |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
744 (cons `(lambda () (delete-file ,file-A)) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
745 startup-hooks)) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
746 ;; Verify that the file matches the buffer |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
747 (emerge-verify-file-buffer)))) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
748 (emerge-eval-in-buffer |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
749 buffer-B |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
750 (widen) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
751 (let ((temp (file-local-copy file-B))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
752 (if temp |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
753 (setq file-B temp |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
754 startup-hooks |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
755 (cons `(lambda () (delete-file ,file-B)) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
756 startup-hooks)) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
757 ;; Verify that the file matches the buffer |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
758 (emerge-verify-file-buffer)))) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
759 (emerge-eval-in-buffer |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
760 buffer-ancestor |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
761 (widen) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
762 (let ((temp (file-local-copy file-ancestor))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
763 (if temp |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
764 (setq file-ancestor temp |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
765 startup-hooks |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
766 (cons `(lambda () (delete-file ,file-ancestor)) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
767 startup-hooks)) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
768 ;; Verify that the file matches the buffer |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
769 (emerge-verify-file-buffer)))) |
583 | 770 (emerge-setup-with-ancestor buffer-A file-A buffer-B file-B |
771 buffer-ancestor file-ancestor | |
772 startup-hooks quit-hooks output-file))) | |
773 | |
774 ;; Start up Emerge on two files with an ancestor | |
775 (defun emerge-setup-with-ancestor (buffer-A file-A buffer-B file-B | |
776 buffer-ancestor file-ancestor | |
777 &optional startup-hooks quit-hooks | |
778 output-file) | |
779 (setq file-A (expand-file-name file-A)) | |
780 (setq file-B (expand-file-name file-B)) | |
781 (setq file-ancestor (expand-file-name file-ancestor)) | |
782 (setq output-file (and output-file (expand-file-name output-file))) | |
783 (let* ((merge-buffer-name (emerge-unique-buffer-name "*merge" "*")) | |
784 ;; create the merge buffer from buffer A, so it inherits buffer A's | |
785 ;; default directory, etc. | |
786 (merge-buffer (emerge-eval-in-buffer | |
787 buffer-A | |
788 (get-buffer-create merge-buffer-name)))) | |
789 (emerge-eval-in-buffer | |
790 merge-buffer | |
791 (emerge-copy-modes buffer-A) | |
792 (setq buffer-read-only nil) | |
793 (auto-save-mode 1) | |
794 (setq emerge-mode t) | |
795 (setq emerge-A-buffer buffer-A) | |
796 (setq emerge-B-buffer buffer-B) | |
797 (setq emerge-ancestor-buffer buffer-ancestor) | |
798 (setq emerge-merge-buffer merge-buffer) | |
799 (setq emerge-output-description | |
800 (if output-file | |
801 (concat "Output to file: " output-file) | |
802 (concat "Output to buffer: " (buffer-name merge-buffer)))) | |
803 (insert-buffer emerge-A-buffer) | |
804 (emerge-set-keys) | |
805 (setq emerge-difference-list | |
806 (emerge-make-diff3-list file-A file-B file-ancestor)) | |
807 (setq emerge-number-of-differences (length emerge-difference-list)) | |
808 (setq emerge-current-difference -1) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
809 (setq emerge-quit-hook quit-hooks) |
583 | 810 (emerge-remember-buffer-characteristics) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
811 (emerge-select-prefer-Bs) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
812 (emerge-handle-local-variables)) |
583 | 813 (emerge-setup-windows buffer-A buffer-B merge-buffer t) |
814 (emerge-eval-in-buffer merge-buffer | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
815 (run-hooks 'startup-hooks 'emerge-startup-hook) |
583 | 816 (setq buffer-read-only t)))) |
817 | |
818 ;; Generate the Emerge difference list between two files with an ancestor | |
819 (defun emerge-make-diff3-list (file-A file-B file-ancestor) | |
820 (setq emerge-diff-buffer (get-buffer-create "*emerge-diff*")) | |
821 (emerge-eval-in-buffer | |
822 emerge-diff-buffer | |
823 (erase-buffer) | |
824 (shell-command | |
825 (format "%s %s %s %s %s" | |
826 emerge-diff3-program emerge-diff-options | |
3732
60292a8697bc
(emerge-make-diff3-list): Pass ancestor second.
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
827 (emerge-protect-metachars file-A) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
828 (emerge-protect-metachars file-ancestor) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
829 (emerge-protect-metachars file-B)) |
583 | 830 t)) |
2773
8ab8f28b78d1
(emerge-find-difference-diff): Renamed from emerge-find-difference.
Richard M. Stallman <rms@gnu.org>
parents:
2772
diff
changeset
|
831 (emerge-prepare-error-list emerge-diff3-ok-lines-regexp) |
583 | 832 (emerge-convert-diffs-to-markers |
833 emerge-A-buffer emerge-B-buffer emerge-merge-buffer | |
834 (emerge-extract-diffs3 emerge-diff-buffer))) | |
835 | |
836 (defun emerge-extract-diffs3 (diff-buffer) | |
837 (let (list) | |
838 (emerge-eval-in-buffer | |
839 diff-buffer | |
840 (while (re-search-forward "^====\\(.?\\)$" nil t) | |
841 ;; leave point after matched line | |
842 (beginning-of-line 2) | |
843 (let ((agreement (buffer-substring (match-beginning 1) (match-end 1)))) | |
844 ;; if the A and B files are the same, ignore the difference | |
3732
60292a8697bc
(emerge-make-diff3-list): Pass ancestor second.
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
845 (if (not (string-equal agreement "2")) |
583 | 846 (setq list |
847 (cons | |
3732
60292a8697bc
(emerge-make-diff3-list): Pass ancestor second.
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
848 (let (group-1 group-3 pos) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
849 (setq pos (point)) |
3732
60292a8697bc
(emerge-make-diff3-list): Pass ancestor second.
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
850 (setq group-1 (emerge-get-diff3-group "1")) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
851 (goto-char pos) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
852 (setq group-3 (emerge-get-diff3-group "3")) |
3732
60292a8697bc
(emerge-make-diff3-list): Pass ancestor second.
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
853 (vector (car group-1) (car (cdr group-1)) |
583 | 854 (car group-3) (car (cdr group-3)) |
3732
60292a8697bc
(emerge-make-diff3-list): Pass ancestor second.
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
855 (cond ((string-equal agreement "1") 'prefer-A) |
583 | 856 ((string-equal agreement "3") 'prefer-B) |
857 (t 'default-A)))) | |
858 list)))))) | |
859 (nreverse list))) | |
860 | |
861 (defun emerge-get-diff3-group (file) | |
862 ;; This save-excursion allows emerge-get-diff3-group to be called for the | |
863 ;; various groups of lines (1, 2, 3) in any order, and for the lines to | |
864 ;; appear in any order. The reason this is necessary is that Gnu diff3 | |
865 ;; can produce the groups in the order 1, 2, 3 or 1, 3, 2. | |
866 (save-excursion | |
867 (re-search-forward | |
868 (concat "^" file ":\\([0-9]+\\)\\(,\\([0-9]+\\)\\)?\\([ac]\\)$")) | |
869 (beginning-of-line 2) | |
870 ;; treatment depends on whether it is an "a" group or a "c" group | |
871 (if (string-equal (buffer-substring (match-beginning 4) (match-end 4)) "c") | |
872 ;; it is a "c" group | |
873 (if (match-beginning 2) | |
874 ;; it has two numbers | |
875 (list (string-to-int | |
876 (buffer-substring (match-beginning 1) (match-end 1))) | |
877 (1+ (string-to-int | |
878 (buffer-substring (match-beginning 3) (match-end 3))))) | |
879 ;; it has one number | |
880 (let ((x (string-to-int | |
881 (buffer-substring (match-beginning 1) (match-end 1))))) | |
882 (list x (1+ x)))) | |
883 ;; it is an "a" group | |
884 (let ((x (1+ (string-to-int | |
885 (buffer-substring (match-beginning 1) (match-end 1)))))) | |
886 (list x x))))) | |
887 | |
888 ;;; Functions to start Emerge on files | |
889 | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
890 ;;;###autoload |
583 | 891 (defun emerge-files (arg file-A file-B file-out &optional startup-hooks |
892 quit-hooks) | |
893 "Run Emerge on two files." | |
894 (interactive | |
895 (let (f) | |
896 (list current-prefix-arg | |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
897 (setq f (emerge-read-file-name "File A to merge" emerge-last-dir-A |
10179
970e59851fc5
(emerge-read-file-name): New arg must-match.
Richard M. Stallman <rms@gnu.org>
parents:
9861
diff
changeset
|
898 nil nil t)) |
970e59851fc5
(emerge-read-file-name): New arg must-match.
Richard M. Stallman <rms@gnu.org>
parents:
9861
diff
changeset
|
899 (emerge-read-file-name "File B to merge" emerge-last-dir-B nil f t) |
583 | 900 (and current-prefix-arg |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
901 (emerge-read-file-name "Output file" emerge-last-dir-output |
10179
970e59851fc5
(emerge-read-file-name): New arg must-match.
Richard M. Stallman <rms@gnu.org>
parents:
9861
diff
changeset
|
902 f f nil))))) |
15804
dd08f1c1f488
(emerge-files-with-ancestor, emerge-files):
Richard M. Stallman <rms@gnu.org>
parents:
14668
diff
changeset
|
903 (if file-out |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
904 (add-hook 'quit-hooks `(lambda () (emerge-files-exit ,file-out)))) |
583 | 905 (emerge-files-internal |
906 file-A file-B startup-hooks | |
15804
dd08f1c1f488
(emerge-files-with-ancestor, emerge-files):
Richard M. Stallman <rms@gnu.org>
parents:
14668
diff
changeset
|
907 quit-hooks |
583 | 908 file-out)) |
909 | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
910 ;;;###autoload |
583 | 911 (defun emerge-files-with-ancestor (arg file-A file-B file-ancestor file-out |
912 &optional startup-hooks quit-hooks) | |
913 "Run Emerge on two files, giving another file as the ancestor." | |
914 (interactive | |
915 (let (f) | |
916 (list current-prefix-arg | |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
917 (setq f (emerge-read-file-name "File A to merge" emerge-last-dir-A |
10179
970e59851fc5
(emerge-read-file-name): New arg must-match.
Richard M. Stallman <rms@gnu.org>
parents:
9861
diff
changeset
|
918 nil nil t)) |
970e59851fc5
(emerge-read-file-name): New arg must-match.
Richard M. Stallman <rms@gnu.org>
parents:
9861
diff
changeset
|
919 (emerge-read-file-name "File B to merge" emerge-last-dir-B nil f t) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
920 (emerge-read-file-name "Ancestor file" emerge-last-dir-ancestor |
10179
970e59851fc5
(emerge-read-file-name): New arg must-match.
Richard M. Stallman <rms@gnu.org>
parents:
9861
diff
changeset
|
921 nil f t) |
583 | 922 (and current-prefix-arg |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
923 (emerge-read-file-name "Output file" emerge-last-dir-output |
10179
970e59851fc5
(emerge-read-file-name): New arg must-match.
Richard M. Stallman <rms@gnu.org>
parents:
9861
diff
changeset
|
924 f f nil))))) |
15804
dd08f1c1f488
(emerge-files-with-ancestor, emerge-files):
Richard M. Stallman <rms@gnu.org>
parents:
14668
diff
changeset
|
925 (if file-out |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
926 (add-hook 'quit-hooks `(lambda () (emerge-files-exit ,file-out)))) |
583 | 927 (emerge-files-with-ancestor-internal |
928 file-A file-B file-ancestor startup-hooks | |
15804
dd08f1c1f488
(emerge-files-with-ancestor, emerge-files):
Richard M. Stallman <rms@gnu.org>
parents:
14668
diff
changeset
|
929 quit-hooks |
583 | 930 file-out)) |
931 | |
932 ;; Write the merge buffer out in place of the file the A buffer is visiting. | |
933 (defun emerge-files-exit (file-out) | |
934 ;; if merge was successful was given, save to disk | |
935 (if (not emerge-prefix-argument) | |
936 (emerge-write-and-delete file-out))) | |
937 | |
938 ;;; Functions to start Emerge on buffers | |
939 | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
940 ;;;###autoload |
583 | 941 (defun emerge-buffers (buffer-A buffer-B &optional startup-hooks quit-hooks) |
942 "Run Emerge on two buffers." | |
943 (interactive "bBuffer A to merge: \nbBuffer B to merge: ") | |
944 (let ((emerge-file-A (emerge-make-temp-file "A")) | |
945 (emerge-file-B (emerge-make-temp-file "B"))) | |
946 (emerge-eval-in-buffer | |
947 buffer-A | |
948 (write-region (point-min) (point-max) emerge-file-A nil 'no-message)) | |
949 (emerge-eval-in-buffer | |
950 buffer-B | |
951 (write-region (point-min) (point-max) emerge-file-B nil 'no-message)) | |
952 (emerge-setup (get-buffer buffer-A) emerge-file-A | |
953 (get-buffer buffer-B) emerge-file-B | |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
954 (cons `(lambda () |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
955 (delete-file ,emerge-file-A) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
956 (delete-file ,emerge-file-B)) |
583 | 957 startup-hooks) |
958 quit-hooks | |
959 nil))) | |
960 | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
961 ;;;###autoload |
583 | 962 (defun emerge-buffers-with-ancestor (buffer-A buffer-B buffer-ancestor |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
963 &optional startup-hooks |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
964 quit-hooks) |
583 | 965 "Run Emerge on two buffers, giving another buffer as the ancestor." |
966 (interactive | |
967 "bBuffer A to merge: \nbBuffer B to merge: \nbAncestor buffer: ") | |
968 (let ((emerge-file-A (emerge-make-temp-file "A")) | |
969 (emerge-file-B (emerge-make-temp-file "B")) | |
970 (emerge-file-ancestor (emerge-make-temp-file "anc"))) | |
971 (emerge-eval-in-buffer | |
972 buffer-A | |
973 (write-region (point-min) (point-max) emerge-file-A nil 'no-message)) | |
974 (emerge-eval-in-buffer | |
975 buffer-B | |
976 (write-region (point-min) (point-max) emerge-file-B nil 'no-message)) | |
977 (emerge-eval-in-buffer | |
978 buffer-ancestor | |
979 (write-region (point-min) (point-max) emerge-file-ancestor nil | |
980 'no-message)) | |
981 (emerge-setup-with-ancestor (get-buffer buffer-A) emerge-file-A | |
982 (get-buffer buffer-B) emerge-file-B | |
983 (get-buffer buffer-ancestor) | |
984 emerge-file-ancestor | |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
985 (cons `(lambda () |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
986 (delete-file ,emerge-file-A) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
987 (delete-file ,emerge-file-B) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
988 (delete-file |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
989 ,emerge-file-ancestor)) |
583 | 990 startup-hooks) |
991 quit-hooks | |
992 nil))) | |
993 | |
994 ;;; Functions to start Emerge from the command line | |
995 | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
996 ;;;###autoload |
583 | 997 (defun emerge-files-command () |
998 (let ((file-a (nth 0 command-line-args-left)) | |
999 (file-b (nth 1 command-line-args-left)) | |
1000 (file-out (nth 2 command-line-args-left))) | |
1001 (setq command-line-args-left (nthcdr 3 command-line-args-left)) | |
1002 (emerge-files-internal | |
1003 file-a file-b nil | |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1004 (list `(lambda () (emerge-command-exit ,file-out)))))) |
583 | 1005 |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1006 ;;;###autoload |
583 | 1007 (defun emerge-files-with-ancestor-command () |
1008 (let (file-a file-b file-anc file-out) | |
1009 ;; check for a -a flag, for filemerge compatibility | |
1010 (if (string= (car command-line-args-left) "-a") | |
1011 ;; arguments are "-a ancestor file-a file-b file-out" | |
1012 (progn | |
1013 (setq file-a (nth 2 command-line-args-left)) | |
1014 (setq file-b (nth 3 command-line-args-left)) | |
1015 (setq file-anc (nth 1 command-line-args-left)) | |
1016 (setq file-out (nth 4 command-line-args-left)) | |
1017 (setq command-line-args-left (nthcdr 5 command-line-args-left))) | |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1018 ;; arguments are "file-a file-b ancestor file-out" |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1019 (setq file-a (nth 0 command-line-args-left)) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1020 (setq file-b (nth 1 command-line-args-left)) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1021 (setq file-anc (nth 2 command-line-args-left)) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1022 (setq file-out (nth 3 command-line-args-left)) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1023 (setq command-line-args-left (nthcdr 4 command-line-args-left))) |
583 | 1024 (emerge-files-with-ancestor-internal |
1025 file-a file-b file-anc nil | |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1026 (list `(lambda () (emerge-command-exit ,file-out)))))) |
583 | 1027 |
1028 (defun emerge-command-exit (file-out) | |
1029 (emerge-write-and-delete file-out) | |
1030 (kill-emacs (if emerge-prefix-argument 1 0))) | |
1031 | |
1032 ;;; Functions to start Emerge via remote request | |
1033 | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1034 ;;;###autoload |
583 | 1035 (defun emerge-files-remote (file-a file-b file-out) |
1036 (setq emerge-file-out file-out) | |
1037 (emerge-files-internal | |
1038 file-a file-b nil | |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1039 (list `(lambda () (emerge-remote-exit ,file-out ',emerge-exit-func))) |
583 | 1040 file-out) |
1041 (throw 'client-wait nil)) | |
1042 | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1043 ;;;###autoload |
583 | 1044 (defun emerge-files-with-ancestor-remote (file-a file-b file-anc file-out) |
1045 (setq emerge-file-out file-out) | |
1046 (emerge-files-with-ancestor-internal | |
1047 file-a file-b file-anc nil | |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1048 (list `(lambda () (emerge-remote-exit ,file-out ',emerge-exit-func))) |
583 | 1049 file-out) |
1050 (throw 'client-wait nil)) | |
1051 | |
5796
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
1052 (defun emerge-remote-exit (file-out emerge-exit-func) |
583 | 1053 (emerge-write-and-delete file-out) |
1054 (kill-buffer emerge-merge-buffer) | |
5796
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
1055 (funcall emerge-exit-func (if emerge-prefix-argument 1 0))) |
583 | 1056 |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1057 ;;; Functions to start Emerge on RCS versions |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1058 |
6286
676773222f1f
(emerge-revisions, emerge-revisions-with-ancestor)
Richard M. Stallman <rms@gnu.org>
parents:
6281
diff
changeset
|
1059 ;;;###autoload |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1060 (defun emerge-revisions (arg file revision-A revision-B |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1061 &optional startup-hooks quit-hooks) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1062 "Emerge two RCS revisions of a file." |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1063 (interactive |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1064 (list current-prefix-arg |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1065 (read-file-name "File to merge: " nil nil 'confirm) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1066 (read-string "Revision A to merge: " emerge-last-revision-A) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1067 (read-string "Revision B to merge: " emerge-last-revision-B))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1068 (setq emerge-last-revision-A revision-A |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1069 emerge-last-revision-B revision-B) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1070 (emerge-revisions-internal |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1071 file revision-A revision-B startup-hooks |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1072 (if arg |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1073 (cons `(lambda () |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1074 (shell-command |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1075 ,(format "%s %s" emerge-rcs-ci-program file))) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1076 quit-hooks) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1077 quit-hooks))) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1078 |
6286
676773222f1f
(emerge-revisions, emerge-revisions-with-ancestor)
Richard M. Stallman <rms@gnu.org>
parents:
6281
diff
changeset
|
1079 ;;;###autoload |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1080 (defun emerge-revisions-with-ancestor (arg file revision-A |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1081 revision-B ancestor |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1082 &optional |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1083 startup-hooks quit-hooks) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1084 "Emerge two RCS revisions of a file, with another revision as ancestor." |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1085 (interactive |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1086 (list current-prefix-arg |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1087 (read-file-name "File to merge: " nil nil 'confirm) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1088 (read-string "Revision A to merge: " emerge-last-revision-A) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1089 (read-string "Revision B to merge: " emerge-last-revision-B) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1090 (read-string "Ancestor: " emerge-last-revision-ancestor))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1091 (setq emerge-last-revision-A revision-A |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1092 emerge-last-revision-B revision-B |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1093 emerge-last-revision-ancestor ancestor) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1094 (emerge-revision-with-ancestor-internal |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1095 file revision-A revision-B ancestor startup-hooks |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1096 (if arg |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1097 (let ((cmd )) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1098 (cons `(lambda () |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1099 (shell-command |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1100 ,(format "%s %s" emerge-rcs-ci-program file))) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1101 quit-hooks)) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1102 quit-hooks))) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1103 |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1104 (defun emerge-revisions-internal (file revision-A revision-B &optional |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1105 startup-hooks quit-hooks output-file) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1106 (let ((buffer-A (get-buffer-create (format "%s,%s" file revision-A))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1107 (buffer-B (get-buffer-create (format "%s,%s" file revision-B))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1108 (emerge-file-A (emerge-make-temp-file "A")) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1109 (emerge-file-B (emerge-make-temp-file "B"))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1110 ;; Get the revisions into buffers |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1111 (emerge-eval-in-buffer |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1112 buffer-A |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1113 (erase-buffer) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1114 (shell-command |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1115 (format "%s -q -p%s %s" emerge-rcs-co-program revision-A file) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1116 t) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1117 (write-region (point-min) (point-max) emerge-file-A nil 'no-message) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1118 (set-buffer-modified-p nil)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1119 (emerge-eval-in-buffer |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1120 buffer-B |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1121 (erase-buffer) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1122 (shell-command |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1123 (format "%s -q -p%s %s" emerge-rcs-co-program revision-B file) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1124 t) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1125 (write-region (point-min) (point-max) emerge-file-B nil 'no-message) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1126 (set-buffer-modified-p nil)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1127 ;; Do the merge |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1128 (emerge-setup buffer-A emerge-file-A |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1129 buffer-B emerge-file-B |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1130 (cons `(lambda () |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1131 (delete-file ,emerge-file-A) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1132 (delete-file ,emerge-file-B)) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1133 startup-hooks) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1134 (cons `(lambda () (emerge-files-exit ,file)) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1135 quit-hooks) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1136 nil))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1137 |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1138 (defun emerge-revision-with-ancestor-internal (file revision-A revision-B |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1139 ancestor |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1140 &optional startup-hooks |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1141 quit-hooks output-file) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1142 (let ((buffer-A (get-buffer-create (format "%s,%s" file revision-A))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1143 (buffer-B (get-buffer-create (format "%s,%s" file revision-B))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1144 (buffer-ancestor (get-buffer-create (format "%s,%s" file ancestor))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1145 (emerge-file-A (emerge-make-temp-file "A")) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1146 (emerge-file-B (emerge-make-temp-file "B")) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1147 (emerge-ancestor (emerge-make-temp-file "ancestor"))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1148 ;; Get the revisions into buffers |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1149 (emerge-eval-in-buffer |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1150 buffer-A |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1151 (erase-buffer) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1152 (shell-command |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1153 (format "%s -q -p%s %s" emerge-rcs-co-program |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1154 revision-A file) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1155 t) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1156 (write-region (point-min) (point-max) emerge-file-A nil 'no-message) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1157 (set-buffer-modified-p nil)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1158 (emerge-eval-in-buffer |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1159 buffer-B |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1160 (erase-buffer) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1161 (shell-command |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1162 (format "%s -q -p%s %s" emerge-rcs-co-program revision-B file) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1163 t) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1164 (write-region (point-min) (point-max) emerge-file-B nil 'no-message) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1165 (set-buffer-modified-p nil)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1166 (emerge-eval-in-buffer |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1167 buffer-ancestor |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1168 (erase-buffer) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1169 (shell-command |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1170 (format "%s -q -p%s %s" emerge-rcs-co-program ancestor file) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1171 t) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1172 (write-region (point-min) (point-max) emerge-ancestor nil 'no-message) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1173 (set-buffer-modified-p nil)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1174 ;; Do the merge |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1175 (emerge-setup-with-ancestor |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1176 buffer-A emerge-file-A buffer-B emerge-file-B |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1177 buffer-ancestor emerge-ancestor |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1178 (cons `(lambda () |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1179 (delete-file ,emerge-file-A) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1180 (delete-file ,emerge-file-B) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1181 (delete-file ,emerge-ancestor)) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1182 startup-hooks) |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1183 (cons `(lambda () (emerge-files-exit ,file)) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1184 quit-hooks) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1185 output-file))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1186 |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1187 ;;; Function to start Emerge based on a line in a file |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1188 |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1189 (defun emerge-execute-line () |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1190 "Run Emerge using files named in current text line. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1191 Looks in that line for whitespace-separated entries of these forms: |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1192 a=file1 |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1193 b=file2 |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1194 ancestor=file3 |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1195 output=file4 |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1196 to specify the files to use in Emerge. |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1197 |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1198 In addition, if only one of `a=file' or `b=file' is present, and `output=file' |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1199 is present: |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1200 If `emerge-execute-line-deletions' is non-nil and `ancestor=file' is present, |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1201 it is assumed that the file in question has been deleted, and it is |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1202 not copied to the output file. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1203 Otherwise, the A or B file present is copied to the output file." |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1204 (interactive) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1205 (let (file-A file-B file-ancestor file-out |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1206 (case-fold-search t)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1207 ;; Stop if at end of buffer (even though we might be in a line, if |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1208 ;; the line does not end with newline) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1209 (if (eobp) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1210 (error "At end of buffer")) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1211 ;; Go to the beginning of the line |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1212 (beginning-of-line) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1213 ;; Skip any initial whitespace |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1214 (if (looking-at "[ \t]*") |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1215 (goto-char (match-end 0))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1216 ;; Process the entire line |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1217 (while (not (eolp)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1218 ;; Get the next entry |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1219 (if (looking-at "\\([a-z]+\\)=\\([^ \t\n]+\\)[ \t]*") |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1220 ;; Break apart the tab (before =) and the filename (after =) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1221 (let ((tag (downcase |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1222 (buffer-substring (match-beginning 1) (match-end 1)))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1223 (file (buffer-substring (match-beginning 2) (match-end 2)))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1224 ;; Move point after the entry |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1225 (goto-char (match-end 0)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1226 ;; Store the filename in the right variable |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1227 (cond |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1228 ((string-equal tag "a") |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1229 (if file-A |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1230 (error "This line has two `A' entries")) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1231 (setq file-A file)) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1232 ((string-equal tag "b") |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1233 (if file-B |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1234 (error "This line has two `B' entries")) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1235 (setq file-B file)) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1236 ((or (string-equal tag "anc") (string-equal tag "ancestor")) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1237 (if file-ancestor |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1238 (error "This line has two `ancestor' entries")) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1239 (setq file-ancestor file)) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1240 ((or (string-equal tag "out") (string-equal tag "output")) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1241 (if file-out |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1242 (error "This line has two `output' entries")) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1243 (setq file-out file)) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1244 (t |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1245 (error "Unrecognized entry")))) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1246 ;; If the match on the entry pattern failed |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1247 (error "Unparsable entry"))) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1248 ;; Make sure that file-A and file-B are present |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1249 (if (not (or (and file-A file-B) file-out)) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1250 (error "Must have both `A' and `B' entries")) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1251 (if (not (or file-A file-B)) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1252 (error "Must have `A' or `B' entry")) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1253 ;; Go to the beginning of the next line, so next execution will use |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1254 ;; next line in buffer. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1255 (beginning-of-line 2) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1256 ;; Execute the correct command |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1257 (cond |
41608
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1258 ;; Merge of two files with ancestor |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1259 ((and file-A file-B file-ancestor) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1260 (message "Merging %s and %s..." file-A file-B) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1261 (emerge-files-with-ancestor (not (not file-out)) file-A file-B |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1262 file-ancestor file-out |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1263 nil |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1264 ;; When done, return to this buffer. |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1265 (list |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1266 `(lambda () |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1267 (switch-to-buffer ,(current-buffer)) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1268 (message "Merge done."))))) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1269 ;; Merge of two files without ancestor |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1270 ((and file-A file-B) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1271 (message "Merging %s and %s..." file-A file-B) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1272 (emerge-files (not (not file-out)) file-A file-B file-out |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1273 nil |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1274 ;; When done, return to this buffer. |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1275 (list |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1276 `(lambda () |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1277 (switch-to-buffer ,(current-buffer)) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1278 (message "Merge done."))))) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1279 ;; There is an output file (or there would have been an error above), |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1280 ;; but only one input file. |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1281 ;; The file appears to have been deleted in one version; do nothing. |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1282 ((and file-ancestor emerge-execute-line-deletions) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1283 (message "No action.")) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1284 ;; The file should be copied from the version that contains it |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1285 (t (let ((input-file (or file-A file-B))) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1286 (message "Copying...") |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1287 (copy-file input-file file-out) |
45db352a0971
Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents:
38436
diff
changeset
|
1288 (message "%s copied to %s." input-file file-out)))))) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1289 |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1290 ;;; Sample function for creating information for emerge-execute-line |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1291 |
20597 | 1292 (defcustom emerge-merge-directories-filename-regexp "[^.]" |
1293 "Regexp describing files to be processed by `emerge-merge-directories'." | |
1294 :type 'regexp | |
1295 :group 'emerge) | |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1296 |
6286
676773222f1f
(emerge-revisions, emerge-revisions-with-ancestor)
Richard M. Stallman <rms@gnu.org>
parents:
6281
diff
changeset
|
1297 ;;;###autoload |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1298 (defun emerge-merge-directories (a-dir b-dir ancestor-dir output-dir) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1299 (interactive |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1300 (list |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1301 (read-file-name "A directory: " nil nil 'confirm) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1302 (read-file-name "B directory: " nil nil 'confirm) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1303 (read-file-name "Ancestor directory (null for none): " nil nil 'confirm) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1304 (read-file-name "Output directory (null for none): " nil nil 'confirm))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1305 ;; Check that we're not on a line |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1306 (if (not (and (bolp) (eolp))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1307 (error "There is text on this line")) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1308 ;; Turn null strings into nil to indicate directories not used. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1309 (if (and ancestor-dir (string-equal ancestor-dir "")) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1310 (setq ancestor-dir nil)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1311 (if (and output-dir (string-equal output-dir "")) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1312 (setq output-dir nil)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1313 ;; Canonicalize the directory names |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1314 (setq a-dir (expand-file-name a-dir)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1315 (if (not (string-equal (substring a-dir -1) "/")) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1316 (setq a-dir (concat a-dir "/"))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1317 (setq b-dir (expand-file-name b-dir)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1318 (if (not (string-equal (substring b-dir -1) "/")) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1319 (setq b-dir (concat b-dir "/"))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1320 (if ancestor-dir |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1321 (progn |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1322 (setq ancestor-dir (expand-file-name ancestor-dir)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1323 (if (not (string-equal (substring ancestor-dir -1) "/")) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1324 (setq ancestor-dir (concat ancestor-dir "/"))))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1325 (if output-dir |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1326 (progn |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1327 (setq output-dir (expand-file-name output-dir)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1328 (if (not (string-equal (substring output-dir -1) "/")) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1329 (setq output-dir (concat output-dir "/"))))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1330 ;; Set the mark to where we start |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1331 (push-mark) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1332 ;; Find out what files are in the directories. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1333 (let* ((a-dir-files |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1334 (directory-files a-dir nil emerge-merge-directories-filename-regexp)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1335 (b-dir-files |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1336 (directory-files b-dir nil emerge-merge-directories-filename-regexp)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1337 (ancestor-dir-files |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1338 (and ancestor-dir |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1339 (directory-files ancestor-dir nil |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1340 emerge-merge-directories-filename-regexp))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1341 (all-files (sort (nconc (copy-sequence a-dir-files) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1342 (copy-sequence b-dir-files) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1343 (copy-sequence ancestor-dir-files)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1344 (function string-lessp)))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1345 ;; Remove duplicates from all-files. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1346 (let ((p all-files)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1347 (while p |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1348 (if (and (cdr p) (string-equal (car p) (car (cdr p)))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1349 (setcdr p (cdr (cdr p))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1350 (setq p (cdr p))))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1351 ;; Generate the control lines for the various files. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1352 (while all-files |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1353 (let ((f (car all-files))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1354 (setq all-files (cdr all-files)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1355 (if (and a-dir-files (string-equal (car a-dir-files) f)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1356 (progn |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1357 (insert "A=" a-dir f "\t") |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1358 (setq a-dir-files (cdr a-dir-files)))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1359 (if (and b-dir-files (string-equal (car b-dir-files) f)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1360 (progn |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1361 (insert "B=" b-dir f "\t") |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1362 (setq b-dir-files (cdr b-dir-files)))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1363 (if (and ancestor-dir-files (string-equal (car ancestor-dir-files) f)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1364 (progn |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1365 (insert "ancestor=" ancestor-dir f "\t") |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1366 (setq ancestor-dir-files (cdr ancestor-dir-files)))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1367 (if output-dir |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1368 (insert "output=" output-dir f "\t")) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1369 (backward-delete-char 1) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1370 (insert "\n"))))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1371 |
583 | 1372 ;;; Common setup routines |
1373 | |
1374 ;; Set up the window configuration. If POS is given, set the points to | |
1375 ;; the beginnings of the buffers. | |
1376 (defun emerge-setup-windows (buffer-A buffer-B merge-buffer &optional pos) | |
1377 ;; Make sure we are not in the minibuffer window when we try to delete | |
1378 ;; all other windows. | |
1379 (if (eq (selected-window) (minibuffer-window)) | |
1380 (other-window 1)) | |
1381 (delete-other-windows) | |
1382 (switch-to-buffer merge-buffer) | |
1383 (emerge-refresh-mode-line) | |
1384 (split-window-vertically) | |
1385 (split-window-horizontally) | |
1386 (switch-to-buffer buffer-A) | |
1387 (if pos | |
1388 (goto-char (point-min))) | |
1389 (other-window 1) | |
1390 (switch-to-buffer buffer-B) | |
1391 (if pos | |
1392 (goto-char (point-min))) | |
1393 (other-window 1) | |
1394 (if pos | |
1395 (goto-char (point-min))) | |
1396 ;; If diff/diff3 reports errors, display them rather than the merge buffer. | |
1397 (if (/= 0 (emerge-eval-in-buffer emerge-diff-error-buffer (buffer-size))) | |
1398 (progn | |
1399 (ding) | |
1400 (message "Errors found in diff/diff3 output. Merge buffer is %s." | |
1401 (buffer-name emerge-merge-buffer)) | |
1402 (switch-to-buffer emerge-diff-error-buffer)))) | |
1403 | |
1404 ;; Set up the keymap in the merge buffer | |
1405 (defun emerge-set-keys () | |
1406 ;; Set up fixed keymaps if necessary | |
1407 (if (not emerge-basic-keymap) | |
1408 (emerge-setup-fixed-keymaps)) | |
1409 ;; Save the old local map | |
1410 (setq emerge-old-keymap (current-local-map)) | |
1411 ;; Construct the edit keymap | |
1412 (setq emerge-edit-keymap (if emerge-old-keymap | |
1413 (copy-keymap emerge-old-keymap) | |
1414 (make-sparse-keymap))) | |
1415 ;; Install the Emerge commands | |
1416 (emerge-force-define-key emerge-edit-keymap emerge-command-prefix | |
1417 'emerge-basic-keymap) | |
5796
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
1418 (define-key emerge-edit-keymap [menu-bar] (make-sparse-keymap)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
1419 |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
1420 ;; Create the additional menu bar items. |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
1421 (define-key emerge-edit-keymap [menu-bar options] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
1422 (cons "Options" emerge-options-menu)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
1423 (define-key emerge-edit-keymap [menu-bar merge] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
1424 (cons "Merge" emerge-merge-menu)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
1425 (define-key emerge-edit-keymap [menu-bar move] |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
1426 (cons "Move" emerge-move-menu)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
1427 |
583 | 1428 ;; Suppress write-file and save-buffer |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1429 (substitute-key-definition 'write-file |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1430 'emerge-query-write-file |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1431 emerge-edit-keymap) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1432 (substitute-key-definition 'save-buffer |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1433 'emerge-query-save-buffer |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1434 emerge-edit-keymap) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1435 (substitute-key-definition 'write-file 'emerge-query-write-file |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1436 emerge-edit-keymap (current-global-map)) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1437 (substitute-key-definition 'save-buffer 'emerge-query-save-buffer |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1438 emerge-edit-keymap (current-global-map)) |
583 | 1439 (use-local-map emerge-fast-keymap) |
1440 (setq emerge-edit-mode nil) | |
1441 (setq emerge-fast-mode t)) | |
1442 | |
1443 (defun emerge-remember-buffer-characteristics () | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1444 "Record certain properties of the buffers being merged. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1445 Must be called in the merge buffer. Remembers read-only, modified, |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1446 auto-save, and saves them in buffer local variables. Sets the buffers |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1447 read-only and turns off `auto-save-mode'. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1448 These characteristics are restored by `emerge-restore-buffer-characteristics'." |
583 | 1449 ;; force auto-save, because we will turn off auto-saving in buffers for the |
1450 ;; duration | |
1451 (do-auto-save) | |
1452 ;; remember and alter buffer characteristics | |
1453 (setq emerge-A-buffer-values | |
1454 (emerge-eval-in-buffer | |
1455 emerge-A-buffer | |
1456 (prog1 | |
1457 (emerge-save-variables emerge-saved-variables) | |
1458 (emerge-restore-variables emerge-saved-variables | |
1459 emerge-merging-values)))) | |
1460 (setq emerge-B-buffer-values | |
1461 (emerge-eval-in-buffer | |
1462 emerge-B-buffer | |
1463 (prog1 | |
1464 (emerge-save-variables emerge-saved-variables) | |
1465 (emerge-restore-variables emerge-saved-variables | |
1466 emerge-merging-values))))) | |
1467 | |
1468 (defun emerge-restore-buffer-characteristics () | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1469 "Restores characteristics saved by `emerge-remember-buffer-characteristics'." |
583 | 1470 (let ((A-values emerge-A-buffer-values) |
1471 (B-values emerge-B-buffer-values)) | |
1472 (emerge-eval-in-buffer emerge-A-buffer | |
1473 (emerge-restore-variables emerge-saved-variables | |
1474 A-values)) | |
1475 (emerge-eval-in-buffer emerge-B-buffer | |
1476 (emerge-restore-variables emerge-saved-variables | |
1477 B-values)))) | |
1478 | |
6556
79884c55326f
(emerge-goto-line): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6286
diff
changeset
|
1479 ;; Move to line DESIRED-LINE assuming we are at line CURRENT-LINE. |
79884c55326f
(emerge-goto-line): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6286
diff
changeset
|
1480 ;; Return DESIRED-LINE. |
79884c55326f
(emerge-goto-line): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6286
diff
changeset
|
1481 (defun emerge-goto-line (desired-line current-line) |
79884c55326f
(emerge-goto-line): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6286
diff
changeset
|
1482 (forward-line (- desired-line current-line)) |
6910
6566088ccf07
(emerge-goto-line): Fix return value.
Karl Heuer <kwzh@gnu.org>
parents:
6809
diff
changeset
|
1483 desired-line) |
6556
79884c55326f
(emerge-goto-line): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6286
diff
changeset
|
1484 |
583 | 1485 (defun emerge-convert-diffs-to-markers (A-buffer |
1486 B-buffer | |
1487 merge-buffer | |
1488 lineno-list) | |
1489 (let* (marker-list | |
1490 (A-point-min (emerge-eval-in-buffer A-buffer (point-min))) | |
1491 (offset (1- A-point-min)) | |
1492 (B-point-min (emerge-eval-in-buffer B-buffer (point-min))) | |
6556
79884c55326f
(emerge-goto-line): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6286
diff
changeset
|
1493 ;; Record current line number in each buffer |
79884c55326f
(emerge-goto-line): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6286
diff
changeset
|
1494 ;; so we don't have to count from the beginning. |
6910
6566088ccf07
(emerge-goto-line): Fix return value.
Karl Heuer <kwzh@gnu.org>
parents:
6809
diff
changeset
|
1495 (a-line 1) |
6566088ccf07
(emerge-goto-line): Fix return value.
Karl Heuer <kwzh@gnu.org>
parents:
6809
diff
changeset
|
1496 (b-line 1)) |
6556
79884c55326f
(emerge-goto-line): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6286
diff
changeset
|
1497 (emerge-eval-in-buffer A-buffer (goto-char (point-min))) |
79884c55326f
(emerge-goto-line): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6286
diff
changeset
|
1498 (emerge-eval-in-buffer B-buffer (goto-char (point-min))) |
583 | 1499 (while lineno-list |
1500 (let* ((list-element (car lineno-list)) | |
1501 a-begin-marker | |
1502 a-end-marker | |
1503 b-begin-marker | |
1504 b-end-marker | |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1505 merge-begin-marker |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1506 merge-end-marker |
583 | 1507 (a-begin (aref list-element 0)) |
1508 (a-end (aref list-element 1)) | |
1509 (b-begin (aref list-element 2)) | |
1510 (b-end (aref list-element 3)) | |
1511 (state (aref list-element 4))) | |
1512 ;; place markers at the appropriate places in the buffers | |
1513 (emerge-eval-in-buffer | |
1514 A-buffer | |
6910
6566088ccf07
(emerge-goto-line): Fix return value.
Karl Heuer <kwzh@gnu.org>
parents:
6809
diff
changeset
|
1515 (setq a-line (emerge-goto-line a-begin a-line)) |
583 | 1516 (setq a-begin-marker (point-marker)) |
6910
6566088ccf07
(emerge-goto-line): Fix return value.
Karl Heuer <kwzh@gnu.org>
parents:
6809
diff
changeset
|
1517 (setq a-line (emerge-goto-line a-end a-line)) |
583 | 1518 (setq a-end-marker (point-marker))) |
1519 (emerge-eval-in-buffer | |
1520 B-buffer | |
6910
6566088ccf07
(emerge-goto-line): Fix return value.
Karl Heuer <kwzh@gnu.org>
parents:
6809
diff
changeset
|
1521 (setq b-line (emerge-goto-line b-begin b-line)) |
583 | 1522 (setq b-begin-marker (point-marker)) |
6910
6566088ccf07
(emerge-goto-line): Fix return value.
Karl Heuer <kwzh@gnu.org>
parents:
6809
diff
changeset
|
1523 (setq b-line (emerge-goto-line b-end b-line)) |
583 | 1524 (setq b-end-marker (point-marker))) |
1525 (setq merge-begin-marker (set-marker | |
1526 (make-marker) | |
1527 (- (marker-position a-begin-marker) | |
1528 offset) | |
1529 merge-buffer)) | |
1530 (setq merge-end-marker (set-marker | |
1531 (make-marker) | |
1532 (- (marker-position a-end-marker) | |
1533 offset) | |
1534 merge-buffer)) | |
1535 ;; record all the markers for this difference | |
1536 (setq marker-list (cons (vector a-begin-marker a-end-marker | |
1537 b-begin-marker b-end-marker | |
1538 merge-begin-marker merge-end-marker | |
1539 state) | |
1540 marker-list))) | |
1541 (setq lineno-list (cdr lineno-list))) | |
1542 ;; convert the list of difference information into a vector for | |
1543 ;; fast access | |
1544 (setq emerge-difference-list (apply 'vector (nreverse marker-list))))) | |
1545 | |
1546 ;; If we have an ancestor, select all B variants that we prefer | |
1547 (defun emerge-select-prefer-Bs () | |
1548 (let ((n 0)) | |
1549 (while (< n emerge-number-of-differences) | |
1550 (if (eq (aref (aref emerge-difference-list n) 6) 'prefer-B) | |
1551 (progn | |
1552 (emerge-unselect-and-select-difference n t) | |
1553 (emerge-select-B) | |
1554 (aset (aref emerge-difference-list n) 6 'prefer-B))) | |
1555 (setq n (1+ n)))) | |
1556 (emerge-unselect-and-select-difference -1)) | |
1557 | |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1558 ;; Process the local-variables list at the end of the merged file, if |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1559 ;; requested. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1560 (defun emerge-handle-local-variables () |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1561 (if emerge-process-local-variables |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1562 (condition-case err |
3732
60292a8697bc
(emerge-make-diff3-list): Pass ancestor second.
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1563 (hack-local-variables) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1564 (error (message "Local-variables error in merge buffer: %s" |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1565 (prin1-to-string err)))))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1566 |
583 | 1567 ;;; Common exit routines |
1568 | |
1569 (defun emerge-write-and-delete (file-out) | |
1570 ;; clear screen format | |
1571 (delete-other-windows) | |
1572 ;; delete A, B, and ancestor buffers, if they haven't been changed | |
1573 (if (not (buffer-modified-p emerge-A-buffer)) | |
1574 (kill-buffer emerge-A-buffer)) | |
1575 (if (not (buffer-modified-p emerge-B-buffer)) | |
1576 (kill-buffer emerge-B-buffer)) | |
1577 (if (and emerge-ancestor-buffer | |
1578 (not (buffer-modified-p emerge-ancestor-buffer))) | |
1579 (kill-buffer emerge-ancestor-buffer)) | |
1580 ;; Write merge buffer to file | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1581 (and file-out |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1582 (write-file file-out))) |
583 | 1583 |
1584 ;;; Commands | |
1585 | |
1586 (defun emerge-recenter (&optional arg) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1587 "Bring the highlighted region of all three merge buffers into view. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1588 This brings the buffers into view if they are in windows. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1589 With an argument, reestablish the default three-window display." |
583 | 1590 (interactive "P") |
1591 ;; If there is an argument, rebuild the window structure | |
1592 (if arg | |
1593 (emerge-setup-windows emerge-A-buffer emerge-B-buffer | |
1594 emerge-merge-buffer)) | |
1595 ;; Redisplay whatever buffers are showing, if there is a selected difference | |
1596 (if (and (>= emerge-current-difference 0) | |
1597 (< emerge-current-difference emerge-number-of-differences)) | |
1598 (let* ((merge-buffer emerge-merge-buffer) | |
1599 (buffer-A emerge-A-buffer) | |
1600 (buffer-B emerge-B-buffer) | |
8974
0d7b32820221
(emerge-recenter, emerge-operate-on-windows):
Richard M. Stallman <rms@gnu.org>
parents:
6910
diff
changeset
|
1601 (window-A (get-buffer-window buffer-A 'visible)) |
0d7b32820221
(emerge-recenter, emerge-operate-on-windows):
Richard M. Stallman <rms@gnu.org>
parents:
6910
diff
changeset
|
1602 (window-B (get-buffer-window buffer-B 'visible)) |
583 | 1603 (merge-window (get-buffer-window merge-buffer)) |
1604 (diff-vector | |
1605 (aref emerge-difference-list emerge-current-difference))) | |
1606 (if window-A (progn | |
1607 (select-window window-A) | |
1608 (emerge-position-region | |
1609 (- (aref diff-vector 0) | |
1610 (1- emerge-before-flag-length)) | |
1611 (+ (aref diff-vector 1) | |
1612 (1- emerge-after-flag-length)) | |
1613 (1+ (aref diff-vector 0))))) | |
1614 (if window-B (progn | |
1615 (select-window window-B) | |
1616 (emerge-position-region | |
1617 (- (aref diff-vector 2) | |
1618 (1- emerge-before-flag-length)) | |
1619 (+ (aref diff-vector 3) | |
1620 (1- emerge-after-flag-length)) | |
1621 (1+ (aref diff-vector 2))))) | |
1622 (if merge-window (progn | |
1623 (select-window merge-window) | |
1624 (emerge-position-region | |
1625 (- (aref diff-vector 4) | |
1626 (1- emerge-before-flag-length)) | |
1627 (+ (aref diff-vector 5) | |
1628 (1- emerge-after-flag-length)) | |
1629 (1+ (aref diff-vector 4)))))))) | |
1630 | |
1631 ;;; Window scrolling operations | |
1632 ;; These operations are designed to scroll all three windows the same amount, | |
1633 ;; so as to keep the text in them aligned. | |
1634 | |
1635 ;; Perform some operation on all three windows (if they are showing). | |
1636 ;; Catches all errors on the operation in the A and B windows, but not | |
1637 ;; in the merge window. Usually, errors come from scrolling off the | |
1638 ;; beginning or end of the buffer, and this gives a nice error message: | |
1639 ;; End of buffer is reported in the merge buffer, but if the scroll was | |
1640 ;; possible in the A or B windows, it is performed there before the error | |
1641 ;; is reported. | |
1642 (defun emerge-operate-on-windows (operation arg) | |
1643 (let* ((merge-buffer emerge-merge-buffer) | |
1644 (buffer-A emerge-A-buffer) | |
1645 (buffer-B emerge-B-buffer) | |
8974
0d7b32820221
(emerge-recenter, emerge-operate-on-windows):
Richard M. Stallman <rms@gnu.org>
parents:
6910
diff
changeset
|
1646 (window-A (get-buffer-window buffer-A 'visible)) |
0d7b32820221
(emerge-recenter, emerge-operate-on-windows):
Richard M. Stallman <rms@gnu.org>
parents:
6910
diff
changeset
|
1647 (window-B (get-buffer-window buffer-B 'visible)) |
583 | 1648 (merge-window (get-buffer-window merge-buffer))) |
1649 (if window-A (progn | |
1650 (select-window window-A) | |
1651 (condition-case nil | |
1652 (funcall operation arg) | |
1653 (error)))) | |
1654 (if window-B (progn | |
1655 (select-window window-B) | |
1656 (condition-case nil | |
1657 (funcall operation arg) | |
1658 (error)))) | |
1659 (if merge-window (progn | |
1660 (select-window merge-window) | |
1661 (funcall operation arg))))) | |
1662 | |
1663 (defun emerge-scroll-up (&optional arg) | |
1664 "Scroll up all three merge buffers, if they are in windows. | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1665 With argument N, scroll N lines; otherwise scroll by nearly |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1666 the height of the merge window. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1667 `C-u -' alone as argument scrolls half the height of the merge window." |
583 | 1668 (interactive "P") |
1669 (emerge-operate-on-windows | |
1670 'scroll-up | |
1671 ;; calculate argument to scroll-up | |
1672 ;; if there is an explicit argument | |
1673 (if (and arg (not (equal arg '-))) | |
1674 ;; use it | |
1675 (prefix-numeric-value arg) | |
1676 ;; if not, see if we can determine a default amount (the window height) | |
1677 (let ((merge-window (get-buffer-window emerge-merge-buffer))) | |
1678 (if (null merge-window) | |
1679 ;; no window, use nil | |
1680 nil | |
1681 (let ((default-amount | |
1682 (- (window-height merge-window) 1 next-screen-context-lines))) | |
1683 ;; the window was found | |
1684 (if arg | |
1685 ;; C-u as argument means half of default amount | |
1686 (/ default-amount 2) | |
1687 ;; no argument means default amount | |
1688 default-amount))))))) | |
1689 | |
1690 (defun emerge-scroll-down (&optional arg) | |
1691 "Scroll down all three merge buffers, if they are in windows. | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1692 With argument N, scroll N lines; otherwise scroll by nearly |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1693 the height of the merge window. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1694 `C-u -' alone as argument scrolls half the height of the merge window." |
583 | 1695 (interactive "P") |
1696 (emerge-operate-on-windows | |
1697 'scroll-down | |
1698 ;; calculate argument to scroll-down | |
1699 ;; if there is an explicit argument | |
1700 (if (and arg (not (equal arg '-))) | |
1701 ;; use it | |
1702 (prefix-numeric-value arg) | |
1703 ;; if not, see if we can determine a default amount (the window height) | |
1704 (let ((merge-window (get-buffer-window emerge-merge-buffer))) | |
1705 (if (null merge-window) | |
1706 ;; no window, use nil | |
1707 nil | |
1708 (let ((default-amount | |
1709 (- (window-height merge-window) 1 next-screen-context-lines))) | |
1710 ;; the window was found | |
1711 (if arg | |
1712 ;; C-u as argument means half of default amount | |
1713 (/ default-amount 2) | |
1714 ;; no argument means default amount | |
1715 default-amount))))))) | |
1716 | |
1717 (defun emerge-scroll-left (&optional arg) | |
1718 "Scroll left all three merge buffers, if they are in windows. | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1719 If an argument is given, that is how many columns are scrolled, else nearly |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1720 the width of the A and B windows. `C-u -' alone as argument scrolls half the |
583 | 1721 width of the A and B windows." |
1722 (interactive "P") | |
1723 (emerge-operate-on-windows | |
1724 'scroll-left | |
1725 ;; calculate argument to scroll-left | |
1726 ;; if there is an explicit argument | |
1727 (if (and arg (not (equal arg '-))) | |
1728 ;; use it | |
1729 (prefix-numeric-value arg) | |
1730 ;; if not, see if we can determine a default amount | |
1731 ;; (half the window width) | |
1732 (let ((merge-window (get-buffer-window emerge-merge-buffer))) | |
1733 (if (null merge-window) | |
1734 ;; no window, use nil | |
1735 nil | |
1736 (let ((default-amount | |
1737 (- (/ (window-width merge-window) 2) 3))) | |
1738 ;; the window was found | |
1739 (if arg | |
1740 ;; C-u as argument means half of default amount | |
1741 (/ default-amount 2) | |
1742 ;; no argument means default amount | |
1743 default-amount))))))) | |
1744 | |
1745 (defun emerge-scroll-right (&optional arg) | |
1746 "Scroll right all three merge buffers, if they are in windows. | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1747 If an argument is given, that is how many columns are scrolled, else nearly |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1748 the width of the A and B windows. `C-u -' alone as argument scrolls half the |
583 | 1749 width of the A and B windows." |
1750 (interactive "P") | |
1751 (emerge-operate-on-windows | |
1752 'scroll-right | |
1753 ;; calculate argument to scroll-right | |
1754 ;; if there is an explicit argument | |
1755 (if (and arg (not (equal arg '-))) | |
1756 ;; use it | |
1757 (prefix-numeric-value arg) | |
1758 ;; if not, see if we can determine a default amount | |
1759 ;; (half the window width) | |
1760 (let ((merge-window (get-buffer-window emerge-merge-buffer))) | |
1761 (if (null merge-window) | |
1762 ;; no window, use nil | |
1763 nil | |
1764 (let ((default-amount | |
1765 (- (/ (window-width merge-window) 2) 3))) | |
1766 ;; the window was found | |
1767 (if arg | |
1768 ;; C-u as argument means half of default amount | |
1769 (/ default-amount 2) | |
1770 ;; no argument means default amount | |
1771 default-amount))))))) | |
1772 | |
1773 (defun emerge-scroll-reset () | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1774 "Reset horizontal scrolling in Emerge. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1775 This resets the horizontal scrolling of all three merge buffers |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1776 to the left margin, if they are in windows." |
583 | 1777 (interactive) |
1778 (emerge-operate-on-windows | |
1779 (function (lambda (x) (set-window-hscroll (selected-window) 0))) | |
1780 nil)) | |
1781 | |
1782 ;; Attempt to show the region nicely. | |
1783 ;; If there are min-lines lines above and below the region, then don't do | |
1784 ;; anything. | |
1785 ;; If not, recenter the region to make it so. | |
14040 | 1786 ;; If that isn't possible, remove context lines balancedly from top and bottom |
583 | 1787 ;; so the entire region shows. |
1788 ;; If that isn't possible, show the top of the region. | |
1789 ;; BEG must be at the beginning of a line. | |
1790 (defun emerge-position-region (beg end pos) | |
1791 ;; First test whether the entire region is visible with | |
1792 ;; emerge-min-visible-lines above and below it | |
1793 (if (not (and (<= (progn | |
1794 (move-to-window-line emerge-min-visible-lines) | |
1795 (point)) | |
1796 beg) | |
1797 (<= end (progn | |
1798 (move-to-window-line | |
1799 (- (1+ emerge-min-visible-lines))) | |
1800 (point))))) | |
1801 ;; We failed that test, see if it fits at all | |
1802 ;; Meanwhile positioning it correctly in case it doesn't fit | |
1803 (progn | |
1804 (set-window-start (selected-window) beg) | |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
1805 (if (pos-visible-in-window-p end) |
583 | 1806 ;; Determine the number of lines that the region occupies |
1807 (let ((lines 0)) | |
1808 (while (> end (progn | |
1809 (move-to-window-line lines) | |
1810 (point))) | |
1811 (setq lines (1+ lines))) | |
1812 ;; And position the beginning on the right line | |
1813 (goto-char beg) | |
1814 (recenter (/ (1+ (- (1- (window-height (selected-window))) | |
1815 lines)) | |
1816 2)))))) | |
1817 (goto-char pos)) | |
1818 | |
1819 (defun emerge-next-difference () | |
1820 "Advance to the next difference." | |
1821 (interactive) | |
1822 (if (< emerge-current-difference emerge-number-of-differences) | |
1823 (let ((n (1+ emerge-current-difference))) | |
1824 (while (and emerge-skip-prefers | |
1825 (< n emerge-number-of-differences) | |
1826 (memq (aref (aref emerge-difference-list n) 6) | |
1827 '(prefer-A prefer-B))) | |
1828 (setq n (1+ n))) | |
1829 (let ((buffer-read-only nil)) | |
1830 (emerge-unselect-and-select-difference n))) | |
1831 (error "At end"))) | |
1832 | |
1833 (defun emerge-previous-difference () | |
1834 "Go to the previous difference." | |
1835 (interactive) | |
1836 (if (> emerge-current-difference -1) | |
1837 (let ((n (1- emerge-current-difference))) | |
1838 (while (and emerge-skip-prefers | |
1839 (> n -1) | |
1840 (memq (aref (aref emerge-difference-list n) 6) | |
1841 '(prefer-A prefer-B))) | |
1842 (setq n (1- n))) | |
1843 (let ((buffer-read-only nil)) | |
1844 (emerge-unselect-and-select-difference n))) | |
1845 (error "At beginning"))) | |
1846 | |
1847 (defun emerge-jump-to-difference (difference-number) | |
1848 "Go to the N-th difference." | |
1849 (interactive "p") | |
1850 (let ((buffer-read-only nil)) | |
1851 (setq difference-number (1- difference-number)) | |
1852 (if (and (>= difference-number -1) | |
1853 (< difference-number (1+ emerge-number-of-differences))) | |
1854 (emerge-unselect-and-select-difference difference-number) | |
1855 (error "Bad difference number")))) | |
1856 | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1857 (defun emerge-abort () |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1858 "Abort the Emerge session." |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1859 (interactive) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1860 (emerge-quit t)) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1861 |
583 | 1862 (defun emerge-quit (arg) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1863 "Finish the Emerge session and exit Emerge. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1864 Prefix argument means to abort rather than successfully finish. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1865 The difference depends on how the merge was started, |
583 | 1866 but usually means to not write over one of the original files, or to signal |
1867 to some process which invoked Emerge a failure code. | |
1868 | |
1869 Unselects the selected difference, if any, restores the read-only and modified | |
1870 flags of the merged file buffers, restores the local keymap of the merge | |
1871 buffer, and sets off various emerge flags. Using Emerge commands in this | |
1872 buffer after this will cause serious problems." | |
1873 (interactive "P") | |
1874 (if (prog1 | |
1875 (y-or-n-p | |
1876 (if (not arg) | |
1877 "Do you really want to successfully finish this merge? " | |
1878 "Do you really want to abort this merge? ")) | |
1879 (message "")) | |
1880 (emerge-really-quit arg))) | |
1881 | |
1882 ;; Perform the quit operations. | |
1883 (defun emerge-really-quit (arg) | |
1884 (setq buffer-read-only nil) | |
1885 (emerge-unselect-and-select-difference -1) | |
1886 (emerge-restore-buffer-characteristics) | |
1887 ;; null out the difference markers so they don't slow down future editing | |
1888 ;; operations | |
1889 (mapcar (function (lambda (d) | |
1890 (set-marker (aref d 0) nil) | |
1891 (set-marker (aref d 1) nil) | |
1892 (set-marker (aref d 2) nil) | |
1893 (set-marker (aref d 3) nil) | |
1894 (set-marker (aref d 4) nil) | |
1895 (set-marker (aref d 5) nil))) | |
1896 emerge-difference-list) | |
1897 ;; allow them to be garbage collected | |
1898 (setq emerge-difference-list nil) | |
1899 ;; restore the local map | |
1900 (use-local-map emerge-old-keymap) | |
1901 ;; turn off all the emerge modes | |
1902 (setq emerge-mode nil) | |
1903 (setq emerge-fast-mode nil) | |
1904 (setq emerge-edit-mode nil) | |
1905 (setq emerge-auto-advance nil) | |
1906 (setq emerge-skip-prefers nil) | |
1907 ;; restore mode line | |
1908 (kill-local-variable 'mode-line-buffer-identification) | |
1909 (let ((emerge-prefix-argument arg)) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1910 (run-hooks 'emerge-quit-hook))) |
583 | 1911 |
1912 (defun emerge-select-A (&optional force) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1913 "Select the A variant of this difference. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1914 Refuses to function if this difference has been edited, i.e., if it |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1915 is neither the A nor the B variant. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1916 A prefix argument forces the variant to be selected |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1917 even if the difference has been edited." |
583 | 1918 (interactive "P") |
1919 (let ((operate | |
1920 (function (lambda () | |
1921 (emerge-select-A-edit merge-begin merge-end A-begin A-end) | |
1922 (if emerge-auto-advance | |
1923 (emerge-next-difference))))) | |
1924 (operate-no-change | |
1925 (function (lambda () | |
1926 (if emerge-auto-advance | |
1927 (emerge-next-difference)))))) | |
1928 (emerge-select-version force operate-no-change operate operate))) | |
1929 | |
1930 ;; Actually select the A variant | |
1931 (defun emerge-select-A-edit (merge-begin merge-end A-begin A-end) | |
1932 (emerge-eval-in-buffer | |
1933 emerge-merge-buffer | |
1934 (delete-region merge-begin merge-end) | |
1935 (goto-char merge-begin) | |
1936 (insert-buffer-substring emerge-A-buffer A-begin A-end) | |
1937 (goto-char merge-begin) | |
1938 (aset diff-vector 6 'A) | |
1939 (emerge-refresh-mode-line))) | |
1940 | |
1941 (defun emerge-select-B (&optional force) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1942 "Select the B variant of this difference. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1943 Refuses to function if this difference has been edited, i.e., if it |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1944 is neither the A nor the B variant. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1945 A prefix argument forces the variant to be selected |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1946 even if the difference has been edited." |
583 | 1947 (interactive "P") |
1948 (let ((operate | |
1949 (function (lambda () | |
1950 (emerge-select-B-edit merge-begin merge-end B-begin B-end) | |
1951 (if emerge-auto-advance | |
1952 (emerge-next-difference))))) | |
1953 (operate-no-change | |
1954 (function (lambda () | |
1955 (if emerge-auto-advance | |
1956 (emerge-next-difference)))))) | |
1957 (emerge-select-version force operate operate-no-change operate))) | |
1958 | |
1959 ;; Actually select the B variant | |
1960 (defun emerge-select-B-edit (merge-begin merge-end B-begin B-end) | |
1961 (emerge-eval-in-buffer | |
1962 emerge-merge-buffer | |
1963 (delete-region merge-begin merge-end) | |
1964 (goto-char merge-begin) | |
1965 (insert-buffer-substring emerge-B-buffer B-begin B-end) | |
1966 (goto-char merge-begin) | |
1967 (aset diff-vector 6 'B) | |
1968 (emerge-refresh-mode-line))) | |
1969 | |
1970 (defun emerge-default-A () | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1971 "Make the A variant the default from here down. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1972 This selects the A variant for all differences from here down in the buffer |
583 | 1973 which are still defaulted, i.e., which the user has not selected and for |
1974 which there is no preference." | |
1975 (interactive) | |
1976 (let ((buffer-read-only nil)) | |
1977 (let ((selected-difference emerge-current-difference) | |
1978 (n (max emerge-current-difference 0))) | |
1979 (while (< n emerge-number-of-differences) | |
1980 (let ((diff-vector (aref emerge-difference-list n))) | |
1981 (if (eq (aref diff-vector 6) 'default-B) | |
1982 (progn | |
1983 (emerge-unselect-and-select-difference n t) | |
1984 (emerge-select-A) | |
1985 (aset diff-vector 6 'default-A)))) | |
1986 (setq n (1+ n)) | |
4399
8080301bd1d9
(emerge-default-[AB]): Use (zerop (% A B)) instead of
Paul Eggert <eggert@twinsun.com>
parents:
3732
diff
changeset
|
1987 (if (zerop (% n 10)) |
583 | 1988 (message "Setting default to A...%d" n))) |
1989 (emerge-unselect-and-select-difference selected-difference))) | |
5796
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
1990 (message "Default choice is now A")) |
583 | 1991 |
1992 (defun emerge-default-B () | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1993 "Make the B variant the default from here down. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
1994 This selects the B variant for all differences from here down in the buffer |
583 | 1995 which are still defaulted, i.e., which the user has not selected and for |
1996 which there is no preference." | |
1997 (interactive) | |
1998 (let ((buffer-read-only nil)) | |
1999 (let ((selected-difference emerge-current-difference) | |
2000 (n (max emerge-current-difference 0))) | |
2001 (while (< n emerge-number-of-differences) | |
2002 (let ((diff-vector (aref emerge-difference-list n))) | |
2003 (if (eq (aref diff-vector 6) 'default-A) | |
2004 (progn | |
2005 (emerge-unselect-and-select-difference n t) | |
2006 (emerge-select-B) | |
2007 (aset diff-vector 6 'default-B)))) | |
2008 (setq n (1+ n)) | |
4399
8080301bd1d9
(emerge-default-[AB]): Use (zerop (% A B)) instead of
Paul Eggert <eggert@twinsun.com>
parents:
3732
diff
changeset
|
2009 (if (zerop (% n 10)) |
583 | 2010 (message "Setting default to B...%d" n))) |
2011 (emerge-unselect-and-select-difference selected-difference))) | |
5796
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
2012 (message "Default choice is now B")) |
583 | 2013 |
2014 (defun emerge-fast-mode () | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2015 "Set fast mode, for Emerge. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2016 In this mode ordinary Emacs commands are disabled, and Emerge commands |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2017 need not be prefixed with \\<emerge-fast-keymap>\\[emerge-basic-keymap]." |
583 | 2018 (interactive) |
2019 (setq buffer-read-only t) | |
2020 (use-local-map emerge-fast-keymap) | |
2021 (setq emerge-mode t) | |
2022 (setq emerge-fast-mode t) | |
2023 (setq emerge-edit-mode nil) | |
2024 (message "Fast mode set") | |
11564
26d4ff74d4ab
(emerge-fast-mode, emerge-edit-mode): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents:
10179
diff
changeset
|
2025 (force-mode-line-update)) |
583 | 2026 |
2027 (defun emerge-edit-mode () | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2028 "Set edit mode, for Emerge. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2029 In this mode ordinary Emacs commands are available, and Emerge commands |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2030 must be prefixed with \\<emerge-fast-keymap>\\[emerge-basic-keymap]." |
583 | 2031 (interactive) |
2032 (setq buffer-read-only nil) | |
2033 (use-local-map emerge-edit-keymap) | |
2034 (setq emerge-mode t) | |
2035 (setq emerge-fast-mode nil) | |
2036 (setq emerge-edit-mode t) | |
2037 (message "Edit mode set") | |
11564
26d4ff74d4ab
(emerge-fast-mode, emerge-edit-mode): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents:
10179
diff
changeset
|
2038 (force-mode-line-update)) |
583 | 2039 |
2040 (defun emerge-auto-advance (arg) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2041 "Toggle Auto-Advance mode, for Emerge. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2042 This mode causes `emerge-select-A' and `emerge-select-B' to automatically |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2043 advance to the next difference. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2044 With a positive argument, turn on Auto-Advance mode. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2045 With a negative argument, turn off Auto-Advance mode." |
583 | 2046 (interactive "P") |
2047 (setq emerge-auto-advance (if (null arg) | |
2048 (not emerge-auto-advance) | |
2049 (> (prefix-numeric-value arg) 0))) | |
9636
bfc3782dd769
(emerge-auto-advance): Fix criterion for which message.
Richard M. Stallman <rms@gnu.org>
parents:
9606
diff
changeset
|
2050 (message (if emerge-auto-advance |
583 | 2051 "Auto-advance set" |
2052 "Auto-advance cleared")) | |
11564
26d4ff74d4ab
(emerge-fast-mode, emerge-edit-mode): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents:
10179
diff
changeset
|
2053 (force-mode-line-update)) |
583 | 2054 |
2055 (defun emerge-skip-prefers (arg) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2056 "Toggle Skip-Prefers mode, for Emerge. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2057 This mode causes `emerge-next-difference' and `emerge-previous-difference' |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2058 to automatically skip over differences for which there is a preference. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2059 With a positive argument, turn on Skip-Prefers mode. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2060 With a negative argument, turn off Skip-Prefers mode." |
583 | 2061 (interactive "P") |
2062 (setq emerge-skip-prefers (if (null arg) | |
2063 (not emerge-skip-prefers) | |
2064 (> (prefix-numeric-value arg) 0))) | |
2065 (message (if emerge-skip-prefers | |
2066 "Skip-prefers set" | |
2067 "Skip-prefers cleared")) | |
11564
26d4ff74d4ab
(emerge-fast-mode, emerge-edit-mode): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents:
10179
diff
changeset
|
2068 (force-mode-line-update)) |
583 | 2069 |
2070 (defun emerge-copy-as-kill-A () | |
2071 "Put the A variant of this difference in the kill ring." | |
2072 (interactive) | |
2073 (emerge-validate-difference) | |
2074 (let* ((diff-vector | |
2075 (aref emerge-difference-list emerge-current-difference)) | |
2076 (A-begin (1+ (aref diff-vector 0))) | |
2077 (A-end (1- (aref diff-vector 1))) | |
2078 ;; so further kills don't append | |
2079 this-command) | |
2080 (save-excursion | |
2081 (set-buffer emerge-A-buffer) | |
2082 (copy-region-as-kill A-begin A-end)))) | |
2083 | |
2084 (defun emerge-copy-as-kill-B () | |
2085 "Put the B variant of this difference in the kill ring." | |
2086 (interactive) | |
2087 (emerge-validate-difference) | |
2088 (let* ((diff-vector | |
2089 (aref emerge-difference-list emerge-current-difference)) | |
2090 (B-begin (1+ (aref diff-vector 2))) | |
2091 (B-end (1- (aref diff-vector 3))) | |
2092 ;; so further kills don't append | |
2093 this-command) | |
2094 (save-excursion | |
2095 (set-buffer emerge-B-buffer) | |
2096 (copy-region-as-kill B-begin B-end)))) | |
2097 | |
2098 (defun emerge-insert-A (arg) | |
2099 "Insert the A variant of this difference at the point. | |
2100 Leaves point after text, mark before. | |
2101 With prefix argument, puts point before, mark after." | |
2102 (interactive "P") | |
2103 (emerge-validate-difference) | |
2104 (let* ((diff-vector | |
2105 (aref emerge-difference-list emerge-current-difference)) | |
2106 (A-begin (1+ (aref diff-vector 0))) | |
2107 (A-end (1- (aref diff-vector 1))) | |
2108 (opoint (point)) | |
2109 (buffer-read-only nil)) | |
2110 (insert-buffer-substring emerge-A-buffer A-begin A-end) | |
2111 (if (not arg) | |
2112 (set-mark opoint) | |
2113 (set-mark (point)) | |
2114 (goto-char opoint)))) | |
2115 | |
2116 (defun emerge-insert-B (arg) | |
2117 "Insert the B variant of this difference at the point. | |
2118 Leaves point after text, mark before. | |
2119 With prefix argument, puts point before, mark after." | |
2120 (interactive "P") | |
2121 (emerge-validate-difference) | |
2122 (let* ((diff-vector | |
2123 (aref emerge-difference-list emerge-current-difference)) | |
2124 (B-begin (1+ (aref diff-vector 2))) | |
2125 (B-end (1- (aref diff-vector 3))) | |
2126 (opoint (point)) | |
2127 (buffer-read-only nil)) | |
2128 (insert-buffer-substring emerge-B-buffer B-begin B-end) | |
2129 (if (not arg) | |
2130 (set-mark opoint) | |
2131 (set-mark (point)) | |
2132 (goto-char opoint)))) | |
2133 | |
2134 (defun emerge-mark-difference (arg) | |
2135 "Leaves the point before this difference and the mark after it. | |
2136 With prefix argument, puts mark before, point after." | |
2137 (interactive "P") | |
2138 (emerge-validate-difference) | |
2139 (let* ((diff-vector | |
2140 (aref emerge-difference-list emerge-current-difference)) | |
2141 (merge-begin (1+ (aref diff-vector 4))) | |
2142 (merge-end (1- (aref diff-vector 5)))) | |
2143 (if (not arg) | |
2144 (progn | |
2145 (goto-char merge-begin) | |
2146 (set-mark merge-end)) | |
2147 (goto-char merge-end) | |
2148 (set-mark merge-begin)))) | |
2149 | |
2150 (defun emerge-file-names () | |
2151 "Show the names of the buffers or files being operated on by Emerge. | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2152 Use C-u l to reset the windows afterward." |
583 | 2153 (interactive) |
2154 (delete-other-windows) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2155 (let ((temp-buffer-show-function |
583 | 2156 (function (lambda (buf) |
2157 (split-window-vertically) | |
2158 (switch-to-buffer buf) | |
2159 (other-window 1))))) | |
2160 (with-output-to-temp-buffer "*Help*" | |
2161 (emerge-eval-in-buffer emerge-A-buffer | |
2162 (if buffer-file-name | |
2163 (progn | |
2164 (princ "File A is: ") | |
2165 (princ buffer-file-name)) | |
2166 (progn | |
2167 (princ "Buffer A is: ") | |
2168 (princ (buffer-name)))) | |
2169 (princ "\n")) | |
2170 (emerge-eval-in-buffer emerge-B-buffer | |
2171 (if buffer-file-name | |
2172 (progn | |
2173 (princ "File B is: ") | |
2174 (princ buffer-file-name)) | |
2175 (progn | |
2176 (princ "Buffer B is: ") | |
2177 (princ (buffer-name)))) | |
2178 (princ "\n")) | |
2179 (if emerge-ancestor-buffer | |
2180 (emerge-eval-in-buffer emerge-ancestor-buffer | |
2181 (if buffer-file-name | |
2182 (progn | |
2183 (princ "Ancestor file is: ") | |
2184 (princ buffer-file-name)) | |
2185 (progn | |
2186 (princ "Ancestor buffer is: ") | |
2187 (princ (buffer-name)))) | |
2188 (princ "\n"))) | |
9861
7a43916ca395
(emerge-file-names): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents:
9636
diff
changeset
|
2189 (princ emerge-output-description) |
7a43916ca395
(emerge-file-names): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents:
9636
diff
changeset
|
2190 (save-excursion |
7a43916ca395
(emerge-file-names): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents:
9636
diff
changeset
|
2191 (set-buffer standard-output) |
7a43916ca395
(emerge-file-names): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents:
9636
diff
changeset
|
2192 (help-mode))))) |
583 | 2193 |
2194 (defun emerge-join-differences (arg) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2195 "Join the selected difference with the following one. |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
2773
diff
changeset
|
2196 With a prefix argument, join with the preceding one." |
583 | 2197 (interactive "P") |
2198 (let ((n emerge-current-difference)) | |
2199 ;; adjust n to be first difference to join | |
2200 (if arg | |
2201 (setq n (1- n))) | |
2202 ;; n and n+1 are the differences to join | |
2203 ;; check that they are both differences | |
2204 (if (or (< n 0) (>= n (1- emerge-number-of-differences))) | |
2205 (error "Incorrect differences to join")) | |
2206 ;; remove the flags | |
2207 (emerge-unselect-difference emerge-current-difference) | |
2208 ;; decrement total number of differences | |
2209 (setq emerge-number-of-differences (1- emerge-number-of-differences)) | |
2210 ;; build new differences vector | |
2211 (let ((i 0) | |
2212 (new-differences (make-vector emerge-number-of-differences nil))) | |
2213 (while (< i emerge-number-of-differences) | |
2214 (aset new-differences i | |
2215 (cond | |
2216 ((< i n) (aref emerge-difference-list i)) | |
2217 ((> i n) (aref emerge-difference-list (1+ i))) | |
2218 (t (let ((prev (aref emerge-difference-list i)) | |
2219 (next (aref emerge-difference-list (1+ i)))) | |
2220 (vector (aref prev 0) | |
2221 (aref next 1) | |
2222 (aref prev 2) | |
2223 (aref next 3) | |
2224 (aref prev 4) | |
2225 (aref next 5) | |
2226 (let ((ps (aref prev 6)) | |
2227 (ns (aref next 6))) | |
2228 (cond | |
2229 ((eq ps ns) | |
2230 ps) | |
2231 ((and (or (eq ps 'B) (eq ps 'prefer-B)) | |
2232 (or (eq ns 'B) (eq ns 'prefer-B))) | |
2233 'B) | |
2234 (t 'A)))))))) | |
2235 (setq i (1+ i))) | |
2236 (setq emerge-difference-list new-differences)) | |
2237 ;; set the current difference correctly | |
2238 (setq emerge-current-difference n) | |
2239 ;; fix the mode line | |
2240 (emerge-refresh-mode-line) | |
2241 ;; reinsert the flags | |
2242 (emerge-select-difference emerge-current-difference) | |
2243 (emerge-recenter))) | |
2244 | |
2245 (defun emerge-split-difference () | |
2246 "Split the current difference where the points are in the three windows." | |
2247 (interactive) | |
2248 (let ((n emerge-current-difference)) | |
2249 ;; check that this is a valid difference | |
2250 (emerge-validate-difference) | |
2251 ;; get the point values and old difference | |
2252 (let ((A-point (emerge-eval-in-buffer emerge-A-buffer | |
2253 (point-marker))) | |
2254 (B-point (emerge-eval-in-buffer emerge-B-buffer | |
2255 (point-marker))) | |
2256 (merge-point (point-marker)) | |
2257 (old-diff (aref emerge-difference-list n))) | |
2258 ;; check location of the points, give error if they aren't in the | |
2259 ;; differences | |
2260 (if (or (< A-point (aref old-diff 0)) | |
2261 (> A-point (aref old-diff 1))) | |
2262 (error "Point outside of difference in A buffer")) | |
2263 (if (or (< B-point (aref old-diff 2)) | |
2264 (> B-point (aref old-diff 3))) | |
2265 (error "Point outside of difference in B buffer")) | |
2266 (if (or (< merge-point (aref old-diff 4)) | |
2267 (> merge-point (aref old-diff 5))) | |
2268 (error "Point outside of difference in merge buffer")) | |
2269 ;; remove the flags | |
2270 (emerge-unselect-difference emerge-current-difference) | |
2271 ;; increment total number of differences | |
2272 (setq emerge-number-of-differences (1+ emerge-number-of-differences)) | |
2273 ;; build new differences vector | |
2274 (let ((i 0) | |
2275 (new-differences (make-vector emerge-number-of-differences nil))) | |
2276 (while (< i emerge-number-of-differences) | |
2277 (aset new-differences i | |
2278 (cond | |
2279 ((< i n) | |
2280 (aref emerge-difference-list i)) | |
2281 ((> i (1+ n)) | |
2282 (aref emerge-difference-list (1- i))) | |
2283 ((= i n) | |
2284 (vector (aref old-diff 0) | |
2285 A-point | |
2286 (aref old-diff 2) | |
2287 B-point | |
2288 (aref old-diff 4) | |
2289 merge-point | |
2290 (aref old-diff 6))) | |
2291 (t | |
2292 (vector (copy-marker A-point) | |
2293 (aref old-diff 1) | |
2294 (copy-marker B-point) | |
2295 (aref old-diff 3) | |
2296 (copy-marker merge-point) | |
2297 (aref old-diff 5) | |
2298 (aref old-diff 6))))) | |
2299 (setq i (1+ i))) | |
2300 (setq emerge-difference-list new-differences)) | |
2301 ;; set the current difference correctly | |
2302 (setq emerge-current-difference n) | |
2303 ;; fix the mode line | |
2304 (emerge-refresh-mode-line) | |
2305 ;; reinsert the flags | |
2306 (emerge-select-difference emerge-current-difference) | |
2307 (emerge-recenter)))) | |
2308 | |
2309 (defun emerge-trim-difference () | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2310 "Trim lines off top and bottom of difference that are the same. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2311 If lines are the same in both the A and the B versions, strip them off. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2312 \(This can happen when the A and B versions have common lines that the |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2313 ancestor version does not share.)" |
583 | 2314 (interactive) |
2315 ;; make sure we are in a real difference | |
2316 (emerge-validate-difference) | |
2317 ;; remove the flags | |
2318 (emerge-unselect-difference emerge-current-difference) | |
2319 (let* ((diff (aref emerge-difference-list emerge-current-difference)) | |
2320 (top-a (marker-position (aref diff 0))) | |
2321 (bottom-a (marker-position (aref diff 1))) | |
2322 (top-b (marker-position (aref diff 2))) | |
2323 (bottom-b (marker-position (aref diff 3))) | |
2324 (top-m (marker-position (aref diff 4))) | |
2325 (bottom-m (marker-position (aref diff 5))) | |
2326 size success sa sb sm) | |
2327 ;; move down the tops of the difference regions as much as possible | |
2328 ;; Try advancing comparing 1000 chars at a time. | |
2329 ;; When that fails, go 500 chars at a time, and so on. | |
2330 (setq size 1000) | |
2331 (while (> size 0) | |
2332 (setq success t) | |
2333 (while success | |
2334 (setq size (min size (- bottom-a top-a) (- bottom-b top-b) | |
2335 (- bottom-m top-m))) | |
2336 (setq sa (emerge-eval-in-buffer emerge-A-buffer | |
2337 (buffer-substring top-a | |
2338 (+ size top-a)))) | |
2339 (setq sb (emerge-eval-in-buffer emerge-B-buffer | |
2340 (buffer-substring top-b | |
2341 (+ size top-b)))) | |
2342 (setq sm (buffer-substring top-m (+ size top-m))) | |
2343 (setq success (and (> size 0) (equal sa sb) (equal sb sm))) | |
2344 (if success | |
2345 (setq top-a (+ top-a size) | |
2346 top-b (+ top-b size) | |
2347 top-m (+ top-m size)))) | |
2348 (setq size (/ size 2))) | |
2349 ;; move up the bottoms of the difference regions as much as possible | |
2350 ;; Try advancing comparing 1000 chars at a time. | |
2351 ;; When that fails, go 500 chars at a time, and so on. | |
2352 (setq size 1000) | |
2353 (while (> size 0) | |
2354 (setq success t) | |
2355 (while success | |
2356 (setq size (min size (- bottom-a top-a) (- bottom-b top-b) | |
2357 (- bottom-m top-m))) | |
2358 (setq sa (emerge-eval-in-buffer emerge-A-buffer | |
2359 (buffer-substring (- bottom-a size) | |
2360 bottom-a))) | |
2361 (setq sb (emerge-eval-in-buffer emerge-B-buffer | |
2362 (buffer-substring (- bottom-b size) | |
2363 bottom-b))) | |
2364 (setq sm (buffer-substring (- bottom-m size) bottom-m)) | |
2365 (setq success (and (> size 0) (equal sa sb) (equal sb sm))) | |
2366 (if success | |
2367 (setq bottom-a (- bottom-a size) | |
2368 bottom-b (- bottom-b size) | |
2369 bottom-m (- bottom-m size)))) | |
2370 (setq size (/ size 2))) | |
2371 ;; {top,bottom}-{a,b,m} are now set at the new beginnings and ends | |
2372 ;; of the difference regions. Move them to the beginning of lines, as | |
2373 ;; appropriate. | |
2374 (emerge-eval-in-buffer emerge-A-buffer | |
2375 (goto-char top-a) | |
2376 (beginning-of-line) | |
2377 (aset diff 0 (point-marker)) | |
2378 (goto-char bottom-a) | |
2379 (beginning-of-line 2) | |
2380 (aset diff 1 (point-marker))) | |
2381 (emerge-eval-in-buffer emerge-B-buffer | |
2382 (goto-char top-b) | |
2383 (beginning-of-line) | |
2384 (aset diff 2 (point-marker)) | |
2385 (goto-char bottom-b) | |
2386 (beginning-of-line 2) | |
2387 (aset diff 3 (point-marker))) | |
2388 (goto-char top-m) | |
2389 (beginning-of-line) | |
2390 (aset diff 4 (point-marker)) | |
2391 (goto-char bottom-m) | |
2392 (beginning-of-line 2) | |
2393 (aset diff 5 (point-marker)) | |
2394 ;; put the flags back in, recenter the display | |
2395 (emerge-select-difference emerge-current-difference) | |
2396 (emerge-recenter))) | |
2397 | |
2398 (defun emerge-find-difference (arg) | |
2399 "Find the difference containing the current position of the point. | |
2400 If there is no containing difference and the prefix argument is positive, | |
2401 it finds the nearest following difference. A negative prefix argument finds | |
2402 the nearest previous difference." | |
4560
106e0040381f
(emerge-find-difference): Add interactive spec.
Richard M. Stallman <rms@gnu.org>
parents:
4399
diff
changeset
|
2403 (interactive "P") |
2773
8ab8f28b78d1
(emerge-find-difference-diff): Renamed from emerge-find-difference.
Richard M. Stallman <rms@gnu.org>
parents:
2772
diff
changeset
|
2404 (cond ((eq (current-buffer) emerge-A-buffer) |
8ab8f28b78d1
(emerge-find-difference-diff): Renamed from emerge-find-difference.
Richard M. Stallman <rms@gnu.org>
parents:
2772
diff
changeset
|
2405 (emerge-find-difference-A arg)) |
8ab8f28b78d1
(emerge-find-difference-diff): Renamed from emerge-find-difference.
Richard M. Stallman <rms@gnu.org>
parents:
2772
diff
changeset
|
2406 ((eq (current-buffer) emerge-B-buffer) |
8ab8f28b78d1
(emerge-find-difference-diff): Renamed from emerge-find-difference.
Richard M. Stallman <rms@gnu.org>
parents:
2772
diff
changeset
|
2407 (emerge-find-difference-B arg)) |
8ab8f28b78d1
(emerge-find-difference-diff): Renamed from emerge-find-difference.
Richard M. Stallman <rms@gnu.org>
parents:
2772
diff
changeset
|
2408 (t (emerge-find-difference-merge arg)))) |
8ab8f28b78d1
(emerge-find-difference-diff): Renamed from emerge-find-difference.
Richard M. Stallman <rms@gnu.org>
parents:
2772
diff
changeset
|
2409 |
8ab8f28b78d1
(emerge-find-difference-diff): Renamed from emerge-find-difference.
Richard M. Stallman <rms@gnu.org>
parents:
2772
diff
changeset
|
2410 (defun emerge-find-difference-merge (arg) |
8ab8f28b78d1
(emerge-find-difference-diff): Renamed from emerge-find-difference.
Richard M. Stallman <rms@gnu.org>
parents:
2772
diff
changeset
|
2411 "Find the difference containing point, in the merge buffer. |
8ab8f28b78d1
(emerge-find-difference-diff): Renamed from emerge-find-difference.
Richard M. Stallman <rms@gnu.org>
parents:
2772
diff
changeset
|
2412 If there is no containing difference and the prefix argument is positive, |
8ab8f28b78d1
(emerge-find-difference-diff): Renamed from emerge-find-difference.
Richard M. Stallman <rms@gnu.org>
parents:
2772
diff
changeset
|
2413 it finds the nearest following difference. A negative prefix argument finds |
8ab8f28b78d1
(emerge-find-difference-diff): Renamed from emerge-find-difference.
Richard M. Stallman <rms@gnu.org>
parents:
2772
diff
changeset
|
2414 the nearest previous difference." |
583 | 2415 (interactive "P") |
2416 ;; search for the point in the merge buffer, using the markers | |
2417 ;; for the beginning and end of the differences in the merge buffer | |
2418 (emerge-find-difference1 arg (point) 4 5)) | |
2419 | |
2420 (defun emerge-find-difference-A (arg) | |
2773
8ab8f28b78d1
(emerge-find-difference-diff): Renamed from emerge-find-difference.
Richard M. Stallman <rms@gnu.org>
parents:
2772
diff
changeset
|
2421 "Find the difference containing point, in the A buffer. |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2422 This command must be executed in the merge buffer. |
583 | 2423 If there is no containing difference and the prefix argument is positive, |
2424 it finds the nearest following difference. A negative prefix argument finds | |
2425 the nearest previous difference." | |
2426 (interactive "P") | |
2427 ;; search for the point in the A buffer, using the markers | |
2428 ;; for the beginning and end of the differences in the A buffer | |
2429 (emerge-find-difference1 arg | |
2430 (emerge-eval-in-buffer emerge-A-buffer (point)) | |
2431 0 1)) | |
2432 | |
2433 (defun emerge-find-difference-B (arg) | |
2773
8ab8f28b78d1
(emerge-find-difference-diff): Renamed from emerge-find-difference.
Richard M. Stallman <rms@gnu.org>
parents:
2772
diff
changeset
|
2434 "Find the difference containing point, in the B buffer. |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2435 This command must be executed in the merge buffer. |
583 | 2436 If there is no containing difference and the prefix argument is positive, |
2437 it finds the nearest following difference. A negative prefix argument finds | |
2438 the nearest previous difference." | |
2439 (interactive "P") | |
2440 ;; search for the point in the B buffer, using the markers | |
2441 ;; for the beginning and end of the differences in the B buffer | |
2442 (emerge-find-difference1 arg | |
2443 (emerge-eval-in-buffer emerge-B-buffer (point)) | |
2444 2 3)) | |
2445 | |
2446 (defun emerge-find-difference1 (arg location begin end) | |
2447 (let* ((index | |
2448 ;; find first difference containing or after the current position | |
2449 (catch 'search | |
2450 (let ((n 0)) | |
2451 (while (< n emerge-number-of-differences) | |
2452 (let ((diff-vector (aref emerge-difference-list n))) | |
2453 (if (<= location (marker-position (aref diff-vector end))) | |
2454 (throw 'search n))) | |
2455 (setq n (1+ n)))) | |
2456 emerge-number-of-differences)) | |
2457 (contains | |
2458 ;; whether the found difference contains the current position | |
2459 (and (< index emerge-number-of-differences) | |
2460 (<= (marker-position (aref (aref emerge-difference-list index) | |
2461 begin)) | |
2462 location))) | |
2463 (arg-value | |
2464 ;; numeric value of prefix argument | |
2465 (prefix-numeric-value arg))) | |
2466 (emerge-unselect-and-select-difference | |
2467 (cond | |
2468 ;; if the point is in a difference, select it | |
2469 (contains index) | |
2470 ;; if the arg is nil and the point is not in a difference, error | |
2471 ((null arg) (error "No difference contains point")) | |
2472 ;; if the arg is positive, select the following difference | |
2473 ((> arg-value 0) | |
2474 (if (< index emerge-number-of-differences) | |
2475 index | |
2476 (error "No difference contains or follows point"))) | |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
2773
diff
changeset
|
2477 ;; if the arg is negative, select the preceding difference |
583 | 2478 (t |
2479 (if (> index 0) | |
2480 (1- index) | |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
2773
diff
changeset
|
2481 (error "No difference contains or precedes point"))))))) |
583 | 2482 |
2483 (defun emerge-line-numbers () | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2484 "Display the current line numbers. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2485 This function displays the line numbers of the points in the A, B, and |
583 | 2486 merge buffers." |
2487 (interactive) | |
2488 (let* ((valid-diff | |
2489 (and (>= emerge-current-difference 0) | |
2490 (< emerge-current-difference emerge-number-of-differences))) | |
2491 (diff (and valid-diff | |
2492 (aref emerge-difference-list emerge-current-difference))) | |
2493 (merge-line (emerge-line-number-in-buf 4 5)) | |
2494 (A-line (emerge-eval-in-buffer emerge-A-buffer | |
2495 (emerge-line-number-in-buf 0 1))) | |
2496 (B-line (emerge-eval-in-buffer emerge-B-buffer | |
2497 (emerge-line-number-in-buf 2 3)))) | |
2498 (message "At lines: merge = %d, A = %d, B = %d" | |
2499 merge-line A-line B-line))) | |
2500 | |
2501 (defun emerge-line-number-in-buf (begin-marker end-marker) | |
2502 (let (temp) | |
2503 (setq temp (save-excursion | |
2504 (beginning-of-line) | |
2505 (1+ (count-lines 1 (point))))) | |
2506 (if valid-diff | |
2507 (progn | |
2508 (if (> (point) (aref diff begin-marker)) | |
2509 (setq temp (- temp emerge-before-flag-lines))) | |
2510 (if (> (point) (aref diff end-marker)) | |
2511 (setq temp (- temp emerge-after-flag-lines))))) | |
2512 temp)) | |
2513 | |
5796
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
2514 (defun emerge-set-combine-template (string &optional localize) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
2515 "Set `emerge-combine-versions-template' to STRING. |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
2516 This value controls how `emerge-combine-versions' combines the two versions. |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
2517 With prefix argument, `emerge-combine-versions-template' is made local to this |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
2518 merge buffer. Localization is permanent for any particular merge buffer." |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
2519 (interactive "s\nP") |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
2520 (if localize |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
2521 (make-local-variable 'emerge-combine-versions-template)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
2522 (setq emerge-combine-versions-template string) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
2523 (message |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
2524 (if (assq 'emerge-combine-versions-template (buffer-local-variables)) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
2525 "emerge-set-combine-versions-template set locally" |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
2526 "emerge-set-combine-versions-template set"))) |
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
2527 |
583 | 2528 (defun emerge-set-combine-versions-template (start end &optional localize) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2529 "Copy region into `emerge-combine-versions-template'. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2530 This controls how `emerge-combine-versions' will combine the two versions. |
5796
b53b2df1351d
Add defvars for many vars already being used.
Richard M. Stallman <rms@gnu.org>
parents:
4560
diff
changeset
|
2531 With prefix argument, `emerge-combine-versions-template' is made local to this |
583 | 2532 merge buffer. Localization is permanent for any particular merge buffer." |
2533 (interactive "r\nP") | |
2534 (if localize | |
2535 (make-local-variable 'emerge-combine-versions-template)) | |
2536 (setq emerge-combine-versions-template (buffer-substring start end)) | |
2537 (message | |
2538 (if (assq 'emerge-combine-versions-template (buffer-local-variables)) | |
2539 "emerge-set-combine-versions-template set locally." | |
2540 "emerge-set-combine-versions-template set."))) | |
2541 | |
2542 (defun emerge-combine-versions (&optional force) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2543 "Combine versions using the template in `emerge-combine-versions-template'. |
583 | 2544 Refuses to function if this difference has been edited, i.e., if it is |
2545 neither the A nor the B variant. | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2546 An argument forces the variant to be selected even if the difference has |
583 | 2547 been edited." |
2548 (interactive "P") | |
2549 (emerge-combine-versions-internal emerge-combine-versions-template force)) | |
2550 | |
2551 (defun emerge-combine-versions-register (char &optional force) | |
2552 "Combine the two versions using the template in register REG. | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2553 See documentation of the variable `emerge-combine-versions-template' |
583 | 2554 for how the template is interpreted. |
2555 Refuses to function if this difference has been edited, i.e., if it is | |
2556 neither the A nor the B variant. | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2557 An argument forces the variant to be selected even if the difference has |
583 | 2558 been edited." |
2559 (interactive "cRegister containing template: \nP") | |
2560 (let ((template (get-register char))) | |
2561 (if (not (stringp template)) | |
2562 (error "Register does not contain text")) | |
2563 (emerge-combine-versions-internal template force))) | |
2564 | |
2565 (defun emerge-combine-versions-internal (template force) | |
2566 (let ((operate | |
2567 (function (lambda () | |
2568 (emerge-combine-versions-edit merge-begin merge-end | |
2569 A-begin A-end B-begin B-end) | |
2570 (if emerge-auto-advance | |
2571 (emerge-next-difference)))))) | |
2572 (emerge-select-version force operate operate operate))) | |
2573 | |
2574 (defun emerge-combine-versions-edit (merge-begin merge-end | |
2575 A-begin A-end B-begin B-end) | |
2576 (emerge-eval-in-buffer | |
2577 emerge-merge-buffer | |
2578 (delete-region merge-begin merge-end) | |
2579 (goto-char merge-begin) | |
2580 (let ((i 0)) | |
2581 (while (< i (length template)) | |
2582 (let ((c (aref template i))) | |
2583 (if (= c ?%) | |
2584 (progn | |
2585 (setq i (1+ i)) | |
2586 (setq c | |
2587 (condition-case nil | |
2588 (aref template i) | |
2589 (error ?%))) | |
2590 (cond ((= c ?a) | |
2591 (insert-buffer-substring emerge-A-buffer A-begin A-end)) | |
2592 ((= c ?b) | |
2593 (insert-buffer-substring emerge-B-buffer B-begin B-end)) | |
2594 ((= c ?%) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2595 (insert ?%)) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2596 (t |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2597 (insert c)))) |
583 | 2598 (insert c))) |
2599 (setq i (1+ i)))) | |
2600 (goto-char merge-begin) | |
2601 (aset diff-vector 6 'combined) | |
2602 (emerge-refresh-mode-line))) | |
2603 | |
2604 (defun emerge-set-merge-mode (mode) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2605 "Set the major mode in a merge buffer. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2606 Overrides any change that the mode might make to the mode line or local |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2607 keymap. Leaves merge in fast mode." |
583 | 2608 (interactive |
2609 (list (intern (completing-read "New major mode for merge buffer: " | |
2610 obarray 'commandp t nil)))) | |
2611 (funcall mode) | |
2612 (emerge-refresh-mode-line) | |
2613 (if emerge-fast-mode | |
2614 (emerge-fast-mode) | |
2615 (emerge-edit-mode))) | |
2616 | |
2617 (defun emerge-one-line-window () | |
2618 (interactive) | |
2619 (let ((window-min-height 1)) | |
2620 (shrink-window (- (window-height) 2)))) | |
2621 | |
2622 ;;; Support routines | |
2623 | |
2624 ;; Select a difference by placing the visual flags around the appropriate | |
2625 ;; group of lines in the A, B, and merge buffers | |
2626 (defun emerge-select-difference (n) | |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2627 (let ((emerge-globalized-difference-list emerge-difference-list) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2628 (emerge-globalized-number-of-differences emerge-number-of-differences)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2629 (emerge-place-flags-in-buffer emerge-A-buffer n 0 1) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2630 (emerge-place-flags-in-buffer emerge-B-buffer n 2 3) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2631 (emerge-place-flags-in-buffer nil n 4 5)) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2632 (run-hooks 'emerge-select-hook)) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2633 |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2634 (defun emerge-place-flags-in-buffer (buffer difference before-index |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2635 after-index) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2636 (if buffer |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2637 (emerge-eval-in-buffer |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2638 buffer |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2639 (emerge-place-flags-in-buffer1 difference before-index after-index)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2640 (emerge-place-flags-in-buffer1 difference before-index after-index))) |
583 | 2641 |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2642 (defun emerge-place-flags-in-buffer1 (difference before-index after-index) |
583 | 2643 (let ((buffer-read-only nil)) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2644 ;; insert the flag before the difference |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2645 (let ((before (aref (aref emerge-globalized-difference-list difference) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2646 before-index)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2647 here) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2648 (goto-char before) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2649 ;; insert the flag itself |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2650 (insert-before-markers emerge-before-flag) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2651 (setq here (point)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2652 ;; Put the marker(s) referring to this position 1 character before the |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2653 ;; end of the flag, so it won't be damaged by the user. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2654 ;; This gets a bit tricky, as there could be a number of markers |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2655 ;; that have to be moved. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2656 (set-marker before (1- before)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2657 (let ((n (1- difference)) after-marker before-marker diff-list) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2658 (while (and |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2659 (>= n 0) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2660 (progn |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2661 (setq diff-list (aref emerge-globalized-difference-list n) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2662 after-marker (aref diff-list after-index)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2663 (= after-marker here))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2664 (set-marker after-marker (1- after-marker)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2665 (setq before-marker (aref diff-list before-index)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2666 (if (= before-marker here) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2667 (setq before-marker (1- before-marker))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2668 (setq n (1- n))))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2669 ;; insert the flag after the difference |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2670 (let* ((after (aref (aref emerge-globalized-difference-list difference) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2671 after-index)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2672 (here (marker-position after))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2673 (goto-char here) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2674 ;; insert the flag itself |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2675 (insert emerge-after-flag) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2676 ;; Put the marker(s) referring to this position 1 character after the |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2677 ;; beginning of the flag, so it won't be damaged by the user. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2678 ;; This gets a bit tricky, as there could be a number of markers |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2679 ;; that have to be moved. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2680 (set-marker after (1+ after)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2681 (let ((n (1+ difference)) before-marker after-marker diff-list) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2682 (while (and |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2683 (< n emerge-globalized-number-of-differences) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2684 (progn |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2685 (setq diff-list (aref emerge-globalized-difference-list n) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2686 before-marker (aref diff-list before-index)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2687 (= before-marker here))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2688 (set-marker before-marker (1+ before-marker)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2689 (setq after-marker (aref diff-list after-index)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2690 (if (= after-marker here) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2691 (setq after-marker (1+ after-marker))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2692 (setq n (1+ n))))))) |
583 | 2693 |
2694 ;; Unselect a difference by removing the visual flags in the buffers. | |
2695 (defun emerge-unselect-difference (n) | |
2696 (let ((diff-vector (aref emerge-difference-list n))) | |
2697 (emerge-remove-flags-in-buffer emerge-A-buffer | |
2698 (aref diff-vector 0) (aref diff-vector 1)) | |
2699 (emerge-remove-flags-in-buffer emerge-B-buffer | |
2700 (aref diff-vector 2) (aref diff-vector 3)) | |
2701 (emerge-remove-flags-in-buffer emerge-merge-buffer | |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2702 (aref diff-vector 4) (aref diff-vector 5))) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2703 (run-hooks 'emerge-unselect-hook)) |
583 | 2704 |
2705 (defun emerge-remove-flags-in-buffer (buffer before after) | |
2706 (emerge-eval-in-buffer | |
2707 buffer | |
2708 (let ((buffer-read-only nil)) | |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2709 ;; remove the flags, if they're there |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2710 (goto-char (- before (1- emerge-before-flag-length))) |
583 | 2711 (if (looking-at emerge-before-flag-match) |
2712 (delete-char emerge-before-flag-length) | |
2713 ;; the flag isn't there | |
2714 (ding) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2715 (message "Trouble removing flag")) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2716 (goto-char (1- after)) |
583 | 2717 (if (looking-at emerge-after-flag-match) |
2718 (delete-char emerge-after-flag-length) | |
2719 ;; the flag isn't there | |
2720 (ding) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2721 (message "Trouble removing flag"))))) |
583 | 2722 |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2723 ;; Select a difference, removing any flags that exist now. |
583 | 2724 (defun emerge-unselect-and-select-difference (n &optional suppress-display) |
2725 (if (and (>= emerge-current-difference 0) | |
2726 (< emerge-current-difference emerge-number-of-differences)) | |
2727 (emerge-unselect-difference emerge-current-difference)) | |
2728 (if (and (>= n 0) (< n emerge-number-of-differences)) | |
2729 (progn | |
2730 (emerge-select-difference n) | |
2731 (let* ((diff-vector (aref emerge-difference-list n)) | |
2732 (selection-type (aref diff-vector 6))) | |
2733 (if (eq selection-type 'default-A) | |
2734 (aset diff-vector 6 'A) | |
2735 (if (eq selection-type 'default-B) | |
2736 (aset diff-vector 6 'B)))))) | |
2737 (setq emerge-current-difference n) | |
2738 (if (not suppress-display) | |
2739 (progn | |
2740 (emerge-recenter) | |
2741 (emerge-refresh-mode-line)))) | |
2742 | |
2743 ;; Perform tests to see whether user should be allowed to select a version | |
2744 ;; of this difference: | |
2745 ;; a valid difference has been selected; and | |
2746 ;; the difference text in the merge buffer is: | |
2747 ;; the A version (execute a-version), or | |
2748 ;; the B version (execute b-version), or | |
2749 ;; empty (execute neither-version), or | |
2750 ;; argument FORCE is true (execute neither-version) | |
2751 ;; Otherwise, signal an error. | |
2752 (defun emerge-select-version (force a-version b-version neither-version) | |
2753 (emerge-validate-difference) | |
2754 (let ((buffer-read-only nil)) | |
2755 (let* ((diff-vector | |
2756 (aref emerge-difference-list emerge-current-difference)) | |
2757 (A-begin (1+ (aref diff-vector 0))) | |
2758 (A-end (1- (aref diff-vector 1))) | |
2759 (B-begin (1+ (aref diff-vector 2))) | |
2760 (B-end (1- (aref diff-vector 3))) | |
2761 (merge-begin (1+ (aref diff-vector 4))) | |
2762 (merge-end (1- (aref diff-vector 5)))) | |
2763 (if (emerge-compare-buffers emerge-A-buffer A-begin A-end | |
2764 emerge-merge-buffer merge-begin | |
2765 merge-end) | |
2766 (funcall a-version) | |
2767 (if (emerge-compare-buffers emerge-B-buffer B-begin B-end | |
2768 emerge-merge-buffer merge-begin | |
2769 merge-end) | |
2770 (funcall b-version) | |
2771 (if (or force (= merge-begin merge-end)) | |
2772 (funcall neither-version) | |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2773 (error "This difference region has been edited"))))))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2774 |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2775 ;; Read a file name, handling all of the various defaulting rules. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2776 |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2777 (defun emerge-read-file-name (prompt alternative-default-dir default-file |
10179
970e59851fc5
(emerge-read-file-name): New arg must-match.
Richard M. Stallman <rms@gnu.org>
parents:
9861
diff
changeset
|
2778 A-file must-match) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2779 ;; `prompt' should not have trailing ": ", so that it can be modified |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2780 ;; according to context. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2781 ;; If alternative-default-dir is non-nil, it should be used as the default |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2782 ;; directory instead if default-directory, if emerge-default-last-directories |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2783 ;; is set. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2784 ;; If default-file is set, it should be used as the default value. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2785 ;; If A-file is set, and its directory is different from |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2786 ;; alternative-default-dir, and if emerge-default-last-directories is set, |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2787 ;; the default file should be the last part of A-file in the default |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2788 ;; directory. (Overriding default-file.) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2789 (cond |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2790 ;; If this is not the A-file argument (shown by non-nil A-file), and |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2791 ;; if emerge-default-last-directories is set, and |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2792 ;; the default directory exists but is not the same as the directory of the |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2793 ;; A-file, |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2794 ;; then make the default file have the same name as the A-file, but in |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2795 ;; the default directory. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2796 ((and emerge-default-last-directories |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2797 A-file |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2798 alternative-default-dir |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2799 (not (string-equal alternative-default-dir |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2800 (file-name-directory A-file)))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2801 (read-file-name (format "%s (default %s): " |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2802 prompt (file-name-nondirectory A-file)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2803 alternative-default-dir |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2804 (concat alternative-default-dir |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2805 (file-name-nondirectory A-file)) |
10179
970e59851fc5
(emerge-read-file-name): New arg must-match.
Richard M. Stallman <rms@gnu.org>
parents:
9861
diff
changeset
|
2806 (and must-match 'confirm))) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2807 ;; If there is a default file, use it. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2808 (default-file |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2809 (read-file-name (format "%s (default %s): " prompt default-file) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2810 ;; If emerge-default-last-directories is set, use the |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2811 ;; directory from the same argument of the last call of |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2812 ;; Emerge as the default for this argument. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2813 (and emerge-default-last-directories |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2814 alternative-default-dir) |
10179
970e59851fc5
(emerge-read-file-name): New arg must-match.
Richard M. Stallman <rms@gnu.org>
parents:
9861
diff
changeset
|
2815 default-file (and must-match 'confirm))) |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2816 (t |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2817 (read-file-name (concat prompt ": ") |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2818 ;; If emerge-default-last-directories is set, use the |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2819 ;; directory from the same argument of the last call of |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2820 ;; Emerge as the default for this argument. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2821 (and emerge-default-last-directories |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
2822 alternative-default-dir) |
10179
970e59851fc5
(emerge-read-file-name): New arg must-match.
Richard M. Stallman <rms@gnu.org>
parents:
9861
diff
changeset
|
2823 nil (and must-match 'confirm))))) |
583 | 2824 |
2825 ;; Revise the mode line to display which difference we have selected | |
2826 | |
2827 (defun emerge-refresh-mode-line () | |
2828 (setq mode-line-buffer-identification | |
2829 (list (format "Emerge: %%b diff %d of %d%s" | |
2830 (1+ emerge-current-difference) | |
2831 emerge-number-of-differences | |
2832 (if (and (>= emerge-current-difference 0) | |
2833 (< emerge-current-difference | |
2834 emerge-number-of-differences)) | |
2835 (cdr (assq (aref (aref emerge-difference-list | |
2836 emerge-current-difference) | |
2837 6) | |
2838 '((A . " - A") | |
2839 (B . " - B") | |
2840 (prefer-A . " - A*") | |
2841 (prefer-B . " - B*") | |
2842 (combined . " - comb")))) | |
2843 "")))) | |
11564
26d4ff74d4ab
(emerge-fast-mode, emerge-edit-mode): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents:
10179
diff
changeset
|
2844 (force-mode-line-update)) |
583 | 2845 |
2846 ;; compare two regions in two buffers for containing the same text | |
2847 (defun emerge-compare-buffers (buffer-x x-begin x-end buffer-y y-begin y-end) | |
2848 ;; first check that the two regions are the same length | |
2849 (if (not (and (= (- x-end x-begin) (- y-end y-begin)))) | |
2850 nil | |
2851 (catch 'exit | |
2852 (while (< x-begin x-end) | |
2853 ;; bite off and compare no more than 1000 characters at a time | |
2854 (let* ((compare-length (min (- x-end x-begin) 1000)) | |
2855 (x-string (emerge-eval-in-buffer | |
2856 buffer-x | |
2857 (buffer-substring x-begin | |
2858 (+ x-begin compare-length)))) | |
2859 (y-string (emerge-eval-in-buffer | |
2860 buffer-y | |
2861 (buffer-substring y-begin | |
2862 (+ y-begin compare-length))))) | |
2863 (if (not (string-equal x-string y-string)) | |
2864 (throw 'exit nil) | |
2865 (setq x-begin (+ x-begin compare-length)) | |
2866 (setq y-begin (+ y-begin compare-length))))) | |
2867 t))) | |
2868 | |
2869 ;; Construct a unique buffer name. | |
2870 ;; The first one tried is prefixsuffix, then prefix<2>suffix, | |
2871 ;; prefix<3>suffix, etc. | |
2872 (defun emerge-unique-buffer-name (prefix suffix) | |
2873 (if (null (get-buffer (concat prefix suffix))) | |
2874 (concat prefix suffix) | |
2875 (let ((n 2)) | |
2876 (while (get-buffer (format "%s<%d>%s" prefix n suffix)) | |
2877 (setq n (1+ n))) | |
2878 (format "%s<%d>%s" prefix n suffix)))) | |
2879 | |
2880 ;; Verify that we have a difference selected. | |
2881 (defun emerge-validate-difference () | |
2882 (if (not (and (>= emerge-current-difference 0) | |
2883 (< emerge-current-difference emerge-number-of-differences))) | |
2884 (error "No difference selected"))) | |
2885 | |
2886 ;;; Functions for saving and restoring a batch of variables | |
2887 | |
2888 ;; These functions save (get the values of) and restore (set the values of) | |
2889 ;; a list of variables. The argument is a list of symbols (the names of | |
2890 ;; the variables). A list element can also be a list of two functions, | |
2891 ;; the first of which (when called with no arguments) gets the value, and | |
14040 | 2892 ;; the second (when called with a value as an argument) sets the value. |
583 | 2893 ;; A "function" is anything that funcall can handle as an argument. |
2894 | |
2895 (defun emerge-save-variables (vars) | |
2896 (mapcar (function (lambda (v) (if (symbolp v) | |
2897 (symbol-value v) | |
2898 (funcall (car v))))) | |
2899 vars)) | |
2900 | |
2901 (defun emerge-restore-variables (vars values) | |
2902 (while vars | |
2903 (let ((var (car vars)) | |
2904 (value (car values))) | |
2905 (if (symbolp var) | |
2906 (set var value) | |
2907 (funcall (car (cdr var)) value))) | |
2908 (setq vars (cdr vars)) | |
2909 (setq values (cdr values)))) | |
2910 | |
2911 ;; Make a temporary file that only we have access to. | |
2912 ;; PREFIX is appended to emerge-temp-file-prefix to make the filename prefix. | |
2913 (defun emerge-make-temp-file (prefix) | |
29884
1c158fa0f918
(emerge-make-temp-file): Make sure file has proper
Gerd Moellmann <gerd@gnu.org>
parents:
26039
diff
changeset
|
2914 (let (f (old-modes (default-file-modes))) |
1c158fa0f918
(emerge-make-temp-file): Make sure file has proper
Gerd Moellmann <gerd@gnu.org>
parents:
26039
diff
changeset
|
2915 (unwind-protect |
1c158fa0f918
(emerge-make-temp-file): Make sure file has proper
Gerd Moellmann <gerd@gnu.org>
parents:
26039
diff
changeset
|
2916 (progn |
1c158fa0f918
(emerge-make-temp-file): Make sure file has proper
Gerd Moellmann <gerd@gnu.org>
parents:
26039
diff
changeset
|
2917 (set-default-file-modes emerge-temp-file-mode) |
1c158fa0f918
(emerge-make-temp-file): Make sure file has proper
Gerd Moellmann <gerd@gnu.org>
parents:
26039
diff
changeset
|
2918 (setq f (make-temp-file (concat emerge-temp-file-prefix prefix)))) |
1c158fa0f918
(emerge-make-temp-file): Make sure file has proper
Gerd Moellmann <gerd@gnu.org>
parents:
26039
diff
changeset
|
2919 (set-default-file-modes old-modes)) |
583 | 2920 f)) |
2921 | |
2922 ;;; Functions that query the user before he can write out the current buffer. | |
2923 | |
2924 (defun emerge-query-write-file () | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2925 "Ask the user whether to write out an incomplete merge. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2926 If answer is yes, call `write-file' to do so. See `emerge-query-and-call' |
583 | 2927 for details of the querying process." |
2928 (interactive) | |
2929 (emerge-query-and-call 'write-file)) | |
2930 | |
2931 (defun emerge-query-save-buffer () | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2932 "Ask the user whether to save an incomplete merge. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2933 If answer is yes, call `save-buffer' to do so. See `emerge-query-and-call' |
583 | 2934 for details of the querying process." |
2935 (interactive) | |
2936 (emerge-query-and-call 'save-buffer)) | |
2937 | |
2938 (defun emerge-query-and-call (command) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2939 "Ask the user whether to save or write out the incomplete merge. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2940 If answer is yes, call COMMAND interactively. During the call, the flags |
583 | 2941 around the current difference are removed." |
2942 (if (yes-or-no-p "Do you really write to write out this unfinished merge? ") | |
2943 ;; He really wants to do it -- unselect the difference for the duration | |
2944 (progn | |
2945 (if (and (>= emerge-current-difference 0) | |
2946 (< emerge-current-difference emerge-number-of-differences)) | |
2947 (emerge-unselect-difference emerge-current-difference)) | |
2948 ;; call-interactively takes the value of current-prefix-arg as the | |
2949 ;; prefix argument value to be passed to the command. Thus, we have | |
2950 ;; to do nothing special to make sure the prefix argument is | |
2951 ;; transmitted to the command. | |
2952 (call-interactively command) | |
2953 (if (and (>= emerge-current-difference 0) | |
2954 (< emerge-current-difference emerge-number-of-differences)) | |
2955 (progn | |
2956 (emerge-select-difference emerge-current-difference) | |
2957 (emerge-recenter)))) | |
2958 ;; He's being smart and not doing it | |
2959 (message "Not written"))) | |
2960 | |
2961 ;; Make sure the current buffer (for a file) has the same contents as the | |
2962 ;; file on disk, and attempt to remedy the situation if not. | |
2963 ;; Signal an error if we can't make them the same, or the user doesn't want | |
2964 ;; to do what is necessary to make them the same. | |
2965 (defun emerge-verify-file-buffer () | |
2966 ;; First check if the file has been modified since the buffer visited it. | |
2967 (if (verify-visited-file-modtime (current-buffer)) | |
2968 (if (buffer-modified-p) | |
2969 ;; If buffer is not obsolete and is modified, offer to save | |
2970 (if (yes-or-no-p (format "Save file %s? " buffer-file-name)) | |
2971 (save-buffer) | |
2972 (error "Buffer out of sync for file %s" buffer-file-name)) | |
2973 ;; If buffer is not obsolete and is not modified, do nothing | |
2974 nil) | |
2975 (if (buffer-modified-p) | |
2976 ;; If buffer is obsolete and is modified, give error | |
2977 (error "Buffer out of sync for file %s" buffer-file-name) | |
2978 ;; If buffer is obsolete and is not modified, offer to revert | |
2979 (if (yes-or-no-p (format "Revert file %s? " buffer-file-name)) | |
2980 (revert-buffer t t) | |
2981 (error "Buffer out of sync for file %s" buffer-file-name))))) | |
2982 | |
2983 ;; Utilities that might have value outside of Emerge. | |
2984 | |
2985 ;; Set up the mode in the current buffer to duplicate the mode in another | |
2986 ;; buffer. | |
2987 (defun emerge-copy-modes (buffer) | |
2988 ;; Set the major mode | |
2989 (funcall (emerge-eval-in-buffer buffer major-mode))) | |
2990 | |
2991 ;; Define a key, even if a prefix of it is defined | |
2992 (defun emerge-force-define-key (keymap key definition) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2993 "Like `define-key', but forcibly creates prefix characters as needed. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
2994 If some prefix of KEY has a non-prefix definition, it is redefined." |
583 | 2995 ;; Find out if a prefix of key is defined |
2996 (let ((v (lookup-key keymap key))) | |
2997 ;; If so, undefine it | |
2998 (if (integerp v) | |
2999 (define-key keymap (substring key 0 v) nil))) | |
3000 ;; Now define the key | |
3001 (define-key keymap key definition)) | |
3002 | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3003 ;;;;; Improvements to describe-mode, so that it describes minor modes as well |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3004 ;;;;; as the major mode |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3005 ;;(defun describe-mode (&optional minor) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3006 ;; "Display documentation of current major mode. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3007 ;;If optional arg MINOR is non-nil (or prefix argument is given if interactive), |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3008 ;;display documentation of active minor modes as well. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3009 ;;For this to work correctly for a minor mode, the mode's indicator variable |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3010 ;;\(listed in `minor-mode-alist') must also be a function whose documentation |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3011 ;;describes the minor mode." |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3012 ;; (interactive) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3013 ;; (with-output-to-temp-buffer "*Help*" |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3014 ;; (princ mode-name) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3015 ;; (princ " Mode:\n") |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3016 ;; (princ (documentation major-mode)) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3017 ;; (let ((minor-modes minor-mode-alist) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3018 ;; (locals (buffer-local-variables))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3019 ;; (while minor-modes |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3020 ;; (let* ((minor-mode (car (car minor-modes))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3021 ;; (indicator (car (cdr (car minor-modes)))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3022 ;; (local-binding (assq minor-mode locals))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3023 ;; ;; Document a minor mode if it is listed in minor-mode-alist, |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3024 ;; ;; bound locally in this buffer, non-nil, and has a function |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3025 ;; ;; definition. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3026 ;; (if (and local-binding |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3027 ;; (cdr local-binding) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3028 ;; (fboundp minor-mode)) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3029 ;; (progn |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3030 ;; (princ (format "\n\n\n%s minor mode (indicator%s):\n" |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3031 ;; minor-mode indicator)) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3032 ;; (princ (documentation minor-mode))))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3033 ;; (setq minor-modes (cdr minor-modes)))) |
9861
7a43916ca395
(emerge-file-names): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents:
9636
diff
changeset
|
3034 ;; (save-excursion |
7a43916ca395
(emerge-file-names): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents:
9636
diff
changeset
|
3035 ;; (set-buffer standard-output) |
7a43916ca395
(emerge-file-names): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents:
9636
diff
changeset
|
3036 ;; (help-mode)) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3037 ;; (print-help-return-message))) |
583 | 3038 |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3039 ;; This goes with the redefinition of describe-mode. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3040 ;;;; Adjust things so that keyboard macro definitions are documented correctly. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3041 ;;(fset 'defining-kbd-macro (symbol-function 'start-kbd-macro)) |
583 | 3042 |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3043 ;; substitute-key-definition should work now. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3044 ;;;; Function to shadow a definition in a keymap with definitions in another. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3045 ;;(defun emerge-shadow-key-definition (olddef newdef keymap shadowmap) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3046 ;; "Shadow OLDDEF with NEWDEF for any keys in KEYMAP with entries in SHADOWMAP. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3047 ;;In other words, SHADOWMAP will now shadow all definitions of OLDDEF in KEYMAP |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3048 ;;with NEWDEF. Does not affect keys that are already defined in SHADOWMAP, |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3049 ;;including those whose definition is OLDDEF." |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3050 ;; ;; loop through all keymaps accessible from keymap |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3051 ;; (let ((maps (accessible-keymaps keymap))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3052 ;; (while maps |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3053 ;; (let ((prefix (car (car maps))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3054 ;; (map (cdr (car maps)))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3055 ;; ;; examine a keymap |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3056 ;; (if (arrayp map) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3057 ;; ;; array keymap |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3058 ;; (let ((len (length map)) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3059 ;; (i 0)) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3060 ;; (while (< i len) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3061 ;; (if (eq (aref map i) olddef) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3062 ;; ;; set the shadowing definition |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3063 ;; (let ((key (concat prefix (char-to-string i)))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3064 ;; (emerge-define-key-if-possible shadowmap key newdef))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3065 ;; (setq i (1+ i)))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3066 ;; ;; sparse keymap |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3067 ;; (while map |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3068 ;; (if (eq (cdr-safe (car-safe map)) olddef) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3069 ;; ;; set the shadowing definition |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3070 ;; (let ((key |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3071 ;; (concat prefix (char-to-string (car (car map)))))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3072 ;; (emerge-define-key-if-possible shadowmap key newdef))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3073 ;; (setq map (cdr map))))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3074 ;; (setq maps (cdr maps))))) |
583 | 3075 |
3076 ;; Define a key if it (or a prefix) is not already defined in the map. | |
3077 (defun emerge-define-key-if-possible (keymap key definition) | |
3078 ;; look up the present definition of the key | |
3079 (let ((present (lookup-key keymap key))) | |
3080 (if (integerp present) | |
3081 ;; if it is "too long", look up the valid prefix | |
3082 (if (not (lookup-key keymap (substring key 0 present))) | |
3083 ;; if the prefix isn't defined, define it | |
3084 (define-key keymap key definition)) | |
3085 ;; if there is no present definition, define it | |
3086 (if (not present) | |
3087 (define-key keymap key definition))))) | |
3088 | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3089 ;; Ordinary substitute-key-definition should do this now. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3090 ;;(defun emerge-recursively-substitute-key-definition (olddef newdef keymap) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3091 ;; "Like `substitute-key-definition', but act recursively on subkeymaps. |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3092 ;;Make sure that subordinate keymaps aren't shared with other keymaps! |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3093 ;;\(`copy-keymap' will suffice.)" |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3094 ;; ;; Loop through all keymaps accessible from keymap |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3095 ;; (let ((maps (accessible-keymaps keymap))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3096 ;; (while maps |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3097 ;; ;; Substitute in this keymap |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3098 ;; (substitute-key-definition olddef newdef (cdr (car maps))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3099 ;; (setq maps (cdr maps))))) |
583 | 3100 |
3101 ;; Show the name of the file in the buffer. | |
3102 (defun emerge-show-file-name () | |
3103 "Displays the name of the file loaded into the current buffer. | |
3104 If the name won't fit on one line, the minibuffer is expanded to hold it, | |
3105 and the command waits for a keystroke from the user. If the keystroke is | |
3106 SPC, it is ignored; if it is anything else, it is processed as a command." | |
3107 (interactive) | |
3108 (let ((name (buffer-file-name))) | |
3109 (or name | |
3110 (setq name "Buffer has no file name.")) | |
3111 (save-window-excursion | |
3112 (select-window (minibuffer-window)) | |
3113 (erase-buffer) | |
3114 (insert name) | |
3115 (if (not (pos-visible-in-window-p)) | |
3116 (let ((echo-keystrokes 0)) | |
3117 (while (and (not (pos-visible-in-window-p)) | |
42313
44babbee535a
(emerge-show-file-name): Use frame-height instead of obsolete
Pavel Janík <Pavel@Janik.cz>
parents:
41608
diff
changeset
|
3118 (> (1- (frame-height)) (window-height))) |
583 | 3119 (enlarge-window 1)) |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3120 (let ((c (read-event))) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3121 (if (not (eq c 32)) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3122 (setq unread-command-events (list c))))))))) |
583 | 3123 |
3124 ;; Improved auto-save file names. | |
3125 ;; This function fixes many problems with the standard auto-save file names: | |
3126 ;; Auto-save files for non-file buffers get put in the default directory | |
3127 ;; for the buffer, whether that makes sense or not. | |
3128 ;; Auto-save files for file buffers get put in the directory of the file, | |
3129 ;; regardless of whether we can write into it or not. | |
3130 ;; Auto-save files for non-file buffers don't use the process id, so if a | |
3131 ;; user runs more than on Emacs, they can make auto-save files that overwrite | |
3132 ;; each other. | |
3133 ;; To use this function, do: | |
3134 ;; (fset 'make-auto-save-file-name | |
3135 ;; (symbol-function 'emerge-make-auto-save-file-name)) | |
3136 (defun emerge-make-auto-save-file-name () | |
3137 "Return file name to use for auto-saves of current buffer. | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3138 Does not consider `auto-save-visited-file-name'; |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3139 that is checked before calling this function. |
583 | 3140 You can redefine this for customization. |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3141 See also `auto-save-file-name-p'." |
583 | 3142 (if buffer-file-name |
3143 ;; if buffer has a file, try the format <file directory>/#<file name># | |
3144 (let ((f (concat (file-name-directory buffer-file-name) | |
3145 "#" | |
3146 (file-name-nondirectory buffer-file-name) | |
3147 "#"))) | |
3148 (if (file-writable-p f) | |
3149 ;; the file is writable, so use it | |
3150 f | |
3151 ;; the file isn't writable, so use the format | |
3152 ;; ~/#&<file name>&<hash of directory># | |
3153 (concat (getenv "HOME") | |
3154 "/#&" | |
3155 (file-name-nondirectory buffer-file-name) | |
3156 "&" | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3157 (emerge-hash-string-into-string |
583 | 3158 (file-name-directory buffer-file-name)) |
3159 "#"))) | |
3160 ;; if buffer has no file, use the format ~/#%<buffer name>%<process id># | |
3161 (expand-file-name (concat (getenv "HOME") | |
3162 "/#%" | |
3163 ;; quote / into \! and \ into \\ | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3164 (emerge-unslashify-name (buffer-name)) |
583 | 3165 "%" |
3166 (make-temp-name "") | |
3167 "#")))) | |
3168 | |
3169 ;; Hash a string into five characters more-or-less suitable for use in a file | |
3170 ;; name. (Allowed characters are ! through ~, except /.) | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3171 (defun emerge-hash-string-into-string (s) |
583 | 3172 (let ((bins (vector 0 0 0 0 0)) |
3173 (i 0)) | |
3174 (while (< i (length s)) | |
3175 (aset bins (% i 5) (% (+ (* (aref bins (% i 5)) 35) | |
3176 (aref s i)) | |
3177 65536)) | |
3178 (setq i (1+ i))) | |
3179 (mapconcat (function (lambda (b) | |
3180 (setq b (+ (% b 93) ?!)) | |
3181 (if (>= b ?/) | |
3182 (setq b (1+ b))) | |
3183 (char-to-string b))) | |
3184 bins ""))) | |
3185 | |
3186 ;; Quote any /s in a string by replacing them with \!. | |
3187 ;; Also, replace any \s by \\, to make it one-to-one. | |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3188 (defun emerge-unslashify-name (s) |
583 | 3189 (let ((limit 0)) |
3190 (while (string-match "[/\\]" s limit) | |
3191 (setq s (concat (substring s 0 (match-beginning 0)) | |
3192 (if (string= (substring s (match-beginning 0) | |
3193 (match-end 0)) | |
3194 "/") | |
3195 "\\!" | |
3196 "\\\\") | |
3197 (substring s (match-end 0)))) | |
3198 (setq limit (1+ (match-end 0))))) | |
3199 s) | |
3200 | |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
3201 ;; Metacharacters that have to be protected from the shell when executing |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
3202 ;; a diff/diff3 command. |
20597 | 3203 (defcustom emerge-metachars "[ \t\n!\"#$&'()*;<=>?[\\^`{|~]" |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3204 "Characters that must be quoted with \\ when used in a shell command line. |
20597 | 3205 More precisely, a [...] regexp to match any one such character." |
3206 :type 'regexp | |
3207 :group 'emerge) | |
583 | 3208 |
2770
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
3209 ;; Quote metacharacters (using \) when executing a diff/diff3 command. |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
3210 (defun emerge-protect-metachars (s) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
3211 (let ((limit 0)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
3212 (while (string-match emerge-metachars s limit) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
3213 (setq s (concat (substring s 0 (match-beginning 0)) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
3214 "\\" |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
3215 (substring s (match-beginning 0)))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
3216 (setq limit (1+ (match-end 0))))) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
3217 s) |
6574a888b539
Install DRW's version 5.
Richard M. Stallman <rms@gnu.org>
parents:
2496
diff
changeset
|
3218 |
2771
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3219 (provide 'emerge) |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3220 |
2d2b77186415
(emerge-count-matches-string): Renamed from count-matches-string.
Richard M. Stallman <rms@gnu.org>
parents:
2770
diff
changeset
|
3221 ;;; emerge.el ends here |