diff options
| -rw-r--r-- | lisp/emerge.el | 168 |
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. | |||
| 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 |
| @@ -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. | ||
| 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 | ||
| @@ -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. |
| 246 | Makes Emerge commands directly available.") | 261 | Makes 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. |
| 250 | Must be set before Emerge is loaded.") | 274 | Must 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. | ||
| 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 |