comparison lisp/emerge.el @ 5796:b53b2df1351d

Add defvars for many vars already being used. (emerge-options-menu, emerge-merge-menu, emerge-move-menu): New vars. (emerge-setup-fixed-keymaps): Set up emerge-move-menu, emerge-merge-menu and emerge-options-menu. Put them into emerge-fast-keymap. (emerge-set-keys): Put them into the emerge-edit-keymap. (emerge-minor-modes-list): Add defvar. (emerge-before-flag, emerge-after-flag): Move defvars up. (emerge-files-remote, emerge-files-with-ancestor-remote): (emerge-remote-exit): Var exit-func renamed to emerge-exit-func.
author Richard M. Stallman <rms@gnu.org>
date Sun, 06 Feb 1994 02:07:44 +0000
parents 106e0040381f
children c75960d5f2ca
comparison
equal deleted inserted replaced
5795:fc0dab7df72e 5796:b53b2df1351d
43 (defvar (, var) (, value) (, doc)) 43 (defvar (, var) (, value) (, doc))
44 (make-variable-buffer-local '(, var)) 44 (make-variable-buffer-local '(, var))
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)))
56 57
57 ;; We need to define this function so describe-mode can describe Emerge mode. 58 ;; We need to define this function so describe-mode can describe Emerge mode.
130 It concludes that an input version has been deleted when an ancestor entry 131 It concludes that an input version has been deleted when an ancestor entry
131 is present, only one A or B entry is present, and an output entry is present. 132 is present, only one A or B entry is present, and an output entry is present.
132 If nil: In such circumstances, the A or B file that is present will be 133 If nil: In such circumstances, the A or B file that is present will be
133 copied to the designated output file.") 134 copied 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.
138 Must be set before Emerge is loaded, or emerge-new-flags must be run
139 after setting.")
140 (defvar emerge-after-flag "^^^^^^^^^^^^^^^^^^^^\n"
141 "*Flag placed below the highlighted block of code. Must end with newline.
142 Must be set before Emerge is loaded, or emerge-new-flags must be run
143 after setting.")
144
135 ;; Hook variables 145 ;; Hook variables
136 146
137 (defvar emerge-startup-hook nil 147 (defvar emerge-startup-hook nil
138 "*Hook to run in the merge buffer after the merge has been set up.") 148 "*Hook to run in the merge buffer after the merge has been set up.")
139 (defvar emerge-select-hook nil 149 (defvar emerge-select-hook nil
164 (defvar emerge-last-revision-B nil 174 (defvar emerge-last-revision-B nil
165 "Last RCS revision used for second file of an `emerge-revisions...' command.") 175 "Last RCS revision used for second file of an `emerge-revisions...' 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
172 ;; during loading. 196 ;; during loading.
173 (defun emerge-new-flags () 197 (defun emerge-new-flags ()
190 (while (string-match regexp string i) 214 (while (string-match regexp string i)
191 (setq count (1+ count)) 215 (setq count (1+ count))
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.
197 Must be set before Emerge is loaded, or emerge-new-flags must be run
198 after setting.")
199 (defvar emerge-after-flag "^^^^^^^^^^^^^^^^^^^^\n"
200 "*Flag placed below the highlighted block of code. Must end with newline.
201 Must be set before Emerge is loaded, or emerge-new-flags must be run
202 after setting.")
203
204 ;; Calculate dependent variables 219 ;; Calculate dependent variables
205 (emerge-new-flags) 220 (emerge-new-flags)
206 221
207 (defvar emerge-min-visible-lines 3 222 (defvar emerge-min-visible-lines 3
208 "*Number of lines that we want to show above and below the flags when we are 223 "*Number of lines that we want to show above and below the flags when we are
242 must be prefixed by \\<emerge-fast-keymap>\\[emerge-basic-keymap] in `edit' mode.") 257 must be prefixed by \\<emerge-fast-keymap>\\[emerge-basic-keymap] in `edit' mode.")
243 258
244 (defvar emerge-fast-keymap nil 259 (defvar emerge-fast-keymap nil
245 "Local keymap used in Emerge `fast' mode. 260 "Local keymap used in Emerge `fast' mode.
246 Makes Emerge commands directly available.") 261 Makes Emerge commands directly available.")
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"))
247 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.
250 Must be set before Emerge is loaded.") 274 Must be set before Emerge is loaded.")
251 275
306 (fset 'emerge-fast-keymap emerge-fast-keymap) 330 (fset 'emerge-fast-keymap emerge-fast-keymap)
307 ;; Suppress write-file and save-buffer 331 ;; Suppress write-file and save-buffer
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
315 ;; Mode variables 415 ;; Mode variables
316 (emerge-defvar-local emerge-mode nil 416 (emerge-defvar-local emerge-mode nil
865 ;;;###autoload 965 ;;;###autoload
866 (defun emerge-files-remote (file-a file-b file-out) 966 (defun emerge-files-remote (file-a file-b file-out)
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
874 ;;;###autoload 974 ;;;###autoload
875 (defun emerge-files-with-ancestor-remote (file-a file-b file-anc file-out) 975 (defun emerge-files-with-ancestor-remote (file-a file-b file-anc file-out)
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
890 (defun emerge-revisions (arg file revision-A revision-B 990 (defun emerge-revisions (arg file revision-A revision-B
891 &optional startup-hooks quit-hooks) 991 &optional startup-hooks quit-hooks)
1239 (copy-keymap emerge-old-keymap) 1339 (copy-keymap emerge-old-keymap)
1240 (make-sparse-keymap))) 1340 (make-sparse-keymap)))
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
1247 emerge-edit-keymap) 1357 emerge-edit-keymap)
1248 (substitute-key-definition 'save-buffer 1358 (substitute-key-definition 'save-buffer
1799 (aset diff-vector 6 'default-A)))) 1909 (aset diff-vector 6 'default-A))))
1800 (setq n (1+ n)) 1910 (setq n (1+ n))
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.
1808 This selects the B variant for all differences from here down in the buffer 1918 This selects the B variant for all differences from here down in the buffer
1809 which are still defaulted, i.e., which the user has not selected and for 1919 which are still defaulted, i.e., which the user has not selected and for
1821 (aset diff-vector 6 'default-B)))) 1931 (aset diff-vector 6 'default-B))))
1822 (setq n (1+ n)) 1932 (setq n (1+ n))
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.
1830 In this mode ordinary Emacs commands are disabled, and Emerge commands 1940 In this mode ordinary Emacs commands are disabled, and Emerge commands
1831 need not be prefixed with \\<emerge-fast-keymap>\\[emerge-basic-keymap]." 1941 need not be prefixed with \\<emerge-fast-keymap>\\[emerge-basic-keymap]."
2324 (setq temp (- temp emerge-before-flag-lines))) 2434 (setq temp (- temp emerge-before-flag-lines)))
2325 (if (> (point) (aref diff end-marker)) 2435 (if (> (point) (aref diff end-marker))
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.
2441 This value controls how `emerge-combine-versions' combines the two versions.
2442 With prefix argument, `emerge-combine-versions-template' is made local to this
2443 merge 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'.
2331 This controls how `emerge-combine-versions' will combine the two versions. 2455 This controls how `emerge-combine-versions' will combine the two versions.
2332 With prefix argument, `emerge-combine-versions' is made local to this 2456 With prefix argument, `emerge-combine-versions-template' is made local to this
2333 merge buffer. Localization is permanent for any particular merge buffer." 2457 merge buffer. Localization is permanent for any particular merge buffer."
2334 (interactive "r\nP") 2458 (interactive "r\nP")
2335 (if localize 2459 (if localize
2336 (make-local-variable 'emerge-combine-versions-template)) 2460 (make-local-variable 'emerge-combine-versions-template))
2337 (setq emerge-combine-versions-template (buffer-substring start end)) 2461 (setq emerge-combine-versions-template (buffer-substring start end))