aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/ChangeLog10
-rw-r--r--lisp/ediff-init.el3
-rw-r--r--lisp/ediff-mult.el86
-rw-r--r--lisp/ediff.el149
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 @@
12009-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
12009-12-07 Michael Albinus <michael.albinus@gmx.de> 112009-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