27 |
;; The present file contains all the infrastructure needed for that. |
;; The present file contains all the infrastructure needed for that. |
28 |
;; |
;; |
29 |
;; Generally, to implement a new multisession capability within Ediff, |
;; Generally, to implement a new multisession capability within Ediff, |
30 |
;; you need to tell it |
;; you need to tell it |
31 |
;; |
;; |
32 |
;; 1. How to display the session group buffer. |
;; 1. How to display the session group buffer. |
33 |
;; This function must indicate which Ediff sessions are active (+) and |
;; This function must indicate which Ediff sessions are active (+) and |
53 |
;; HEADER must be a list of SIX elements (nil or string): |
;; HEADER must be a list of SIX elements (nil or string): |
54 |
;; (regexp metaobj1 metaobj2 metaobj3 merge-save-buffer |
;; (regexp metaobj1 metaobj2 metaobj3 merge-save-buffer |
55 |
;; comparison-function) |
;; comparison-function) |
56 |
;; The function ediff-redraw-registry-buffer displays the |
;; The function ediff-redraw-registry-buffer displays the |
57 |
;; 1st - 4th of these in the registry buffer. |
;; 1st - 4th of these in the registry buffer. |
58 |
;; For some jobs some of the members of the header might be nil. |
;; For some jobs some of the members of the header might be nil. |
59 |
;; The meaning of metaobj1, metaobj2, and metaobj3 depend on the job. |
;; The meaning of metaobj1, metaobj2, and metaobj3 depend on the job. |
60 |
;; Typically these are directories where the files to be compared are |
;; Typically these are directories where the files to be compared are |
80 |
;; (whose name is obj1). |
;; (whose name is obj1). |
81 |
;; The nil's are placeholders, which are used internally by ediff. |
;; The nil's are placeholders, which are used internally by ediff. |
82 |
;; 4. Write a function that makes a call to ediff-prepare-meta-buffer |
;; 4. Write a function that makes a call to ediff-prepare-meta-buffer |
83 |
;; passing all this info. |
;; passing all this info. |
84 |
;; You may be able to use ediff-directories-internal as a template. |
;; You may be able to use ediff-directories-internal as a template. |
85 |
;; 5. If you intend to add several related pieces of functionality, |
;; 5. If you intend to add several related pieces of functionality, |
86 |
;; you may want to keep the function in 4 as an internal version |
;; you may want to keep the function in 4 as an internal version |
88 |
;; with different parameters. |
;; with different parameters. |
89 |
;; See how ediff-directories, ediff-merge-directories, and |
;; See how ediff-directories, ediff-merge-directories, and |
90 |
;; ediff-merge-directories-with-ancestor all use |
;; ediff-merge-directories-with-ancestor all use |
91 |
;; ediff-directories-internal. |
;; ediff-directories-internal. |
92 |
;; |
;; |
93 |
;; A useful addition here could be session groups selected by patterns |
;; A useful addition here could be session groups selected by patterns |
94 |
;; (which are different in each directory). For instance, one may want to |
;; (which are different in each directory). For instance, one may want to |
96 |
;; which may be in the same or different directories. Or, one may want to |
;; which may be in the same or different directories. Or, one may want to |
97 |
;; compare all files of the form {something} to files of the form {something}~. |
;; compare all files of the form {something} to files of the form {something}~. |
98 |
;; |
;; |
99 |
;; Implementing this requires writing an collating function, which should pair |
;; Implementing this requires writing a collating function, which should pair |
100 |
;; up appropriate files. It will also require a generalization of the |
;; up appropriate files. It will also require a generalization of the |
101 |
;; functions that do the layout of the meta- and differences buffers and of |
;; functions that do the layout of the meta- and differences buffers and of |
102 |
;; ediff-filegroup-action. |
;; ediff-filegroup-action. |
207 |
This hook can be used to save the previous window config, which can be restored |
This hook can be used to save the previous window config, which can be restored |
208 |
on ediff-quit, ediff-suspend, or ediff-quit-session-group-hook." |
on ediff-quit, ediff-suspend, or ediff-quit-session-group-hook." |
209 |
:type 'hook |
:type 'hook |
210 |
:group 'ediff-hook) |
:group 'ediff-hook) |
211 |
(defcustom ediff-after-session-group-setup-hook nil |
(defcustom ediff-after-session-group-setup-hook nil |
212 |
"*Hooks run just after a meta-buffer controlling a session group, such as |
"*Hooks run just after a meta-buffer controlling a session group, such as |
213 |
ediff-directories, is run." |
ediff-directories, is run." |
322 |
;; OBJA, OBJB, OBJC are usually directories involved, but can be different for |
;; OBJA, OBJB, OBJC are usually directories involved, but can be different for |
323 |
;; different jobs. For instance, multifile patch has only OBJA, which is the |
;; different jobs. For instance, multifile patch has only OBJA, which is the |
324 |
;; patch buffer. |
;; patch buffer. |
325 |
(defun ediff-make-new-meta-list-header (regexp |
(defun ediff-make-new-meta-list-header (regexp |
326 |
objA objB objC |
objA objB objC |
327 |
merge-auto-store-dir |
merge-auto-store-dir |
328 |
comparison-func) |
comparison-func) |
340 |
;; checks if the session is a meta session |
;; checks if the session is a meta session |
341 |
(defun ediff-meta-session-p (session-info) |
(defun ediff-meta-session-p (session-info) |
342 |
(and (stringp (ediff-get-session-objA-name session-info)) |
(and (stringp (ediff-get-session-objA-name session-info)) |
343 |
(file-directory-p (ediff-get-session-objA-name session-info)) |
(file-directory-p (ediff-get-session-objA-name session-info)) |
344 |
(stringp (ediff-get-session-objB-name session-info)) |
(stringp (ediff-get-session-objB-name session-info)) |
345 |
(file-directory-p (ediff-get-session-objB-name session-info)) |
(file-directory-p (ediff-get-session-objB-name session-info)) |
346 |
(if (stringp (ediff-get-session-objC-name session-info)) |
(if (stringp (ediff-get-session-objC-name session-info)) |
468 |
;;; (while (ediff-get-session-status |
;;; (while (ediff-get-session-status |
469 |
;;; (ediff-get-meta-info (current-buffer) pos 'noerror)) |
;;; (ediff-get-meta-info (current-buffer) pos 'noerror)) |
470 |
;;; (setq pos (ediff-previous-meta-overlay-start pos))) |
;;; (setq pos (ediff-previous-meta-overlay-start pos))) |
471 |
|
|
472 |
(if pos (goto-char pos)) |
(if pos (goto-char pos)) |
473 |
(if (eq ediff-metajob-name 'ediff-registry) |
(if (eq ediff-metajob-name 'ediff-registry) |
474 |
(if (and (ediff-get-meta-info (current-buffer) pos 'noerror) |
(if (and (ediff-get-meta-info (current-buffer) pos 'noerror) |
505 |
;; DIR1, DIR2, DIR3 are directories. DIR3 can be nil. |
;; DIR1, DIR2, DIR3 are directories. DIR3 can be nil. |
506 |
;; OUTPUT-DIR is a directory for auto-storing the results of merge jobs. |
;; OUTPUT-DIR is a directory for auto-storing the results of merge jobs. |
507 |
;; Can be nil. |
;; Can be nil. |
508 |
;; REGEXP is a regexp used to filter out files in the directories. |
;; REGEXP is nil or a filter regexp; only file names that match the regexp |
509 |
|
;; are considered. |
510 |
;; If a file is a directory in dir1 but not dir2 (or vice versa), it is not |
;; If a file is a directory in dir1 but not dir2 (or vice versa), it is not |
511 |
;; included in the intersection. However, a regular file that is a dir in dir3 |
;; included in the intersection. However, a regular file that is a dir in dir3 |
512 |
;; is included, since dir3 files are supposed to be ancestors for merging. |
;; is included, since dir3 files are supposed to be ancestors for merging. |
546 |
lis1 (directory-files auxdir1 nil regexp) |
lis1 (directory-files auxdir1 nil regexp) |
547 |
lis1 (delete "." lis1) |
lis1 (delete "." lis1) |
548 |
lis1 (delete ".." lis1) |
lis1 (delete ".." lis1) |
549 |
lis1 (mapcar |
lis1 (mapcar |
550 |
(lambda (elt) |
(lambda (elt) |
551 |
(ediff-add-slash-if-directory auxdir1 elt)) |
(ediff-add-slash-if-directory auxdir1 elt)) |
552 |
lis1) |
lis1) |
553 |
auxdir2 (file-name-as-directory dir2) |
auxdir2 (file-name-as-directory dir2) |
554 |
lis2 (mapcar |
lis2 (mapcar |
555 |
(lambda (elt) |
(lambda (elt) |
556 |
(ediff-add-slash-if-directory auxdir2 elt)) |
(ediff-add-slash-if-directory auxdir2 elt)) |
557 |
(directory-files auxdir2 nil regexp))) |
(directory-files auxdir2 nil regexp))) |
558 |
|
|
559 |
(if (stringp dir3) |
(if (stringp dir3) |
560 |
(setq auxdir3 (file-name-as-directory dir3) |
(setq auxdir3 (file-name-as-directory dir3) |
561 |
lis3 (mapcar |
lis3 (mapcar |
562 |
(lambda (elt) |
(lambda (elt) |
563 |
(ediff-add-slash-if-directory auxdir3 elt)) |
(ediff-add-slash-if-directory auxdir3 elt)) |
564 |
(directory-files auxdir3 nil regexp)))) |
(directory-files auxdir3 nil regexp)))) |
615 |
merge-autostore-dir |
merge-autostore-dir |
616 |
comparison-func) |
comparison-func) |
617 |
difflist)) |
difflist)) |
618 |
|
|
619 |
(setq common-part |
(setq common-part |
620 |
(cons |
(cons |
621 |
;; metalist header |
;; metalist header |
622 |
(ediff-make-new-meta-list-header regexp |
(ediff-make-new-meta-list-header regexp |
623 |
auxdir1 auxdir2 auxdir3 |
auxdir1 auxdir2 auxdir3 |
624 |
merge-autostore-dir |
merge-autostore-dir |
625 |
comparison-func) |
comparison-func) |
626 |
(mapcar |
(mapcar |
627 |
(lambda (elt) |
(lambda (elt) |
628 |
(ediff-make-new-meta-list-element |
(ediff-make-new-meta-list-element |
629 |
(concat auxdir1 elt) |
(concat auxdir1 elt) |
630 |
(concat auxdir2 elt) |
(concat auxdir2 elt) |
687 |
(setq common (sort (ediff-copy-list common) 'string-lessp)) |
(setq common (sort (ediff-copy-list common) 'string-lessp)) |
688 |
|
|
689 |
;; return result |
;; return result |
690 |
(cons |
(cons |
691 |
;; header -- has 6 elements. Meta buffer is prepended later by |
;; header -- has 6 elements. Meta buffer is prepended later by |
692 |
;; ediff-prepare-meta-buffer |
;; ediff-prepare-meta-buffer |
693 |
(ediff-make-new-meta-list-header regexp |
(ediff-make-new-meta-list-header regexp |
694 |
auxdir1 nil nil |
auxdir1 nil nil |
695 |
merge-autostore-dir nil) |
merge-autostore-dir nil) |
697 |
(concat auxdir1 elt) nil nil)) |
(concat auxdir1 elt) nil nil)) |
698 |
common)) |
common)) |
699 |
)) |
)) |
700 |
|
|
701 |
|
|
702 |
;; If file groups selected by patterns will ever be implemented, this |
;; If file groups selected by patterns will ever be implemented, this |
703 |
;; comparison function might become useful. |
;; comparison function might become useful. |
734 |
(defun ediff-prepare-meta-buffer (action-func meta-list |
(defun ediff-prepare-meta-buffer (action-func meta-list |
735 |
meta-buffer-name redraw-function |
meta-buffer-name redraw-function |
736 |
jobname &optional startup-hooks) |
jobname &optional startup-hooks) |
737 |
(let* ((meta-buffer-name |
(let* ((meta-buffer-name |
738 |
(ediff-unique-buffer-name meta-buffer-name "*")) |
(ediff-unique-buffer-name meta-buffer-name "*")) |
739 |
(meta-buffer (get-buffer-create meta-buffer-name))) |
(meta-buffer (get-buffer-create meta-buffer-name))) |
740 |
(ediff-with-current-buffer meta-buffer |
(ediff-with-current-buffer meta-buffer |
749 |
|
|
750 |
;; comes after ediff-meta-action-function is set |
;; comes after ediff-meta-action-function is set |
751 |
(ediff-setup-meta-map) |
(ediff-setup-meta-map) |
752 |
|
|
753 |
(if (eq ediff-metajob-name 'ediff-registry) |
(if (eq ediff-metajob-name 'ediff-registry) |
754 |
(progn |
(progn |
755 |
(setq ediff-registry-buffer meta-buffer |
(setq ediff-registry-buffer meta-buffer |
763 |
;; add meta-buffer to the list header |
;; add meta-buffer to the list header |
764 |
(cons (cons meta-buffer (car meta-list)) |
(cons (cons meta-buffer (car meta-list)) |
765 |
(cdr meta-list)))) |
(cdr meta-list)))) |
766 |
|
|
767 |
(or (eq meta-buffer ediff-registry-buffer) |
(or (eq meta-buffer ediff-registry-buffer) |
768 |
(setq ediff-session-registry |
(setq ediff-session-registry |
769 |
(cons meta-buffer ediff-session-registry))) |
(cons meta-buffer ediff-session-registry))) |
770 |
|
|
771 |
;; redraw-function uses ediff-meta-list |
;; redraw-function uses ediff-meta-list |
772 |
(funcall redraw-function ediff-meta-list) |
(funcall redraw-function ediff-meta-list) |
773 |
|
|
774 |
;; set read-only/non-modified |
;; set read-only/non-modified |
775 |
(setq buffer-read-only t) |
(setq buffer-read-only t) |
776 |
(set-buffer-modified-p nil) |
(set-buffer-modified-p nil) |
789 |
|
|
790 |
(or (ediff-one-filegroup-metajob jobname) |
(or (ediff-one-filegroup-metajob jobname) |
791 |
(ediff-draw-dir-diffs ediff-dir-difference-list)) |
(ediff-draw-dir-diffs ediff-dir-difference-list)) |
792 |
(define-key |
(define-key |
793 |
ediff-meta-buffer-map "h" 'ediff-mark-for-hiding-at-pos) |
ediff-meta-buffer-map "h" 'ediff-mark-for-hiding-at-pos) |
794 |
(define-key ediff-meta-buffer-map "x" 'ediff-hide-marked-sessions) |
(define-key ediff-meta-buffer-map "x" 'ediff-hide-marked-sessions) |
795 |
(define-key |
(define-key |
796 |
ediff-meta-buffer-map "m" 'ediff-mark-for-operation-at-pos) |
ediff-meta-buffer-map "m" 'ediff-mark-for-operation-at-pos) |
797 |
(define-key ediff-meta-buffer-map "u" nil) |
(define-key ediff-meta-buffer-map "u" nil) |
798 |
(define-key |
(define-key |
799 |
ediff-meta-buffer-map "um" 'ediff-unmark-all-for-operation) |
ediff-meta-buffer-map "um" 'ediff-unmark-all-for-operation) |
800 |
(define-key |
(define-key |
801 |
ediff-meta-buffer-map "uh" 'ediff-unmark-all-for-hiding) |
ediff-meta-buffer-map "uh" 'ediff-unmark-all-for-hiding) |
802 |
(cond ((ediff-collect-diffs-metajob jobname) |
(cond ((ediff-collect-diffs-metajob jobname) |
803 |
(define-key |
(define-key |
827 |
;; Insert session status at point. Status is either ?H (marked for hiding), or |
;; Insert session status at point. Status is either ?H (marked for hiding), or |
828 |
;; ?I (hidden or invalid), or ?* (meaning marked for an operation; currently, |
;; ?I (hidden or invalid), or ?* (meaning marked for an operation; currently, |
829 |
;; such op can only be checking for equality)), or SPC (meaning neither marked |
;; such op can only be checking for equality)), or SPC (meaning neither marked |
830 |
;; nor invalid) |
;; nor invalid) |
831 |
(defun ediff-insert-session-status-in-meta-buffer (session) |
(defun ediff-insert-session-status-in-meta-buffer (session) |
832 |
(insert |
(insert |
833 |
(cond ((ediff-get-session-status session)) ; session has status: ?H, ?I, ?* |
(cond ((ediff-get-session-status session)) ; session has status: ?H, ?I, ?* |
901 |
(map-extents 'delete-extent) ; xemacs |
(map-extents 'delete-extent) ; xemacs |
902 |
(mapcar 'delete-overlay (overlays-in 1 1)) ; emacs |
(mapcar 'delete-overlay (overlays-in 1 1)) ; emacs |
903 |
) |
) |
904 |
|
|
905 |
(insert (format ediff-meta-buffer-message |
(insert (format ediff-meta-buffer-message |
906 |
(ediff-abbrev-jobname ediff-metajob-name))) |
(ediff-abbrev-jobname ediff-metajob-name))) |
907 |
|
|
908 |
(setq regexp (ediff-get-group-regexp meta-list) |
(setq regexp (ediff-get-group-regexp meta-list) |
909 |
merge-autostore-dir |
merge-autostore-dir |
910 |
(ediff-get-group-merge-autostore-dir meta-list)) |
(ediff-get-group-merge-autostore-dir meta-list)) |
911 |
|
|
912 |
(cond ((ediff-collect-diffs-metajob) |
(cond ((ediff-collect-diffs-metajob) |
913 |
(insert |
(insert |
914 |
" P:\tcollect custom diffs of all marked sessions\n")) |
" P:\tcollect custom diffs of all marked sessions\n")) |
939 |
---------------------------------------------- |
---------------------------------------------- |
940 |
|
|
941 |
") |
") |
942 |
|
|
943 |
;; discard info on directories and regexp |
;; discard info on directories and regexp |
944 |
(setq meta-list (cdr meta-list) |
(setq meta-list (cdr meta-list) |
945 |
tmp-list meta-list) |
tmp-list meta-list) |
952 |
(if empty |
(if empty |
953 |
(insert |
(insert |
954 |
" ****** ****** This session group has no members\n")) |
" ****** ****** This session group has no members\n")) |
955 |
|
|
956 |
;; now organize file names like this: |
;; now organize file names like this: |
957 |
;; use-mark sizeA dateA sizeB dateB filename |
;; use-mark sizeA dateA sizeB dateB filename |
958 |
;; make sure directories are displayed with a trailing slash. |
;; make sure directories are displayed with a trailing slash. |
1214 |
(if (stringp dir3) |
(if (stringp dir3) |
1215 |
(if (= (mod membership-code ediff-membership-code3) 0) ; dir3 |
(if (= (mod membership-code ediff-membership-code3) 0) ; dir3 |
1216 |
(let ((beg (point))) |
(let ((beg (point))) |
1217 |
(insert (format " %-25s" |
(insert (format " %-25s" |
1218 |
(ediff-truncate-string-left |
(ediff-truncate-string-left |
1219 |
(ediff-abbreviate-file-name |
(ediff-abbreviate-file-name |
1220 |
(if (file-directory-p (concat dir3 file)) |
(if (file-directory-p (concat dir3 file)) |
1328 |
(ediff-show-meta-buffer |
(ediff-show-meta-buffer |
1329 |
ediff-parent-meta-buffer ediff-meta-session-number) |
ediff-parent-meta-buffer ediff-meta-session-number) |
1330 |
(error "This session group has no parent"))) |
(error "This session group has no parent"))) |
1331 |
|
|
1332 |
|
|
1333 |
;; argument is ignored |
;; argument is ignored |
1334 |
(defun ediff-redraw-registry-buffer (&optional ignore) |
(defun ediff-redraw-registry-buffer (&optional ignore) |
1374 |
(while registry-list |
(while registry-list |
1375 |
(setq elt (car registry-list) |
(setq elt (car registry-list) |
1376 |
registry-list (cdr registry-list)) |
registry-list (cdr registry-list)) |
1377 |
|
|
1378 |
(if (ediff-buffer-live-p elt) |
(if (ediff-buffer-live-p elt) |
1379 |
(if (ediff-with-current-buffer elt |
(if (ediff-with-current-buffer elt |
1380 |
(setq job-name ediff-metajob-name |
(setq job-name ediff-metajob-name |
1480 |
;;; (error "Can't hide active session, %s" (buffer-name session-buf))) |
;;; (error "Can't hide active session, %s" (buffer-name session-buf))) |
1481 |
(t (ediff-set-session-status info ?H)))) |
(t (ediff-set-session-status info ?H)))) |
1482 |
unmark) |
unmark) |
1483 |
|
|
1484 |
|
|
1485 |
(defun ediff-mark-for-operation-at-pos (unmark) |
(defun ediff-mark-for-operation-at-pos (unmark) |
1486 |
"Mark session for a group operation. With prefix arg, unmark." |
"Mark session for a group operation. With prefix arg, unmark." |
1563 |
(funcall operation elt sessionNum))) |
(funcall operation elt sessionNum))) |
1564 |
;; The following goes into a session represented by a subdirectory |
;; The following goes into a session represented by a subdirectory |
1565 |
;; and applies operation to marked sessions there |
;; and applies operation to marked sessions there |
1566 |
((and (ediff-meta-session-p elt) |
((and (ediff-meta-session-p elt) |
1567 |
(ediff-buffer-live-p |
(ediff-buffer-live-p |
1568 |
(setq session-buf (ediff-get-session-buffer elt)))) |
(setq session-buf (ediff-get-session-buffer elt)))) |
1569 |
(setq numMarked |
(setq numMarked |
1570 |
(+ numMarked |
(+ numMarked |
1571 |
(ediff-with-current-buffer session-buf |
(ediff-with-current-buffer session-buf |
1572 |
;; pass meta-diff along |
;; pass meta-diff along |
1573 |
(setq ediff-meta-diff-buffer diff-buffer) |
(setq ediff-meta-diff-buffer diff-buffer) |
1603 |
(insert-buffer custom-diff-buf) |
(insert-buffer custom-diff-buf) |
1604 |
(insert "\n"))) |
(insert "\n"))) |
1605 |
;; if ediff session is not live, run diff directly on the files |
;; if ediff session is not live, run diff directly on the files |
1606 |
((memq metajob '(ediff-directories |
((memq metajob '(ediff-directories |
1607 |
ediff-merge-directories |
ediff-merge-directories |
1608 |
ediff-merge-directories-with-ancestor)) |
ediff-merge-directories-with-ancestor)) |
1609 |
;; get diffs by calling shell command on ediff-custom-diff-program |
;; get diffs by calling shell command on ediff-custom-diff-program |
1672 |
)) |
)) |
1673 |
(error "The patch buffer wasn't found")))) |
(error "The patch buffer wasn't found")))) |
1674 |
|
|
1675 |
|
|
1676 |
;; This function executes in meta buffer. It knows where event happened. |
;; This function executes in meta buffer. It knows where event happened. |
1677 |
(defun ediff-filegroup-action () |
(defun ediff-filegroup-action () |
1678 |
"Execute appropriate action for a selected session." |
"Execute appropriate action for a selected session." |
1711 |
;; do ediff/ediff-merge on subdirectories |
;; do ediff/ediff-merge on subdirectories |
1712 |
(if (ediff-buffer-live-p session-buf) |
(if (ediff-buffer-live-p session-buf) |
1713 |
(ediff-show-meta-buffer session-buf) |
(ediff-show-meta-buffer session-buf) |
1714 |
(setq regexp (read-string "Filter through regular expression: " |
(setq regexp (read-string "Filter through regular expression: " |
1715 |
nil 'ediff-filtering-regexp-history)) |
nil 'ediff-filtering-regexp-history)) |
1716 |
(ediff-directories-internal |
(ediff-directories-internal |
1717 |
file1 file2 file3 regexp |
file1 file2 file3 regexp |
1718 |
ediff-session-action-function |
ediff-session-action-function |
1719 |
ediff-metajob-name |
ediff-metajob-name |
1720 |
;; make it update (car info) after startup |
;; make it update (car info) after startup |
1721 |
`(list (lambda () |
`(list (lambda () |
1722 |
;; child session group should know its parent |
;; child session group should know its parent |
1723 |
(setq ediff-parent-meta-buffer |
(setq ediff-parent-meta-buffer |
1724 |
(quote ,ediff-meta-buffer) |
(quote ,ediff-meta-buffer) |
1733 |
(file-directory-p file1)) |
(file-directory-p file1)) |
1734 |
(if (ediff-buffer-live-p session-buf) |
(if (ediff-buffer-live-p session-buf) |
1735 |
(ediff-show-meta-buffer session-buf) |
(ediff-show-meta-buffer session-buf) |
1736 |
(setq regexp (read-string "Filter through regular expression: " |
(setq regexp (read-string "Filter through regular expression: " |
1737 |
nil 'ediff-filtering-regexp-history)) |
nil 'ediff-filtering-regexp-history)) |
1738 |
(ediff-directory-revisions-internal |
(ediff-directory-revisions-internal |
1739 |
file1 regexp |
file1 regexp |
1740 |
ediff-session-action-function ediff-metajob-name |
ediff-session-action-function ediff-metajob-name |
1741 |
;; make it update (car info) after startup |
;; make it update (car info) after startup |
1742 |
`(list (lambda () |
`(list (lambda () |
1743 |
;; child session group should know its parent and |
;; child session group should know its parent and |
1744 |
;; its number |
;; its number |
1745 |
(setq ediff-parent-meta-buffer |
(setq ediff-parent-meta-buffer |
1763 |
"This session has no ancestor. Merge without the ancestor? ") |
"This session has no ancestor. Merge without the ancestor? ") |
1764 |
(ediff-merge-files |
(ediff-merge-files |
1765 |
file1 file2 |
file1 file2 |
1766 |
;; provide startup hooks |
;; provide startup hooks |
1767 |
`(list (lambda () |
`(list (lambda () |
1768 |
(add-hook |
(add-hook |
1769 |
'ediff-after-quit-hook-internal |
'ediff-after-quit-hook-internal |
1770 |
(lambda () |
(lambda () |
1792 |
((ediff-one-filegroup-metajob) ; needs 1 file arg |
((ediff-one-filegroup-metajob) ; needs 1 file arg |
1793 |
(funcall ediff-session-action-function |
(funcall ediff-session-action-function |
1794 |
file1 |
file1 |
1795 |
;; provide startup hooks |
;; provide startup hooks |
1796 |
`(list (lambda () |
`(list (lambda () |
1797 |
(add-hook |
(add-hook |
1798 |
'ediff-after-quit-hook-internal |
'ediff-after-quit-hook-internal |
1799 |
(lambda () |
(lambda () |
1821 |
((not (ediff-metajob3)) ; need 2 file args |
((not (ediff-metajob3)) ; need 2 file args |
1822 |
(funcall ediff-session-action-function |
(funcall ediff-session-action-function |
1823 |
file1 file2 |
file1 file2 |
1824 |
;; provide startup hooks |
;; provide startup hooks |
1825 |
`(list (lambda () |
`(list (lambda () |
1826 |
(add-hook |
(add-hook |
1827 |
'ediff-after-quit-hook-internal |
'ediff-after-quit-hook-internal |
1828 |
(lambda () |
(lambda () |
1850 |
((ediff-metajob3) ; need 3 file args |
((ediff-metajob3) ; need 3 file args |
1851 |
(funcall ediff-session-action-function |
(funcall ediff-session-action-function |
1852 |
file1 file2 file3 |
file1 file2 file3 |
1853 |
;; arrange startup hooks |
;; arrange startup hooks |
1854 |
`(list (lambda () |
`(list (lambda () |
1855 |
(add-hook |
(add-hook |
1856 |
'ediff-after-quit-hook-internal |
'ediff-after-quit-hook-internal |
1857 |
(lambda () |
(lambda () |
1957 |
(set-window-buffer (selected-window) meta-buf))) |
(set-window-buffer (selected-window) meta-buf))) |
1958 |
)) |
)) |
1959 |
(if (and (ediff-window-display-p) |
(if (and (ediff-window-display-p) |
1960 |
(window-live-p |
(window-live-p |
1961 |
(setq wind (ediff-get-visible-buffer-window meta-buf)))) |
(setq wind (ediff-get-visible-buffer-window meta-buf)))) |
1962 |
(progn |
(progn |
1963 |
(setq frame (window-frame wind)) |
(setq frame (window-frame wind)) |
2019 |
)) |
)) |
2020 |
(if (ediff-window-display-p) |
(if (ediff-window-display-p) |
2021 |
(progn |
(progn |
2022 |
(setq frame |
(setq frame |
2023 |
(window-frame |
(window-frame |
2024 |
(ediff-get-visible-buffer-window ediff-registry-buffer))) |
(ediff-get-visible-buffer-window ediff-registry-buffer))) |
2025 |
(raise-frame frame) |
(raise-frame frame) |
2059 |
(ediff-with-current-buffer (current-buffer) |
(ediff-with-current-buffer (current-buffer) |
2060 |
(if (ediff-buffer-live-p ediff-registry-buffer) |
(if (ediff-buffer-live-p ediff-registry-buffer) |
2061 |
(ediff-redraw-registry-buffer) |
(ediff-redraw-registry-buffer) |
2062 |
(ediff-prepare-meta-buffer |
(ediff-prepare-meta-buffer |
2063 |
'ediff-registry-action |
'ediff-registry-action |
2064 |
ediff-session-registry |
ediff-session-registry |
2065 |
"*Ediff Registry" |
"*Ediff Registry" |
2067 |
'ediff-registry)) |
'ediff-registry)) |
2068 |
)) |
)) |
2069 |
|
|
2070 |
;; If meta-buf exists, it is redrawn along with parent. |
;; If meta-buf exists, it is redrawn along with parent. |
2071 |
;; Otherwise, nothing happens. |
;; Otherwise, nothing happens. |
2072 |
(defun ediff-cleanup-meta-buffer (meta-buffer) |
(defun ediff-cleanup-meta-buffer (meta-buffer) |
2073 |
(if (ediff-buffer-live-p meta-buffer) |
(if (ediff-buffer-live-p meta-buffer) |
2135 |
(if (ediff-buffer-live-p ediff-dir-diffs-buffer) |
(if (ediff-buffer-live-p ediff-dir-diffs-buffer) |
2136 |
(kill-buffer ediff-dir-diffs-buffer))) |
(kill-buffer ediff-dir-diffs-buffer))) |
2137 |
(kill-buffer buf)) |
(kill-buffer buf)) |
2138 |
|
|
2139 |
|
|
2140 |
;; Obtain information on a meta record where the user clicked or typed |
;; Obtain information on a meta record where the user clicked or typed |
2141 |
;; BUF is the buffer where this happened and POINT is the position |
;; BUF is the buffer where this happened and POINT is the position |