aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/emerge.el168
1 files changed, 146 insertions, 22 deletions
diff --git a/lisp/emerge.el b/lisp/emerge.el
index 40ecbbe3187..d5b01741b88 100644
--- a/lisp/emerge.el
+++ b/lisp/emerge.el
@@ -45,11 +45,12 @@ won't destroy Emerge control variables."
45 (put '(, var) 'preserved t)))) 45 (put '(, var) 'preserved t))))
46 46
47;; Add entries to minor-mode-alist so that emerge modes show correctly 47;; Add entries to minor-mode-alist so that emerge modes show correctly
48(setq emerge-minor-modes-list '((emerge-mode " Emerge") 48(defvar emerge-minor-modes-list
49 (emerge-fast-mode " F") 49 '((emerge-mode " Emerge")
50 (emerge-edit-mode " E") 50 (emerge-fast-mode " F")
51 (emerge-auto-advance " A") 51 (emerge-edit-mode " E")
52 (emerge-skip-prefers " S"))) 52 (emerge-auto-advance " A")
53 (emerge-skip-prefers " S")))
53(if (not (assq 'emerge-mode minor-mode-alist)) 54(if (not (assq 'emerge-mode minor-mode-alist))
54 (setq minor-mode-alist (append emerge-minor-modes-list 55 (setq minor-mode-alist (append emerge-minor-modes-list
55 minor-mode-alist))) 56 minor-mode-alist)))
@@ -132,6 +133,15 @@ is present, only one A or B entry is present, and an output entry is present.
132If nil: In such circumstances, the A or B file that is present will be 133If nil: In such circumstances, the A or B file that is present will be
133copied to the designated output file.") 134copied to the designated output file.")
134 135
136(defvar emerge-before-flag "vvvvvvvvvvvvvvvvvvvv\n"
137 "*Flag placed above the highlighted block of code. Must end with newline.
138Must be set before Emerge is loaded, or emerge-new-flags must be run
139after setting.")
140(defvar emerge-after-flag "^^^^^^^^^^^^^^^^^^^^\n"
141 "*Flag placed below the highlighted block of code. Must end with newline.
142Must be set before Emerge is loaded, or emerge-new-flags must be run
143after setting.")
144
135;; Hook variables 145;; Hook variables
136 146
137(defvar emerge-startup-hook nil 147(defvar emerge-startup-hook nil
@@ -166,6 +176,20 @@ same type to an `emerge-files...' command.")
166(defvar emerge-last-revision-ancestor nil 176(defvar emerge-last-revision-ancestor nil
167 "Last RCS revision used for ancestor file of an `emerge-revisions...' command.") 177 "Last RCS revision used for ancestor file of an `emerge-revisions...' command.")
168 178
179(defvar emerge-before-flag-length)
180(defvar emerge-before-flag-lines)
181(defvar emerge-before-flag-match)
182(defvar emerge-after-flag-length)
183(defvar emerge-after-flag-lines)
184(defvar emerge-after-flag-match)
185(defvar emerge-diff-buffer)
186(defvar emerge-diff-error-buffer)
187(defvar emerge-prefix-argument)
188(defvar emerge-file-out)
189(defvar emerge-exit-func)
190(defvar emerge-globalized-difference-list)
191(defvar emerge-globalized-number-of-differences)
192
169;; The flags used to mark differences in the buffers. 193;; The flags used to mark differences in the buffers.
170 194
171;; These function definitions need to be up here, because they are used 195;; These function definitions need to be up here, because they are used
@@ -192,15 +216,6 @@ depend on the flags."
192 (setq i (match-end 0))) 216 (setq i (match-end 0)))
193 count)) 217 count))
194 218
195(defvar emerge-before-flag "vvvvvvvvvvvvvvvvvvvv\n"
196 "*Flag placed above the highlighted block of code. Must end with newline.
197Must be set before Emerge is loaded, or emerge-new-flags must be run
198after setting.")
199(defvar emerge-after-flag "^^^^^^^^^^^^^^^^^^^^\n"
200 "*Flag placed below the highlighted block of code. Must end with newline.
201Must be set before Emerge is loaded, or emerge-new-flags must be run
202after setting.")
203
204;; Calculate dependent variables 219;; Calculate dependent variables
205(emerge-new-flags) 220(emerge-new-flags)
206 221
@@ -245,6 +260,15 @@ must be prefixed by \\<emerge-fast-keymap>\\[emerge-basic-keymap] in `edit' mode
245 "Local keymap used in Emerge `fast' mode. 260 "Local keymap used in Emerge `fast' mode.
246Makes Emerge commands directly available.") 261Makes Emerge commands directly available.")
247 262
263(defvar emerge-options-menu
264 (make-sparse-keymap "Options"))
265
266(defvar emerge-merge-menu
267 (make-sparse-keymap "Merge"))
268
269(defvar emerge-move-menu
270 (make-sparse-keymap "Move"))
271
248(defvar emerge-command-prefix "\C-c\C-c" 272(defvar emerge-command-prefix "\C-c\C-c"
249 "*Command prefix for Emerge commands in `edit' mode. 273 "*Command prefix for Emerge commands in `edit' mode.
250Must be set before Emerge is loaded.") 274Must be set before Emerge is loaded.")
@@ -308,7 +332,83 @@ Must be set before Emerge is loaded.")
308 (substitute-key-definition 'write-file 'emerge-query-write-file 332 (substitute-key-definition 'write-file 'emerge-query-write-file
309 emerge-fast-keymap (current-global-map)) 333 emerge-fast-keymap (current-global-map))
310 (substitute-key-definition 'save-buffer 'emerge-query-save-buffer 334 (substitute-key-definition 'save-buffer 'emerge-query-save-buffer
311 emerge-fast-keymap (current-global-map))) 335 emerge-fast-keymap (current-global-map))
336
337 (define-key emerge-basic-keymap [menu-bar] (make-sparse-keymap))
338
339 (define-key emerge-fast-keymap [menu-bar options]
340 (cons "Options" emerge-options-menu))
341 (define-key emerge-fast-keymap [menu-bar merge]
342 (cons "Merge" emerge-merge-menu))
343 (define-key emerge-fast-keymap [menu-bar move]
344 (cons "Move" emerge-move-menu))
345
346 (define-key emerge-move-menu [emerge-scroll-reset]
347 '("Scroll Reset" . emerge-scroll-reset))
348 (define-key emerge-move-menu [emerge-scroll-right]
349 '("Scroll Right" . emerge-scroll-right))
350 (define-key emerge-move-menu [emerge-scroll-left]
351 '("Scroll Left" . emerge-scroll-left))
352 (define-key emerge-move-menu [emerge-scroll-down]
353 '("Scroll Down" . emerge-scroll-down))
354 (define-key emerge-move-menu [emerge-scroll-up]
355 '("Scroll Up" . emerge-scroll-up))
356 (define-key emerge-move-menu [emerge-recenter]
357 '("Recenter" . emerge-recenter))
358 (define-key emerge-move-menu [emerge-mark-difference]
359 '("Mark Difference" . emerge-mark-difference))
360 (define-key emerge-move-menu [emerge-jump-to-difference]
361 '("Jump To Difference" . emerge-jump-to-difference))
362 (define-key emerge-move-menu [emerge-find-difference]
363 '("Find Difference" . emerge-find-difference))
364 (define-key emerge-move-menu [emerge-previous-difference]
365 '("Previous Difference" . emerge-previous-difference))
366 (define-key emerge-move-menu [emerge-next-difference]
367 '("Next Difference" . emerge-next-difference))
368
369
370 (define-key emerge-options-menu [emerge-one-line-window]
371 '("One Line Window" . emerge-one-line-window))
372 (define-key emerge-options-menu [emerge-set-merge-mode]
373 '("Set Merge Mode" . emerge-set-merge-mode))
374 (define-key emerge-options-menu [emerge-set-combine-template]
375 '("Set Combine Template..." . emerge-set-combine-template))
376 (define-key emerge-options-menu [emerge-default-B]
377 '("Default B" . emerge-default-B))
378 (define-key emerge-options-menu [emerge-default-A]
379 '("Default A" . emerge-default-A))
380 (define-key emerge-options-menu [emerge-skip-prefers]
381 '("Skip Prefers" . emerge-skip-prefers))
382 (define-key emerge-options-menu [emerge-auto-advance]
383 '("Auto Advance" . emerge-auto-advance))
384 (define-key emerge-options-menu [emerge-edit-mode]
385 '("Edit Mode" . emerge-edit-mode))
386 (define-key emerge-options-menu [emerge-fast-mode]
387 '("Fast Mode" . emerge-fast-mode))
388
389 (define-key emerge-merge-menu [emerge-abort] '("Abort" . emerge-abort))
390 (define-key emerge-merge-menu [emerge-quit] '("Quit" . emerge-quit))
391 (define-key emerge-merge-menu [emerge-split-difference]
392 '("Split Difference" . emerge-split-difference))
393 (define-key emerge-merge-menu [emerge-join-differences]
394 '("Join Differences" . emerge-join-differences))
395 (define-key emerge-merge-menu [emerge-trim-difference]
396 '("Trim Difference" . emerge-trim-difference))
397 (define-key emerge-merge-menu [emerge-combine-versions]
398 '("Combine Versions" . emerge-combine-versions))
399 (define-key emerge-merge-menu [emerge-copy-as-kill-B]
400 '("Copy B as Kill" . emerge-copy-as-kill-B))
401 (define-key emerge-merge-menu [emerge-copy-as-kill-A]
402 '("Copy A as Kill" . emerge-copy-as-kill-A))
403 (define-key emerge-merge-menu [emerge-insert-B]
404 '("Insert B" . emerge-insert-B))
405 (define-key emerge-merge-menu [emerge-insert-A]
406 '("Insert A" . emerge-insert-A))
407 (define-key emerge-merge-menu [emerge-select-B]
408 '("Select B" . emerge-select-B))
409 (define-key emerge-merge-menu [emerge-select-A]
410 '("Select A" . emerge-select-A)))
411
312 412
313;; Variables which control each merge. They are local to the merge buffer. 413;; Variables which control each merge. They are local to the merge buffer.
314 414
@@ -867,7 +967,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
867 (setq emerge-file-out file-out) 967 (setq emerge-file-out file-out)
868 (emerge-files-internal 968 (emerge-files-internal
869 file-a file-b nil 969 file-a file-b nil
870 (list (` (lambda () (emerge-remote-exit (, file-out) '(, exit-func))))) 970 (list (` (lambda () (emerge-remote-exit (, file-out) '(, emerge-exit-func)))))
871 file-out) 971 file-out)
872 (throw 'client-wait nil)) 972 (throw 'client-wait nil))
873 973
@@ -876,14 +976,14 @@ This is *not* a user option, since Emerge uses it for its own processing.")
876 (setq emerge-file-out file-out) 976 (setq emerge-file-out file-out)
877 (emerge-files-with-ancestor-internal 977 (emerge-files-with-ancestor-internal
878 file-a file-b file-anc nil 978 file-a file-b file-anc nil
879 (list (` (lambda () (emerge-remote-exit (, file-out) '(, exit-func))))) 979 (list (` (lambda () (emerge-remote-exit (, file-out) '(, emerge-exit-func)))))
880 file-out) 980 file-out)
881 (throw 'client-wait nil)) 981 (throw 'client-wait nil))
882 982
883(defun emerge-remote-exit (file-out exit-func) 983(defun emerge-remote-exit (file-out emerge-exit-func)
884 (emerge-write-and-delete file-out) 984 (emerge-write-and-delete file-out)
885 (kill-buffer emerge-merge-buffer) 985 (kill-buffer emerge-merge-buffer)
886 (funcall exit-func (if emerge-prefix-argument 1 0))) 986 (funcall emerge-exit-func (if emerge-prefix-argument 1 0)))
887 987
888;;; Functions to start Emerge on RCS versions 988;;; Functions to start Emerge on RCS versions
889 989
@@ -1241,6 +1341,16 @@ Otherwise, the A or B file present is copied to the output file."
1241 ;; Install the Emerge commands 1341 ;; Install the Emerge commands
1242 (emerge-force-define-key emerge-edit-keymap emerge-command-prefix 1342 (emerge-force-define-key emerge-edit-keymap emerge-command-prefix
1243 'emerge-basic-keymap) 1343 'emerge-basic-keymap)
1344 (define-key emerge-edit-keymap [menu-bar] (make-sparse-keymap))
1345
1346 ;; Create the additional menu bar items.
1347 (define-key emerge-edit-keymap [menu-bar options]
1348 (cons "Options" emerge-options-menu))
1349 (define-key emerge-edit-keymap [menu-bar merge]
1350 (cons "Merge" emerge-merge-menu))
1351 (define-key emerge-edit-keymap [menu-bar move]
1352 (cons "Move" emerge-move-menu))
1353
1244 ;; Suppress write-file and save-buffer 1354 ;; Suppress write-file and save-buffer
1245 (substitute-key-definition 'write-file 1355 (substitute-key-definition 'write-file
1246 'emerge-query-write-file 1356 'emerge-query-write-file
@@ -1801,7 +1911,7 @@ which there is no preference."
1801 (if (zerop (% n 10)) 1911 (if (zerop (% n 10))
1802 (message "Setting default to A...%d" n))) 1912 (message "Setting default to A...%d" n)))
1803 (emerge-unselect-and-select-difference selected-difference))) 1913 (emerge-unselect-and-select-difference selected-difference)))
1804 (message "Default A set")) 1914 (message "Default choice is now A"))
1805 1915
1806(defun emerge-default-B () 1916(defun emerge-default-B ()
1807 "Make the B variant the default from here down. 1917 "Make the B variant the default from here down.
@@ -1823,7 +1933,7 @@ which there is no preference."
1823 (if (zerop (% n 10)) 1933 (if (zerop (% n 10))
1824 (message "Setting default to B...%d" n))) 1934 (message "Setting default to B...%d" n)))
1825 (emerge-unselect-and-select-difference selected-difference))) 1935 (emerge-unselect-and-select-difference selected-difference)))
1826 (message "Default B set")) 1936 (message "Default choice is now B"))
1827 1937
1828(defun emerge-fast-mode () 1938(defun emerge-fast-mode ()
1829 "Set fast mode, for Emerge. 1939 "Set fast mode, for Emerge.
@@ -2326,10 +2436,24 @@ merge buffers."
2326 (setq temp (- temp emerge-after-flag-lines))))) 2436 (setq temp (- temp emerge-after-flag-lines)))))
2327 temp)) 2437 temp))
2328 2438
2439(defun emerge-set-combine-template (string &optional localize)
2440 "Set `emerge-combine-versions-template' to STRING.
2441This value controls how `emerge-combine-versions' combines the two versions.
2442With prefix argument, `emerge-combine-versions-template' is made local to this
2443merge buffer. Localization is permanent for any particular merge buffer."
2444 (interactive "s\nP")
2445 (if localize
2446 (make-local-variable 'emerge-combine-versions-template))
2447 (setq emerge-combine-versions-template string)
2448 (message
2449 (if (assq 'emerge-combine-versions-template (buffer-local-variables))
2450 "emerge-set-combine-versions-template set locally"
2451 "emerge-set-combine-versions-template set")))
2452
2329(defun emerge-set-combine-versions-template (start end &optional localize) 2453(defun emerge-set-combine-versions-template (start end &optional localize)
2330 "Copy region into `emerge-combine-versions-template'. 2454 "Copy region into `emerge-combine-versions-template'.
2331This controls how `emerge-combine-versions' will combine the two versions. 2455This controls how `emerge-combine-versions' will combine the two versions.
2332With prefix argument, `emerge-combine-versions' is made local to this 2456With prefix argument, `emerge-combine-versions-template' is made local to this
2333merge buffer. Localization is permanent for any particular merge buffer." 2457merge buffer. Localization is permanent for any particular merge buffer."
2334 (interactive "r\nP") 2458 (interactive "r\nP")
2335 (if localize 2459 (if localize