/[emacs]/emacs/lisp/ediff-mult.el
ViewVC logotype

Diff of /emacs/lisp/ediff-mult.el

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.29 by kifer, Wed Mar 20 06:36:18 2002 UTC revision 1.29.2.1 by miles, Fri Apr 4 06:20:04 2003 UTC
# Line 27  Line 27 
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
# Line 53  Line 53 
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
# Line 80  Line 80 
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
# Line 88  Line 88 
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
# Line 96  Line 96 
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.
# Line 207  It is used by commands such as ediff-dir Line 207  It is used by commands such as ediff-dir
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."
# Line 322  buffers." Line 322  buffers."
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)
# Line 340  buffers." Line 340  buffers."
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))
# Line 468  Moves in circular fashion.  With numeric Line 468  Moves in circular fashion.  With numeric
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)
# Line 505  behavior." Line 505  behavior."
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.
# Line 545  behavior." Line 546  behavior."
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))))
# Line 614  behavior." Line 615  behavior."
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)
# Line 686  behavior." Line 687  behavior."
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)
# Line 696  behavior." Line 697  behavior."
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.
# Line 733  behavior." Line 734  behavior."
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
# Line 748  behavior." Line 749  behavior."
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
# Line 762  behavior." Line 763  behavior."
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)
# Line 788  behavior." Line 789  behavior."
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
# Line 826  behavior." Line 827  behavior."
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, ?*
# Line 900  behavior." Line 901  behavior."
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"))
# Line 938  behavior." Line 939  behavior."
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)
# Line 951  behavior." Line 952  behavior."
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.
# Line 1213  Useful commands: Line 1214  Useful commands:
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))
# Line 1327  Useful commands: Line 1328  Useful commands:
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)
# Line 1373  Useful commands: Line 1374  Useful commands:
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
# Line 1479  Useful commands: Line 1480  Useful commands:
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."
# Line 1562  Useful commands: Line 1563  Useful commands:
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)
# Line 1602  Useful commands: Line 1603  Useful commands:
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
# Line 1671  all marked sessions must be active." Line 1672  all marked sessions must be active."
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."
# Line 1710  all marked sessions must be active." Line 1711  all marked sessions must be active."
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)
# Line 1732  all marked sessions must be active." Line 1733  all marked sessions must be active."
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
# Line 1762  all marked sessions must be active." Line 1763  all marked sessions must be active."
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 ()
# Line 1791  all marked sessions must be active." Line 1792  all marked sessions must be active."
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 ()
# Line 1820  all marked sessions must be active." Line 1821  all marked sessions must be active."
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 ()
# Line 1849  all marked sessions must be active." Line 1850  all marked sessions must be active."
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 ()
# Line 1956  all marked sessions must be active." Line 1957  all marked sessions must be active."
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))
# Line 2018  all marked sessions must be active." Line 2019  all marked sessions must be active."
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)
# Line 2058  all marked sessions must be active." Line 2059  all marked sessions must be active."
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"
# Line 2066  all marked sessions must be active." Line 2067  all marked sessions must be active."
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)
# Line 2134  If this is a session registry buffer the Line 2135  If this is a session registry buffer the
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

Legend:
Removed from v.1.29  
changed lines
  Added in v.1.29.2.1

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26