diff options
| -rw-r--r-- | lisp/ChangeLog | 10 | ||||
| -rw-r--r-- | lisp/ediff-init.el | 3 | ||||
| -rw-r--r-- | lisp/ediff-mult.el | 86 | ||||
| -rw-r--r-- | lisp/ediff.el | 149 |
4 files changed, 172 insertions, 76 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b1472f76bfb..be160bf9abe 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,13 @@ | |||
| 1 | 2009-12-07 Michael Kifer <kifer@cs.stonybrook.edu> | ||
| 2 | |||
| 3 | * ediff-init.el (ediff-event-key): use event-to-character instead of | ||
| 4 | event-key. | ||
| 5 | |||
| 6 | * ediff-mult.el (ediff-setup-meta-map, ediff-prepare-meta-buffer): add | ||
| 7 | menus to the meta mode. (Dan Nicolaescu's <dann@ics.uci.edu> patch.) | ||
| 8 | |||
| 9 | * ediff.el (ediff-buffers-internal): add unwind-protect. | ||
| 10 | |||
| 1 | 2009-12-07 Michael Albinus <michael.albinus@gmx.de> | 11 | 2009-12-07 Michael Albinus <michael.albinus@gmx.de> |
| 2 | 12 | ||
| 3 | Handle prompt rules of ksh in OpenBSD 4.5. Reported by Raphaël | 13 | Handle prompt rules of ksh in OpenBSD 4.5. Reported by Raphaël |
diff --git a/lisp/ediff-init.el b/lisp/ediff-init.el index 09c62df631d..843fbf2979d 100644 --- a/lisp/ediff-init.el +++ b/lisp/ediff-init.el | |||
| @@ -1548,7 +1548,8 @@ This default should work without changes." | |||
| 1548 | 1548 | ||
| 1549 | (defun ediff-event-key (event-or-key) | 1549 | (defun ediff-event-key (event-or-key) |
| 1550 | (if (featurep 'xemacs) | 1550 | (if (featurep 'xemacs) |
| 1551 | (if (eventp event-or-key) (event-key event-or-key) event-or-key) | 1551 | ;;(if (eventp event-or-key) (event-key event-or-key) event-or-key) |
| 1552 | (if (eventp event-or-key) (event-to-character event-or-key t t) event-or-key) | ||
| 1552 | event-or-key)) | 1553 | event-or-key)) |
| 1553 | 1554 | ||
| 1554 | (defun ediff-last-command-char () | 1555 | (defun ediff-last-command-char () |
diff --git a/lisp/ediff-mult.el b/lisp/ediff-mult.el index f2365f53060..a00ff7e9740 100644 --- a/lisp/ediff-mult.el +++ b/lisp/ediff-mult.el | |||
| @@ -392,12 +392,40 @@ Toggled by ediff-toggle-verbose-help-meta-buffer" ) | |||
| 392 | (define-key ediff-meta-buffer-map "p" 'ediff-previous-meta-item) | 392 | (define-key ediff-meta-buffer-map "p" 'ediff-previous-meta-item) |
| 393 | (define-key ediff-meta-buffer-map [delete] 'ediff-previous-meta-item) | 393 | (define-key ediff-meta-buffer-map [delete] 'ediff-previous-meta-item) |
| 394 | (define-key ediff-meta-buffer-map [backspace] 'ediff-previous-meta-item) | 394 | (define-key ediff-meta-buffer-map [backspace] 'ediff-previous-meta-item) |
| 395 | (or (ediff-one-filegroup-metajob) | 395 | |
| 396 | (progn | 396 | (let ((menu-map (make-sparse-keymap "Ediff-Meta"))) |
| 397 | (define-key ediff-meta-buffer-map "=" nil) | 397 | (define-key ediff-meta-buffer-map [menu-bar ediff-meta-mode] |
| 398 | (define-key ediff-meta-buffer-map "==" 'ediff-meta-mark-equal-files) | 398 | (cons "Ediff-Meta" menu-map)) |
| 399 | (define-key ediff-meta-buffer-map "=m" 'ediff-meta-mark-equal-files) | 399 | (define-key menu-map [ediff-quit-meta-buffer] |
| 400 | (define-key ediff-meta-buffer-map "=h" 'ediff-meta-mark-equal-files))) | 400 | '(menu-item "Quit" ediff-quit-meta-buffer |
| 401 | :help "Quit the meta buffer")) | ||
| 402 | (define-key menu-map [ediff-toggle-filename-truncation] | ||
| 403 | '(menu-item "Truncate filenames" ediff-toggle-filename-truncation | ||
| 404 | :help "Toggle truncation of long file names in session group buffers" | ||
| 405 | :button (:toggle . ediff-meta-truncate-filenames))) | ||
| 406 | (define-key menu-map [ediff-show-registry] | ||
| 407 | '(menu-item "Display Ediff Registry" ediff-show-registry | ||
| 408 | :help "Display Ediff's registry")) | ||
| 409 | (define-key menu-map [ediff-documentation] | ||
| 410 | '(menu-item "Show Manual" ediff-documentation | ||
| 411 | :help "Display Ediff's manual")) | ||
| 412 | |||
| 413 | (or (ediff-one-filegroup-metajob) | ||
| 414 | (progn | ||
| 415 | (define-key ediff-meta-buffer-map "=" nil) | ||
| 416 | (define-key ediff-meta-buffer-map "==" 'ediff-meta-mark-equal-files) | ||
| 417 | (define-key ediff-meta-buffer-map "=m" 'ediff-meta-mark-equal-files) | ||
| 418 | (define-key ediff-meta-buffer-map "=h" 'ediff-meta-mark-equal-files))) | ||
| 419 | |||
| 420 | |||
| 421 | (define-key menu-map [ediff-next-meta-item] | ||
| 422 | '(menu-item "Next" ediff-next-meta-item | ||
| 423 | :help "Move to the next item in Ediff registry or session group buffer")) | ||
| 424 | (define-key menu-map [ediff-previous-meta-item] | ||
| 425 | '(menu-item "Previous" ediff-previous-meta-item | ||
| 426 | :help "Move to the previous item in Ediff registry or session group buffer"))) | ||
| 427 | |||
| 428 | |||
| 401 | (if ediff-no-emacs-help-in-control-buffer | 429 | (if ediff-no-emacs-help-in-control-buffer |
| 402 | (define-key ediff-meta-buffer-map "\C-h" 'ediff-previous-meta-item)) | 430 | (define-key ediff-meta-buffer-map "\C-h" 'ediff-previous-meta-item)) |
| 403 | (if (featurep 'emacs) | 431 | (if (featurep 'emacs) |
| @@ -837,14 +865,58 @@ behavior." | |||
| 837 | ediff-meta-buffer-map "um" 'ediff-unmark-all-for-operation) | 865 | ediff-meta-buffer-map "um" 'ediff-unmark-all-for-operation) |
| 838 | (define-key | 866 | (define-key |
| 839 | ediff-meta-buffer-map "uh" 'ediff-unmark-all-for-hiding) | 867 | ediff-meta-buffer-map "uh" 'ediff-unmark-all-for-hiding) |
| 868 | |||
| 869 | (define-key ediff-meta-buffer-map | ||
| 870 | [menu-bar ediff-meta-mode ediff-hide-marked-sessions] | ||
| 871 | '(menu-item "Hide marked" ediff-hide-marked-sessions | ||
| 872 | :help "Hide marked sessions. With prefix arg, unhide")) | ||
| 873 | |||
| 874 | (define-key ediff-meta-buffer-map | ||
| 875 | [menu-bar ediff-meta-mode ediff-mark-for-hiding-at-pos] | ||
| 876 | '(menu-item "Mark for hiding" ediff-mark-for-hiding-at-pos | ||
| 877 | :help "Mark session for hiding. With prefix arg, unmark")) | ||
| 878 | |||
| 879 | (define-key ediff-meta-buffer-map | ||
| 880 | [menu-bar ediff-meta-mode ediff-mark-for-operation-at-pos] | ||
| 881 | '(menu-item "Mark for group operation" ediff-mark-for-operation-at-pos | ||
| 882 | :help "Mark session for a group operation. With prefix arg, unmark.")) | ||
| 883 | |||
| 884 | (define-key ediff-meta-buffer-map | ||
| 885 | [menu-bar ediff-meta-mode ediff-unmark-all-for-hiding] | ||
| 886 | '(menu-item "Unmark all for hiding" ediff-unmark-all-for-hiding | ||
| 887 | :help "Unmark all sessions marked for hiding")) | ||
| 888 | |||
| 889 | (define-key ediff-meta-buffer-map | ||
| 890 | [menu-bar ediff-meta-mode ediff-unmark-all-for-operation] | ||
| 891 | '(menu-item "Unmark all for group operation" ediff-unmark-all-for-operation | ||
| 892 | :help "Unmark all sessions marked for operation")) | ||
| 893 | |||
| 840 | (cond ((ediff-collect-diffs-metajob jobname) | 894 | (cond ((ediff-collect-diffs-metajob jobname) |
| 895 | (define-key ediff-meta-buffer-map | ||
| 896 | [menu-bar ediff-meta-mode ediff-collect-custom-diffs] | ||
| 897 | '(menu-item "Collect diffs" ediff-collect-custom-diffs | ||
| 898 | :help "Collect custom diffs of marked sessions in buffer `*Ediff Multifile Diffs*'")) | ||
| 841 | (define-key | 899 | (define-key |
| 842 | ediff-meta-buffer-map "P" 'ediff-collect-custom-diffs)) | 900 | ediff-meta-buffer-map "P" 'ediff-collect-custom-diffs)) |
| 843 | ((ediff-patch-metajob jobname) | 901 | ((ediff-patch-metajob jobname) |
| 902 | (define-key ediff-meta-buffer-map | ||
| 903 | [menu-bar ediff-meta-mode ediff-meta-show-patch] | ||
| 904 | '(menu-item "Show multi-file patch" ediff-meta-show-patch | ||
| 905 | :help "Show the multi-file patch associated with this group session")) | ||
| 844 | (define-key | 906 | (define-key |
| 845 | ediff-meta-buffer-map "P" 'ediff-meta-show-patch))) | 907 | ediff-meta-buffer-map "P" 'ediff-meta-show-patch))) |
| 846 | (define-key ediff-meta-buffer-map "^" 'ediff-up-meta-hierarchy) | 908 | (define-key ediff-meta-buffer-map "^" 'ediff-up-meta-hierarchy) |
| 847 | (define-key ediff-meta-buffer-map "D" 'ediff-show-dir-diffs))) | 909 | (define-key ediff-meta-buffer-map "D" 'ediff-show-dir-diffs) |
| 910 | |||
| 911 | (define-key ediff-meta-buffer-map | ||
| 912 | [menu-bar ediff-meta-mode ediff-up-meta-hierarchy] | ||
| 913 | '(menu-item "Go to parent session" ediff-up-meta-hierarchy | ||
| 914 | :help "Go to the parent session group buffer")) | ||
| 915 | |||
| 916 | (define-key ediff-meta-buffer-map | ||
| 917 | [menu-bar ediff-meta-mode ediff-show-dir-diffs] | ||
| 918 | '(menu-item "Diff directories" ediff-show-dir-diffs | ||
| 919 | :help "Display differences among the directories involved in session group")))) | ||
| 848 | 920 | ||
| 849 | (if (eq ediff-metajob-name 'ediff-registry) | 921 | (if (eq ediff-metajob-name 'ediff-registry) |
| 850 | (run-hooks 'ediff-registry-setup-hook) | 922 | (run-hooks 'ediff-registry-setup-hook) |
diff --git a/lisp/ediff.el b/lisp/ediff.el index ad2f3c0de2e..f2bf51d3994 100644 --- a/lisp/ediff.el +++ b/lisp/ediff.el | |||
| @@ -12,8 +12,8 @@ | |||
| 12 | ;; filed in the Emacs bug reporting system against this file, a copy | 12 | ;; filed in the Emacs bug reporting system against this file, a copy |
| 13 | ;; of the bug report be sent to the maintainer's email address. | 13 | ;; of the bug report be sent to the maintainer's email address. |
| 14 | 14 | ||
| 15 | (defconst ediff-version "2.81.3" "The current version of Ediff") | 15 | (defconst ediff-version "2.81.4" "The current version of Ediff") |
| 16 | (defconst ediff-date "August 15, 2009" "Date of last update") | 16 | (defconst ediff-date "December 7, 2009" "Date of last update") |
| 17 | 17 | ||
| 18 | 18 | ||
| 19 | ;; This file is part of GNU Emacs. | 19 | ;; This file is part of GNU Emacs. |
| @@ -475,37 +475,45 @@ If this file is a backup, `ediff' it with its original." | |||
| 475 | (buf-C-file-name (if buf-C-is-alive | 475 | (buf-C-file-name (if buf-C-is-alive |
| 476 | (buffer-file-name (get-buffer buf-B)))) | 476 | (buffer-file-name (get-buffer buf-B)))) |
| 477 | file-A file-B file-C) | 477 | file-A file-B file-C) |
| 478 | (if (not (ediff-buffer-live-p buf-A)) | 478 | (unwind-protect |
| 479 | (error "Buffer %S doesn't exist" buf-A)) | 479 | (progn |
| 480 | (if (not (ediff-buffer-live-p buf-B)) | 480 | (if (not (ediff-buffer-live-p buf-A)) |
| 481 | (error "Buffer %S doesn't exist" buf-B)) | 481 | (error "Buffer %S doesn't exist" buf-A)) |
| 482 | (let ((ediff-job-name job-name)) | 482 | (if (not (ediff-buffer-live-p buf-B)) |
| 483 | (if (and ediff-3way-comparison-job | 483 | (error "Buffer %S doesn't exist" buf-B)) |
| 484 | (not buf-C-is-alive)) | 484 | (let ((ediff-job-name job-name)) |
| 485 | (error "Buffer %S doesn't exist" buf-C))) | 485 | (if (and ediff-3way-comparison-job |
| 486 | (if (stringp buf-A-file-name) | 486 | (not buf-C-is-alive)) |
| 487 | (setq buf-A-file-name (file-name-nondirectory buf-A-file-name))) | 487 | (error "Buffer %S doesn't exist" buf-C))) |
| 488 | (if (stringp buf-B-file-name) | 488 | (if (stringp buf-A-file-name) |
| 489 | (setq buf-B-file-name (file-name-nondirectory buf-B-file-name))) | 489 | (setq buf-A-file-name (file-name-nondirectory buf-A-file-name))) |
| 490 | (if (stringp buf-C-file-name) | 490 | (if (stringp buf-B-file-name) |
| 491 | (setq buf-C-file-name (file-name-nondirectory buf-C-file-name))) | 491 | (setq buf-B-file-name (file-name-nondirectory buf-B-file-name))) |
| 492 | 492 | (if (stringp buf-C-file-name) | |
| 493 | (setq file-A (ediff-make-temp-file buf-A buf-A-file-name) | 493 | (setq buf-C-file-name (file-name-nondirectory buf-C-file-name))) |
| 494 | file-B (ediff-make-temp-file buf-B buf-B-file-name)) | 494 | |
| 495 | (if buf-C-is-alive | 495 | (setq file-A (ediff-make-temp-file buf-A buf-A-file-name) |
| 496 | (setq file-C (ediff-make-temp-file buf-C buf-C-file-name))) | 496 | file-B (ediff-make-temp-file buf-B buf-B-file-name)) |
| 497 | 497 | (if buf-C-is-alive | |
| 498 | (ediff-setup (get-buffer buf-A) file-A | 498 | (setq file-C (ediff-make-temp-file buf-C buf-C-file-name))) |
| 499 | (get-buffer buf-B) file-B | 499 | |
| 500 | (if buf-C-is-alive (get-buffer buf-C)) | 500 | (ediff-setup (get-buffer buf-A) file-A |
| 501 | file-C | 501 | (get-buffer buf-B) file-B |
| 502 | (cons `(lambda () | 502 | (if buf-C-is-alive (get-buffer buf-C)) |
| 503 | (delete-file ,file-A) | 503 | file-C |
| 504 | (delete-file ,file-B) | 504 | (cons `(lambda () |
| 505 | (if (stringp ,file-C) (delete-file ,file-C))) | 505 | (delete-file ,file-A) |
| 506 | startup-hooks) | 506 | (delete-file ,file-B) |
| 507 | (list (cons 'ediff-job-name job-name)) | 507 | (if (stringp ,file-C) (delete-file ,file-C))) |
| 508 | merge-buffer-file))) | 508 | startup-hooks) |
| 509 | (list (cons 'ediff-job-name job-name)) | ||
| 510 | merge-buffer-file)) | ||
| 511 | (if (and (stringp file-A) (file-exists-p file-A)) | ||
| 512 | (delete-file file-A)) | ||
| 513 | (if (and (stringp file-B) (file-exists-p file-B)) | ||
| 514 | (delete-file file-B)) | ||
| 515 | (if (and (stringp file-C) (file-exists-p file-C)) | ||
| 516 | (delete-file file-C))))) | ||
| 509 | 517 | ||
| 510 | 518 | ||
| 511 | ;;; Directory and file group operations | 519 | ;;; Directory and file group operations |
| @@ -1055,41 +1063,46 @@ lines. For small regions, use `ediff-regions-wordwise'." | |||
| 1055 | (let ((tmp-buffer (get-buffer-create ediff-tmp-buffer)) | 1063 | (let ((tmp-buffer (get-buffer-create ediff-tmp-buffer)) |
| 1056 | overl-A overl-B | 1064 | overl-A overl-B |
| 1057 | file-A file-B) | 1065 | file-A file-B) |
| 1058 | 1066 | (unwind-protect | |
| 1059 | ;; in case beg/end-A/B aren't markers--make them into markers | 1067 | (progn |
| 1060 | (ediff-with-current-buffer buffer-A | 1068 | ;; in case beg/end-A/B aren't markers--make them into markers |
| 1061 | (setq beg-A (move-marker (make-marker) beg-A) | 1069 | (ediff-with-current-buffer buffer-A |
| 1062 | end-A (move-marker (make-marker) end-A))) | 1070 | (setq beg-A (move-marker (make-marker) beg-A) |
| 1063 | (ediff-with-current-buffer buffer-B | 1071 | end-A (move-marker (make-marker) end-A))) |
| 1064 | (setq beg-B (move-marker (make-marker) beg-B) | 1072 | (ediff-with-current-buffer buffer-B |
| 1065 | end-B (move-marker (make-marker) end-B))) | 1073 | (setq beg-B (move-marker (make-marker) beg-B) |
| 1066 | 1074 | end-B (move-marker (make-marker) end-B))) | |
| 1067 | ;; make file-A | 1075 | |
| 1068 | (if word-mode | 1076 | ;; make file-A |
| 1069 | (ediff-wordify beg-A end-A buffer-A tmp-buffer) | 1077 | (if word-mode |
| 1070 | (ediff-copy-to-buffer beg-A end-A buffer-A tmp-buffer)) | 1078 | (ediff-wordify beg-A end-A buffer-A tmp-buffer) |
| 1071 | (setq file-A (ediff-make-temp-file tmp-buffer "regA")) | 1079 | (ediff-copy-to-buffer beg-A end-A buffer-A tmp-buffer)) |
| 1072 | 1080 | (setq file-A (ediff-make-temp-file tmp-buffer "regA")) | |
| 1073 | ;; make file-B | 1081 | |
| 1074 | (if word-mode | 1082 | ;; make file-B |
| 1075 | (ediff-wordify beg-B end-B buffer-B tmp-buffer) | 1083 | (if word-mode |
| 1076 | (ediff-copy-to-buffer beg-B end-B buffer-B tmp-buffer)) | 1084 | (ediff-wordify beg-B end-B buffer-B tmp-buffer) |
| 1077 | (setq file-B (ediff-make-temp-file tmp-buffer "regB")) | 1085 | (ediff-copy-to-buffer beg-B end-B buffer-B tmp-buffer)) |
| 1078 | 1086 | (setq file-B (ediff-make-temp-file tmp-buffer "regB")) | |
| 1079 | (setq overl-A (ediff-make-bullet-proof-overlay beg-A end-A buffer-A)) | 1087 | |
| 1080 | (setq overl-B (ediff-make-bullet-proof-overlay beg-B end-B buffer-B)) | 1088 | (setq overl-A (ediff-make-bullet-proof-overlay beg-A end-A buffer-A)) |
| 1081 | (ediff-setup buffer-A file-A | 1089 | (setq overl-B (ediff-make-bullet-proof-overlay beg-B end-B buffer-B)) |
| 1082 | buffer-B file-B | 1090 | (ediff-setup buffer-A file-A |
| 1083 | nil nil ; buffer & file C | 1091 | buffer-B file-B |
| 1084 | (cons `(lambda () | 1092 | nil nil ; buffer & file C |
| 1085 | (delete-file ,file-A) | 1093 | (cons `(lambda () |
| 1086 | (delete-file ,file-B)) | 1094 | (delete-file ,file-A) |
| 1087 | startup-hooks) | 1095 | (delete-file ,file-B)) |
| 1088 | (append | 1096 | startup-hooks) |
| 1089 | (list (cons 'ediff-word-mode word-mode) | 1097 | (append |
| 1090 | (cons 'ediff-narrow-bounds (list overl-A overl-B)) | 1098 | (list (cons 'ediff-word-mode word-mode) |
| 1091 | (cons 'ediff-job-name job-name)) | 1099 | (cons 'ediff-narrow-bounds (list overl-A overl-B)) |
| 1092 | setup-parameters)) | 1100 | (cons 'ediff-job-name job-name)) |
| 1101 | setup-parameters))) | ||
| 1102 | (if (and (stringp file-A) (file-exists-p file-A)) | ||
| 1103 | (delete-file file-A)) | ||
| 1104 | (if (and (stringp file-B) (file-exists-p file-B)) | ||
| 1105 | (delete-file file-B))) | ||
| 1093 | )) | 1106 | )) |
| 1094 | 1107 | ||
| 1095 | 1108 | ||