• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10/emacs-93/emacs/lisp/

Lines Matching +defs:ediff +defs:regexp +defs:hide

0 ;;; ediff-mult.el --- support for multi-file/multi-buffer processing in Ediff
36 ;; See ediff-redraw-directory-group-buffer for an example.
37 ;; In all likelihood, ediff-redraw-directory-group-buffer can be used
40 ;; RET. See ediff-filegroup-action.
46 ;; The function ediff-make-new-meta-list-element can be used to create
48 ;; description header). See ediff-make-new-meta-list-element for the
52 ;; above list. Search for `API for ediff-meta-list' for details.
55 ;; (regexp metaobj1 metaobj2 metaobj3 merge-save-buffer
57 ;; The function ediff-redraw-registry-buffer displays the
63 ;; Also, keep in mind that the function ediff-prepare-meta-buffer
67 ;; replace this prepended nil (via setcar) with the actual ediff
70 ;; to any of Ediff major entries (such as ediff-files, epatch, etc.).
71 ;; See how this is done in ediff-filegroup-action.
76 ;; Use ediff-make-new-meta-list-element to create these things.
82 ;; The nil's are placeholders, which are used internally by ediff.
83 ;; 4. Write a function that makes a call to ediff-prepare-meta-buffer
85 ;; You may be able to use ediff-directories-internal as a template.
90 ;; See how ediff-directories, ediff-merge-directories, and
91 ;; ediff-merge-directories-with-ancestor all use
92 ;; ediff-directories-internal.
103 ;; ediff-filegroup-action.
108 (defgroup ediff-mult nil
110 :prefix "ediff-"
111 :group 'ediff)
117 (or (featurep 'ediff-init)
118 (load "ediff-init.el" nil nil 'nosuffix))
119 (or (featurep 'ediff-util)
120 (load "ediff-util.el" nil nil 'nosuffix))
124 (require 'ediff-init)
127 (ediff-defvar-local ediff-meta-buffer nil "")
128 (ediff-defvar-local ediff-parent-meta-buffer nil "")
130 (defvar ediff-registry-buffer nil)
132 (defconst ediff-meta-buffer-message "This is an Ediff Session Group Panel: %s
149 (ediff-defvar-local ediff-meta-buffer-map nil
151 (defvar ediff-dir-diffs-buffer-map (make-sparse-keymap)
155 ;; Variable specifying the action to take when the use invokes ediff in the
156 ;; meta buffer. This is usually ediff-registry-action or ediff-filegroup-action
157 (ediff-defvar-local ediff-meta-action-function nil "")
158 ;; Tells ediff-update-meta-buffer how to redraw it
159 (ediff-defvar-local ediff-meta-redraw-function nil "")
160 ;; Tells ediff-filegroup-action and similar procedures how to invoke Ediff for
162 (ediff-defvar-local ediff-session-action-function nil "")
164 (ediff-defvar-local ediff-metajob-name nil "")
167 (ediff-defvar-local ediff-meta-diff-buffer nil "")
170 (ediff-defvar-local ediff-recurse-to-subdirectories nil "")
173 (defvar ediff-filtering-regexp-history nil "")
175 (defcustom ediff-default-filtering-regexp nil
177 Should be a sexp. For instance (car ediff-filtering-regexp-history) or nil."
179 :group 'ediff-mult)
181 ;; This has the form ((meta-buf regexp dir1 dir2 dir3 merge-auto-store-dir)
187 ;; buffer, this means ediff is still working on the pair.
190 (ediff-defvar-local ediff-meta-list nil "")
192 (ediff-defvar-local ediff-meta-session-number nil "")
196 (ediff-defvar-local ediff-dir-difference-list nil "")
197 (ediff-defvar-local ediff-dir-diffs-buffer nil "")
200 (defvar ediff-session-registry nil)
202 (defcustom ediff-meta-truncate-filenames t
204 This can be toggled with `ediff-toggle-filename-truncation'."
206 :group 'ediff-mult)
208 (defcustom ediff-meta-mode-hook nil
211 :group 'ediff-mult)
213 (defcustom ediff-registry-setup-hook nil
216 :group 'ediff-mult)
218 (defcustom ediff-before-session-group-setup-hooks nil
220 It is used by commands such as `ediff-directories'.
222 on `ediff-quit', `ediff-suspend', or `ediff-quit-session-group-hook'."
224 :group 'ediff-hook)
225 (defcustom ediff-after-session-group-setup-hook nil
227 ediff-directories, is run."
229 :group 'ediff-mult)
230 (defcustom ediff-quit-session-group-hook nil
233 :group 'ediff-mult)
234 (defcustom ediff-show-registry-hook nil
237 :group 'ediff-mult)
238 (defcustom ediff-show-session-group-hook '(delete-other-windows)
241 :group 'ediff-mult)
242 (defcustom ediff-meta-buffer-keymap-setup-hook nil
243 "*Hooks run just after setting up the `ediff-meta-buffer-map'.
248 :group 'ediff-mult)
251 (ediff-defvar-local ediff-meta-patchbufer nil "")
253 ;;; API for ediff-meta-list
255 ;; A meta-list is either ediff-meta-list, which contains a header and the list
256 ;; of ediff sessions or ediff-dir-difference-list, which is a header followed
267 ;; group buffer/regexp
268 (defsubst ediff-get-group-buffer (meta-list)
271 (defsubst ediff-get-group-regexp (meta-list)
274 (defsubst ediff-get-group-objA (meta-list)
276 (defsubst ediff-get-group-objB (meta-list)
278 (defsubst ediff-get-group-objC (meta-list)
280 (defsubst ediff-get-group-merge-autostore-dir (meta-list)
282 (defsubst ediff-get-group-comparison-func (meta-list)
286 ;; 'ediff-meta-info)
294 (defsubst ediff-get-session-buffer (elt)
296 (defsubst ediff-get-session-status (elt)
298 (defsubst ediff-set-session-status (session-info new-status)
301 (defsubst ediff-get-session-objA (elt)
303 (defsubst ediff-get-session-objB (elt)
305 (defsubst ediff-get-session-objC (elt)
309 (defsubst ediff-get-session-objA-name (elt)
311 (defsubst ediff-get-session-objB-name (elt)
313 (defsubst ediff-get-session-objC-name (elt)
316 (defsubst ediff-get-file-eqstatus (elt)
318 (defsubst ediff-set-file-eqstatus (elt value)
332 (defun ediff-make-new-meta-list-element (obj1 obj2 obj3)
339 (defun ediff-make-new-meta-list-header (regexp
343 (list regexp objA objB objC merge-auto-store-dir comparison-func))
345 ;; The activity marker is either or + (active session, i.e., ediff is currently
346 ;; run in it), or - (finished session, i.e., we've ran ediff in it and then
348 (defun ediff-get-session-activity-marker (session)
349 (let ((session-buf (ediff-get-session-buffer session)))
351 ((ediff-buffer-live-p session-buf) ?+) ;active session
355 (defun ediff-meta-session-p (session-info)
356 (and (stringp (ediff-get-session-objA-name session-info))
357 (file-directory-p (ediff-get-session-objA-name session-info))
358 (stringp (ediff-get-session-objB-name session-info))
359 (file-directory-p (ediff-get-session-objB-name session-info))
360 (if (stringp (ediff-get-session-objC-name session-info))
361 (file-directory-p (ediff-get-session-objC-name session-info)) t)))
364 (defun ediff-setup-meta-map ()
365 (setq ediff-meta-buffer-map (make-sparse-keymap))
366 (suppress-keymap ediff-meta-buffer-map)
367 (define-key ediff-meta-buffer-map "q" 'ediff-quit-meta-buffer)
368 (define-key ediff-meta-buffer-map "T" 'ediff-toggle-filename-truncation)
369 (define-key ediff-meta-buffer-map "R" 'ediff-show-registry)
370 (define-key ediff-meta-buffer-map "E" 'ediff-documentation)
371 (define-key ediff-meta-buffer-map "v" ediff-meta-action-function)
372 (define-key ediff-meta-buffer-map "\C-m" ediff-meta-action-function)
373 (define-key ediff-meta-buffer-map " " 'ediff-next-meta-item)
374 (define-key ediff-meta-buffer-map "n" 'ediff-next-meta-item)
375 (define-key ediff-meta-buffer-map "\C-?" 'ediff-previous-meta-item)
376 (define-key ediff-meta-buffer-map "p" 'ediff-previous-meta-item)
377 (define-key ediff-meta-buffer-map [delete] 'ediff-previous-meta-item)
378 (define-key ediff-meta-buffer-map [backspace] 'ediff-previous-meta-item)
379 (or (ediff-one-filegroup-metajob)
381 (define-key ediff-meta-buffer-map "=" nil)
382 (define-key ediff-meta-buffer-map "==" 'ediff-meta-mark-equal-files)
383 (define-key ediff-meta-buffer-map "=m" 'ediff-meta-mark-equal-files)
384 (define-key ediff-meta-buffer-map "=h" 'ediff-meta-mark-equal-files)))
385 (if ediff-no-emacs-help-in-control-buffer
386 (define-key ediff-meta-buffer-map "\C-h" 'ediff-previous-meta-item))
387 (if ediff-emacs-p
388 (define-key ediff-meta-buffer-map [mouse-2] ediff-meta-action-function)
389 (define-key ediff-meta-buffer-map [button2] ediff-meta-action-function))
391 (use-local-map ediff-meta-buffer-map)
392 ;; modify ediff-meta-buffer-map here
393 (run-hooks 'ediff-meta-buffer-keymap-setup-hook))
396 (defun ediff-meta-mode ()
399 `ediff-directories'
401 `ediff-directories3'
403 `ediff-merge-directories'
405 `ediff-merge-directories-with-ancestor'
407 `ediff-directory-revisions'
409 `ediff-merge-directory-revisions'
411 `ediff-merge-directory-revisions-with-ancestor'
415 \\{ediff-meta-buffer-map}"
417 (setq major-mode 'ediff-meta-mode)
420 (run-hooks 'ediff-meta-mode-hook))
424 (suppress-keymap ediff-dir-diffs-buffer-map)
425 (define-key ediff-dir-diffs-buffer-map "q" 'ediff-bury-dir-diffs-buffer)
426 (define-key ediff-dir-diffs-buffer-map " " 'next-line)
427 (define-key ediff-dir-diffs-buffer-map "n" 'next-line)
428 (define-key ediff-dir-diffs-buffer-map "\C-?" 'previous-line)
429 (define-key ediff-dir-diffs-buffer-map "p" 'previous-line)
430 (define-key ediff-dir-diffs-buffer-map "C" 'ediff-dir-diff-copy-file)
431 (if ediff-emacs-p
432 (define-key ediff-dir-diffs-buffer-map [mouse-2] 'ediff-dir-diff-copy-file)
433 (define-key ediff-dir-diffs-buffer-map [button2] 'ediff-dir-diff-copy-file))
434 (define-key ediff-dir-diffs-buffer-map [delete] 'previous-line)
435 (define-key ediff-dir-diffs-buffer-map [backspace] 'previous-line)
437 (defun ediff-next-meta-item (count)
445 (ediff-next-meta-item1)
446 (setq overl (ediff-get-meta-overlay-at-pos (point)))
448 (while (and overl (ediff-overlay-get overl 'invisible))
449 (ediff-next-meta-item1)
450 (setq overl (ediff-get-meta-overlay-at-pos (point)))))))
453 (defun ediff-next-meta-item1 ()
455 (setq pos (ediff-next-meta-overlay-start (point)))
457 (if (eq ediff-metajob-name 'ediff-registry)
458 (if (and (ediff-get-meta-info (current-buffer) pos 'noerror)
465 (defun ediff-previous-meta-item (count)
473 (ediff-previous-meta-item1)
474 (setq overl (ediff-get-meta-overlay-at-pos (point)))
476 (while (and overl (ediff-overlay-get overl 'invisible))
477 (ediff-previous-meta-item1)
478 (setq overl (ediff-get-meta-overlay-at-pos (point)))))))
480 (defun ediff-previous-meta-item1 ()
482 (setq pos (ediff-previous-meta-overlay-start (point)))
484 ;;; (while (ediff-get-session-status
485 ;;; (ediff-get-meta-info (current-buffer) pos 'noerror))
486 ;;; (setq pos (ediff-previous-meta-overlay-start pos)))
489 (if (eq ediff-metajob-name 'ediff-registry)
490 (if (and (ediff-get-meta-info (current-buffer) pos 'noerror)
497 (defsubst ediff-add-slash-if-directory (dir file)
502 (defun ediff-toggle-filename-truncation ()
504 Set `ediff-meta-truncate-filenames' variable if you want to change the default
507 (setq ediff-meta-truncate-filenames (not ediff-meta-truncate-filenames))
508 (ediff-update-meta-buffer (current-buffer) 'must-redraw))
514 (defvar ediff-membership-code1 2)
515 (defvar ediff-membership-code2 3)
516 (defvar ediff-membership-code3 5)
517 (defvar ediff-product-of-memcodes (* ediff-membership-code1
518 ediff-membership-code2
519 ediff-membership-code3))
524 ;; REGEXP is nil or a filter regexp; only file names that match the regexp
539 ;; corresponding ediff subsession.
546 ;; Contains the meta info about this ediff operation
547 ;; (regexp dir1 dir2 dir3 merge-auto-store-dir comparison-func)
551 ;; ediff-multifile-patch doesn't have dir2 and dir3, and regexp,
554 (defun ediff-intersect-directories (jobname
555 regexp dir1 dir2
562 lis1 (directory-files auxdir1 nil regexp)
567 (ediff-add-slash-if-directory auxdir1 elt))
570 lis2 (directory-files auxdir2 nil regexp)
575 (ediff-add-slash-if-directory auxdir2 elt))
580 lis3 (directory-files auxdir3 nil regexp)
585 (ediff-add-slash-if-directory auxdir3 elt))
588 (if (ediff-nonempty-string-p merge-autostore-dir)
591 (setq common (ediff-intersection lis1 lis2 comparison-func))
596 (if (and lis3 (ediff-comparison-metajob3 jobname))
597 (setq common (ediff-intersection common lis3 comparison-func)))
600 (setq common (sort (ediff-copy-list common) 'string-lessp))
603 (setq difflist (ediff-set-difference
604 (ediff-union (ediff-union lis1 lis2 comparison-func)
611 difflist (sort (ediff-copy-list (delete ".." difflist))
619 ;; It is a product of a subset of ediff-membership-code1=2,
620 ;; ediff-membership-code2=3, and ediff-membership-code3=5.
626 (setcdr elt (* (cdr elt) ediff-membership-code1)))
628 (setcdr elt (* (cdr elt) ediff-membership-code2)))
630 (setcdr elt (* (cdr elt) ediff-membership-code3)))
635 (ediff-make-new-meta-list-header regexp
644 (ediff-make-new-meta-list-header regexp
650 (ediff-make-new-meta-list-element
661 (setq elt (ediff-add-slash-if-directory auxdir3 elt))
673 (defun ediff-get-directory-files-under-revision (jobname
674 regexp dir1
678 lis1 (directory-files auxdir1 nil regexp))
680 (if (ediff-nonempty-string-p merge-autostore-dir)
690 (cons (ediff-add-slash-if-directory auxdir1 elt) common)))
709 (setq common (sort (ediff-copy-list common) 'string-lessp))
714 ;; ediff-prepare-meta-buffer
715 (ediff-make-new-meta-list-header regexp
718 (mapcar (lambda (elt) (ediff-make-new-meta-list-element
729 ;;(defun ediff-pattern= (str1 str2)
756 (defun ediff-prepare-meta-buffer (action-func meta-list
760 (ediff-unique-buffer-name meta-buffer-name "*"))
762 (ediff-with-current-buffer meta-buffer
765 (ediff-meta-mode)
767 (setq ediff-meta-action-function action-func
768 ediff-meta-redraw-function redraw-function
769 ediff-metajob-name jobname
770 ediff-meta-buffer meta-buffer)
772 ;; comes after ediff-meta-action-function is set
773 (ediff-setup-meta-map)
775 (if (eq ediff-metajob-name 'ediff-registry)
777 (setq ediff-registry-buffer meta-buffer
778 ediff-meta-list meta-list)
782 ediff-meta-buffer-map "M" 'ediff-show-meta-buff-from-registry))
784 (setq ediff-meta-list
789 (or (eq meta-buffer ediff-registry-buffer)
790 (setq ediff-session-registry
791 (cons meta-buffer ediff-session-registry)))
793 ;; redraw-function uses ediff-meta-list
794 (funcall redraw-function ediff-meta-list)
803 ;; Must be after run startup-hooks, since ediff-dir-difference-list is
805 (if (eq action-func 'ediff-filegroup-action)
807 ;; put meta buffer in (car ediff-dir-difference-list)
808 (setq ediff-dir-difference-list
809 (cons (cons meta-buffer (car ediff-dir-difference-list))
810 (cdr ediff-dir-difference-list)))
812 (or (ediff-one-filegroup-metajob jobname)
813 (ediff-draw-dir-diffs ediff-dir-difference-list))
815 ediff-meta-buffer-map "h" 'ediff-mark-for-hiding-at-pos)
816 (define-key ediff-meta-buffer-map "x" 'ediff-hide-marked-sessions)
818 ediff-meta-buffer-map "m" 'ediff-mark-for-operation-at-pos)
819 (define-key ediff-meta-buffer-map "u" nil)
821 ediff-meta-buffer-map "um" 'ediff-unmark-all-for-operation)
823 ediff-meta-buffer-map "uh" 'ediff-unmark-all-for-hiding)
824 (cond ((ediff-collect-diffs-metajob jobname)
826 ediff-meta-buffer-map "P" 'ediff-collect-custom-diffs))
827 ((ediff-patch-metajob jobname)
829 ediff-meta-buffer-map "P" 'ediff-meta-show-patch)))
830 (define-key ediff-meta-buffer-map "^" 'ediff-up-meta-hierarchy)
831 (define-key ediff-meta-buffer-map "D" 'ediff-show-dir-diffs)))
833 (if (eq ediff-metajob-name 'ediff-registry)
834 (run-hooks 'ediff-registry-setup-hook)
835 (run-hooks 'ediff-after-session-group-setup-hook))
841 ;; i.e., ediff is currently run in it), or - (finished session, i.e., we've ran
842 ;; ediff in it and then exited)
843 (defun ediff-insert-session-activity-marker-in-meta-buffer (session)
845 (cond ((ediff-get-session-activity-marker session))
853 (defun ediff-insert-session-status-in-meta-buffer (session)
855 (cond ((ediff-get-session-status session)) ; session has status: ?H, ?I, ?*
861 (defun ediff-replace-session-activity-marker-in-meta-buffer (point new-marker)
862 (let* ((overl (ediff-get-meta-overlay-at-pos point))
863 (session-info (ediff-overlay-get overl 'ediff-meta-info))
864 (activity-marker (ediff-get-session-activity-marker session-info))
867 (goto-char (ediff-overlay-start overl))
876 (defun ediff-replace-session-status-in-meta-buffer (point new-status)
877 (let* ((overl (ediff-get-meta-overlay-at-pos point))
878 (session-info (ediff-overlay-get overl 'ediff-meta-info))
879 (status (ediff-get-session-status session-info))
882 (goto-char (ediff-overlay-start overl))
891 (defun ediff-insert-session-info-in-meta-buffer (session-info sessionNum)
892 (let ((f1 (ediff-get-session-objA session-info))
893 (f2 (ediff-get-session-objB session-info))
894 (f3 (ediff-get-session-objC session-info))
896 (hidden (eq (ediff-get-session-status session-info) ?I)))
898 (ediff-insert-session-activity-marker-in-meta-buffer session-info)
900 (ediff-insert-session-status-in-meta-buffer session-info)
902 (ediff-meta-insert-file-info1 f1)
903 (ediff-meta-insert-file-info1 f2)
904 (ediff-meta-insert-file-info1 f3)
905 (ediff-set-meta-overlay pt (point) session-info sessionNum hidden)))
908 ;; this is a setup function for ediff-directories
910 (defun ediff-redraw-directory-group-buffer (meta-list)
912 (let ((meta-buf (ediff-get-group-buffer meta-list))
915 regexp elt merge-autostore-dir
917 (ediff-with-current-buffer meta-buf
922 (ediff-cond-compile-for-xemacs-or-emacs
927 (insert (format ediff-meta-buffer-message
928 (ediff-abbrev-jobname ediff-metajob-name)))
930 (setq regexp (ediff-get-group-regexp meta-list)
932 (ediff-get-group-merge-autostore-dir meta-list))
934 (cond ((ediff-collect-diffs-metajob)
937 ((ediff-patch-metajob)
942 (or (ediff-one-filegroup-metajob)
950 (if (and (stringp regexp) (> (length regexp) 0))
952 (format "*** Filter-through regular expression: %s\n" regexp)))
953 (ediff-insert-dirs-in-meta-buffer meta-list)
954 (if (and ediff-autostore-merges (ediff-merge-metajob)
955 (ediff-nonempty-string-p merge-autostore-dir))
965 ;; discard info on directories and regexp
970 (not (eq (ediff-get-session-status (car tmp-list)) ?I)))
985 (if (eq (ediff-get-session-status elt) ?I)
987 (ediff-insert-session-info-in-meta-buffer elt sessionNum)))
992 (defun ediff-update-markers-in-dir-meta-buffer (meta-list)
993 (let ((meta-buf (ediff-get-group-buffer meta-list))
995 (ediff-with-current-buffer meta-buf
998 (ediff-next-meta-item1)
1000 (setq session-info (ediff-get-meta-info meta-buf (point) 'no-error)
1001 overl (ediff-get-meta-overlay-at-pos (point)))
1004 (cond ((eq (ediff-get-session-status session-info) ?I)
1006 (if overl (ediff-overlay-put overl 'invisible t)))
1007 ((and (eq (ediff-get-session-status session-info) ?H)
1008 overl (ediff-overlay-get overl 'invisible))
1010 (ediff-overlay-put overl 'invisible nil))
1011 (t (ediff-replace-session-activity-marker-in-meta-buffer
1013 (ediff-get-session-activity-marker session-info))
1014 (ediff-replace-session-status-in-meta-buffer
1016 (ediff-get-session-status session-info))))))
1017 (ediff-next-meta-item1) ; advance to the next item
1023 (defun ediff-update-session-marker-in-dir-meta-buffer (session-num)
1026 (ediff-cond-compile-for-xemacs-or-emacs
1030 (ediff-overlay-get ext 'ediff-meta-info)
1031 (eq (ediff-overlay-get ext 'ediff-meta-session-number)
1045 (ediff-overlay-get overl 'ediff-meta-info)
1046 (eq (ediff-overlay-get
1047 overl 'ediff-meta-session-number)
1054 "Bug in ediff-update-session-marker-in-dir-meta-buffer: no overlay with given number %S"
1056 (setq session-info (ediff-overlay-get overl 'ediff-meta-info))
1057 (goto-char (ediff-overlay-start overl))
1058 (ediff-replace-session-activity-marker-in-meta-buffer
1060 (ediff-get-session-activity-marker session-info))
1061 (ediff-replace-session-status-in-meta-buffer
1063 (ediff-get-session-status session-info)))
1064 (ediff-next-meta-item1))
1073 (defun ediff-problematic-session-p (session)
1074 (let ((f1 (ediff-get-session-objA-name session))
1075 (f2 (ediff-get-session-objB-name session))
1076 (f3 (ediff-get-session-objC-name session)))
1081 (ediff-ancestor-metajob))
1086 (defun ediff-meta-insert-file-info1 (fileinfo)
1088 (feq (ediff-get-file-eqstatus fileinfo))
1089 (max-filename-width (if ediff-meta-truncate-filenames
1094 ((ediff-listable-file fname)
1097 (setq file-size (ediff-file-size fname)
1098 file-modtime (ediff-file-modtime fname))
1111 (t (ediff-format-date (decode-time file-modtime))))
1117 (ediff-truncate-string-left
1118 (ediff-abbreviate-file-name fname)
1121 (defconst ediff-months '((1 . "Jan") (2 . "Feb") (3 . "Mar") (4 . "Apr")
1127 (defsubst ediff-fill-leading-zero (num)
1133 (defun ediff-format-date (time)
1135 (cdr (assoc (nth 4 time) ediff-months)) ; month
1138 (ediff-fill-leading-zero (nth 2 time)) ; hour
1139 (ediff-fill-leading-zero (nth 1 time)) ; min
1140 (ediff-fill-leading-zero (nth 0 time)) ; sec
1144 (defun ediff-insert-dirs-in-meta-buffer (meta-list)
1145 (let* ((dir1 (ediff-abbreviate-file-name (ediff-get-group-objA meta-list)))
1146 (dir2 (ediff-get-group-objB meta-list))
1147 (dir2 (if (stringp dir2) (ediff-abbreviate-file-name dir2)))
1148 (dir3 (ediff-get-group-objC meta-list))
1149 (dir3 (if (stringp dir3) (ediff-abbreviate-file-name dir3))))
1155 (defun ediff-draw-dir-diffs (diff-list &optional buf-name)
1159 (ediff-unique-buffer-name "*Ediff File Group Differences" "*")))
1160 (let* ((regexp (ediff-get-group-regexp diff-list))
1161 (dir1 (ediff-abbreviate-file-name (ediff-get-group-objA diff-list)))
1162 (dir2 (ediff-abbreviate-file-name (ediff-get-group-objB diff-list)))
1163 (dir3 (ediff-get-group-objC diff-list))
1164 (dir3 (if (stringp dir3) (ediff-abbreviate-file-name dir3)))
1165 (meta-buf (ediff-get-group-buffer diff-list))
1171 (setq ediff-dir-diffs-buffer (get-buffer-create buf-name))
1172 (ediff-with-current-buffer ediff-dir-diffs-buffer
1174 (use-local-map ediff-dir-diffs-buffer-map)
1176 (setq ediff-meta-buffer meta-buf)
1181 q: hide this buffer
1188 (if (and (stringp regexp) (> (length regexp) 0))
1190 (format "*** Filter-through regular expression: %s\n" regexp)))
1208 (if (= (mod membership-code ediff-membership-code1) 0) ; dir1
1211 (ediff-truncate-string-left
1212 (ediff-abbreviate-file-name
1219 (ediff-set-meta-overlay
1223 (if (= (mod membership-code ediff-membership-code2) 0) ; dir2
1226 (ediff-truncate-string-left
1227 (ediff-abbreviate-file-name
1232 (ediff-set-meta-overlay
1237 (if (= (mod membership-code ediff-membership-code3) 0) ; dir3
1240 (ediff-truncate-string-left
1241 (ediff-abbreviate-file-name
1246 (ediff-set-meta-overlay
1256 (defun ediff-bury-dir-diffs-buffer ()
1259 ;; ediff-meta-buffer is set in ediff-draw-dir-diffs so the directory
1261 (let ((buf ediff-meta-buffer)
1263 (ediff-kill-buffer-carefully ediff-dir-diffs-buffer)
1264 (if (setq wind (ediff-get-visible-buffer-window buf))
1270 (defun ediff-show-dir-diffs ()
1273 (if (ediff-one-filegroup-metajob)
1275 (or (ediff-buffer-live-p ediff-dir-diffs-buffer)
1276 (ediff-draw-dir-diffs ediff-dir-difference-list))
1277 (let ((buf ediff-dir-diffs-buffer))
1284 (defun ediff-dir-diff-copy-file ()
1287 (let* ((pos (ediff-event-point last-command-event))
1288 (info (ediff-get-meta-info (current-buffer) pos 'noerror))
1302 (ediff-with-current-buffer meta-buf
1303 (setq meta-list ediff-meta-list
1304 dir-diff-list ediff-dir-difference-list))
1307 ;; ediff-dir-difference-list and redisplay
1321 (ediff-draw-dir-diffs dir-diff-list (buffer-name))
1325 (if (or (= new-mem-code ediff-product-of-memcodes)
1326 (and (> new-mem-code ediff-membership-code3)
1332 ;; dir1/2/3. See ediff-intersect-directories.
1338 ;; update ediff-meta-list by direct modification
1340 (list (ediff-make-new-meta-list-element
1346 (ediff-update-meta-buffer meta-buf 'must-redraw)
1349 (defun ediff-up-meta-hierarchy ()
1352 (if (ediff-buffer-live-p ediff-parent-meta-buffer)
1353 (ediff-show-meta-buffer
1354 ediff-parent-meta-buffer ediff-meta-session-number)
1359 (defun ediff-redraw-registry-buffer (&optional ignore)
1360 (ediff-with-current-buffer ediff-registry-buffer
1367 (ediff-cond-compile-for-xemacs-or-emacs
1390 (if (not (ediff-buffer-live-p elt))
1391 (setq ediff-session-registry
1392 (delq elt ediff-session-registry))))
1393 ediff-session-registry)
1395 (if (null ediff-session-registry)
1398 (setq registry-list ediff-session-registry)
1403 (if (ediff-buffer-live-p elt)
1404 (if (ediff-with-current-buffer elt
1405 (setq job-name ediff-metajob-name
1406 meta-list ediff-meta-list)
1407 (and ediff-metajob-name
1408 (not (eq ediff-metajob-name 'ediff-registry))))
1413 (ediff-abbrev-jobname job-name)))
1415 (ediff-abbreviate-file-name
1416 (ediff-get-group-objA meta-list))
1417 (ediff-abbreviate-file-name
1419 (ediff-get-group-objB meta-list))
1420 (ediff-get-group-objB meta-list)
1422 (ediff-abbreviate-file-name
1424 (ediff-get-group-objC meta-list))
1425 (ediff-get-group-objC meta-list)
1427 (ediff-set-meta-overlay pt (point) elt))
1429 (ediff-with-current-buffer elt
1430 (setq bufAname (if (ediff-buffer-live-p ediff-buffer-A)
1431 (buffer-name ediff-buffer-A)
1433 bufBname (if (ediff-buffer-live-p ediff-buffer-B)
1434 (buffer-name ediff-buffer-B)
1436 bufCname (cond ((not (ediff-3way-job))
1438 ((ediff-buffer-live-p ediff-buffer-C)
1439 (buffer-name ediff-buffer-C))
1441 (setq total-diffs (format "%-4d" ediff-number-of-differences)
1443 (cond ((= ediff-current-difference -1) " _")
1444 ((= ediff-current-difference
1445 ediff-number-of-differences)
1448 "%4d" (1+ ediff-current-difference))))
1449 job-name ediff-job-name))
1454 (format ": %s" (ediff-abbrev-jobname job-name)))
1457 (ediff-set-meta-overlay pt (point) elt))))
1463 ;; Sets overlay around a meta record with 'ediff-meta-info property PROP
1465 ;; ediff-meta-session-number
1469 (defun ediff-set-meta-overlay (b e prop &optional session-number hidden)
1471 (setq overl (ediff-make-overlay b e))
1472 (if ediff-emacs-p
1473 (ediff-overlay-put overl 'mouse-face 'highlight)
1474 (ediff-overlay-put overl 'highlight t))
1475 (ediff-overlay-put overl 'ediff-meta-info prop)
1476 (ediff-overlay-put overl 'invisible hidden)
1477 (ediff-overlay-put overl 'follow-link t)
1479 (ediff-overlay-put overl 'ediff-meta-session-number session-number))))
1481 (defun ediff-mark-for-hiding-at-pos (unmark)
1484 (let* ((pos (ediff-event-point last-command-event))
1485 (meta-buf (ediff-event-buffer last-command-event))
1486 ;; ediff-get-meta-info gives error if meta-buf or pos are invalid
1487 (info (ediff-get-meta-info meta-buf pos))
1488 (session-number (ediff-get-session-number-at-pos pos)))
1489 (ediff-mark-session-for-hiding info unmark)
1490 (ediff-next-meta-item 1)
1492 (ediff-update-meta-buffer meta-buf nil session-number))
1496 (defun ediff-mark-session-for-hiding (info unmark)
1497 (let ((session-buf (ediff-get-session-buffer info))
1500 ((eq (ediff-get-session-status info) ?H) (setq unmark t))
1504 (unmark (ediff-set-session-status info nil))
1505 ;;; (if (ediff-buffer-live-p session-buf)
1506 ;;; (error "Can't hide active session, %s" (buffer-name session-buf)))
1507 (t (ediff-set-session-status info ?H))))
1511 (defun ediff-mark-for-operation-at-pos (unmark)
1514 (let* ((pos (ediff-event-point last-command-event))
1515 (meta-buf (ediff-event-buffer last-command-event))
1516 ;; ediff-get-meta-info gives error if meta-buf or pos are invalid
1517 (info (ediff-get-meta-info meta-buf pos))
1518 (session-number (ediff-get-session-number-at-pos pos)))
1519 (ediff-mark-session-for-operation info unmark)
1520 (ediff-next-meta-item 1)
1522 (ediff-update-meta-buffer meta-buf nil session-number))
1528 (defun ediff-mark-session-for-operation (info unmark)
1531 ((eq (ediff-get-session-status info) ?*) (setq unmark t))
1535 (unmark (ediff-set-session-status info nil))
1536 (t (ediff-set-session-status info ?*))))
1540 (defun ediff-hide-marked-sessions (unhide)
1543 (let ((grp-buf (ediff-get-group-buffer ediff-meta-list))
1544 (meta-list (cdr ediff-meta-list))
1552 session-buf (ediff-get-session-buffer elt))
1554 (if (eq (ediff-get-session-status elt) from)
1558 ;; shouldn't hide active sessions
1560 (ediff-set-session-status elt to)))))
1562 (ediff-update-meta-buffer grp-buf 'must-redraw)
1566 (message "Nothing to hide...")))
1568 (message "Note: Ediff didn't hide active sessions!"))
1574 (defun ediff-operate-on-marked-sessions (operation)
1575 (let ((grp-buf (ediff-get-group-buffer ediff-meta-list))
1576 (meta-list (cdr ediff-meta-list))
1580 (diff-buffer ediff-meta-diff-buffer)
1586 (cond ((eq (ediff-get-session-status elt) marksym)
1592 ((and (ediff-meta-session-p elt)
1593 (ediff-buffer-live-p
1594 (setq session-buf (ediff-get-session-buffer elt))))
1597 (ediff-with-current-buffer session-buf
1599 (setq ediff-meta-diff-buffer diff-buffer)
1601 (ediff-operate-on-marked-sessions operation)))))))
1602 (ediff-update-meta-buffer grp-buf 'must-redraw) ; just in case
1606 (defun ediff-append-custom-diff (session sessionNum)
1607 (or (ediff-collect-diffs-metajob)
1609 (let ((session-buf (ediff-get-session-buffer session))
1610 (meta-diff-buff ediff-meta-diff-buffer)
1611 (metajob ediff-metajob-name)
1613 (if (ediff-buffer-live-p session-buf)
1614 (ediff-with-current-buffer session-buf
1615 (if (eq ediff-control-buffer session-buf) ; individual session
1617 (ediff-compute-custom-diffs-maybe)
1618 (setq custom-diff-buf ediff-custom-diff-buffer)))))
1620 (or (ediff-buffer-live-p meta-diff-buff)
1623 (cond ((ediff-buffer-live-p custom-diff-buf)
1631 ;; if ediff session is not live, run diff directly on the files
1632 ((memq metajob '(ediff-directories
1633 ediff-merge-directories
1634 ediff-merge-directories-with-ancestor))
1635 ;; get diffs by calling shell command on ediff-custom-diff-program
1637 (set-buffer (setq tmp-buf (get-buffer-create ediff-tmp-buffer)))
1642 (shell-quote-argument ediff-custom-diff-program)
1643 ediff-custom-diff-options
1644 (shell-quote-argument (ediff-get-session-objA-name session))
1645 (shell-quote-argument (ediff-get-session-objB-name session))
1655 (ediff-kill-buffer-carefully meta-diff-buff)
1659 (defun ediff-collect-custom-diffs ()
1661 This operation is defined only for `ediff-directories' and
1662 `ediff-directory-revisions', since its intent is to produce
1663 multifile patches. For `ediff-directory-revisions', we insist that
1666 (let ((coding-system-for-read ediff-coding-system-for-read))
1667 (or (ediff-buffer-live-p ediff-meta-diff-buffer)
1668 (setq ediff-meta-diff-buffer
1670 (ediff-unique-buffer-name "*Ediff Multifile Diffs" "*"))))
1671 (ediff-with-current-buffer ediff-meta-diff-buffer
1674 (if (> (ediff-operate-on-marked-sessions 'ediff-append-custom-diff) 0)
1677 (display-buffer ediff-meta-diff-buffer 'not-this-window)
1678 (ediff-with-current-buffer ediff-meta-diff-buffer
1682 (with-current-buffer ediff-meta-diff-buffer
1687 (defun ediff-meta-show-patch ()
1690 (let* ((pos (ediff-event-point last-command-event))
1691 (meta-buf (ediff-event-buffer last-command-event))
1692 (info (ediff-get-meta-info meta-buf pos 'noerror))
1693 (patchbuffer ediff-meta-patchbufer))
1694 (if (ediff-buffer-live-p patchbuffer)
1695 (ediff-with-current-buffer patchbuffer
1700 (ediff-get-session-objB-name info)
1701 (ediff-get-session-objC-name info)))
1702 (set-buffer (get-buffer-create ediff-tmp-buffer))
1706 (display-buffer ediff-tmp-buffer 'not-this-window)
1712 (defun ediff-filegroup-action ()
1715 (let* ((pos (ediff-event-point last-command-event))
1716 (meta-buf (ediff-event-buffer last-command-event))
1717 ;; ediff-get-meta-info gives error if meta-buf or pos are invalid
1718 (info (ediff-get-meta-info meta-buf pos))
1719 (session-buf (ediff-get-session-buffer info))
1720 (session-number (ediff-get-session-number-at-pos pos meta-buf))
1721 (default-regexp (eval ediff-default-filtering-regexp))
1722 merge-autostore-dir file1 file2 file3 regexp)
1724 (setq file1 (ediff-get-session-objA-name info)
1725 file2 (ediff-get-session-objB-name info)
1726 file3 (ediff-get-session-objC-name info))
1730 (if (memq (ediff-get-session-status info) '(?I))
1735 (ediff-set-session-status info nil)
1736 (ediff-update-meta-buffer meta-buf nil session-number))
1739 (ediff-with-current-buffer meta-buf
1741 (ediff-get-group-merge-autostore-dir ediff-meta-list))
1746 (cond ((ediff-meta-session-p info)
1747 ;; do ediff/ediff-merge on subdirectories
1748 (if (ediff-buffer-live-p session-buf)
1749 (ediff-show-meta-buffer session-buf)
1750 (setq regexp
1752 (if (stringp default-regexp)
1755 default-regexp)
1758 'ediff-filtering-regexp-history
1759 (eval ediff-default-filtering-regexp)))
1760 (ediff-directories-internal
1761 file1 file2 file3 regexp
1762 ediff-session-action-function
1763 ediff-metajob-name
1767 (setq ediff-parent-meta-buffer
1768 (quote ,ediff-meta-buffer)
1769 ediff-meta-session-number
1772 (setcar (quote ,info) ediff-meta-buffer))))))
1774 ;; Do ediff-revision on a subdirectory
1775 ((and (ediff-one-filegroup-metajob)
1776 (ediff-revision-metajob)
1778 (if (ediff-buffer-live-p session-buf)
1779 (ediff-show-meta-buffer session-buf)
1780 (setq regexp (read-string "Filter through regular expression: "
1781 nil 'ediff-filtering-regexp-history))
1782 (ediff-directory-revisions-internal
1783 file1 regexp
1784 ediff-session-action-function ediff-metajob-name
1789 (setq ediff-parent-meta-buffer
1790 (quote ,ediff-meta-buffer)
1791 ediff-meta-session-number
1794 (setcar (quote ,info) ediff-meta-buffer))))))
1799 ((ediff-buffer-live-p session-buf)
1800 (ediff-with-current-buffer session-buf
1801 (setq ediff-mouse-pixel-position (mouse-pixel-position))
1802 (ediff-recenter 'no-rehighlight)))
1804 ((ediff-problematic-session-p info)
1808 (ediff-merge-files
1813 'ediff-after-quit-hook-internal
1815 (if (ediff-buffer-live-p ,(current-buffer))
1816 (ediff-show-meta-buffer
1819 (setq ediff-meta-buffer ,(current-buffer)
1820 ediff-meta-session-number
1822 (setq ediff-merge-store-file
1823 ,(if (ediff-nonempty-string-p
1827 ediff-merge-filename-prefix
1830 ;; make ediff-startup pass
1831 ;; ediff-control-buffer back to the meta
1834 (quote ,info) ediff-control-buffer))))
1836 ((ediff-one-filegroup-metajob) ; needs 1 file arg
1837 (funcall ediff-session-action-function
1842 'ediff-after-quit-hook-internal
1844 (if (ediff-buffer-live-p
1846 (ediff-show-meta-buffer
1850 (setq ediff-meta-buffer ,(current-buffer)
1851 ediff-meta-session-number
1853 (setq ediff-merge-store-file
1854 ,(if (ediff-nonempty-string-p
1858 ediff-merge-filename-prefix
1860 ;; make ediff-startup pass
1861 ;; ediff-control-buffer back to the meta
1864 (quote ,info) ediff-control-buffer)))))
1865 ((not (ediff-metajob3)) ; need 2 file args
1866 (funcall ediff-session-action-function
1871 'ediff-after-quit-hook-internal
1873 (if (ediff-buffer-live-p
1875 (ediff-show-meta-buffer
1879 (setq ediff-meta-buffer ,(current-buffer)
1880 ediff-meta-session-number
1882 (setq ediff-merge-store-file
1883 ,(if (ediff-nonempty-string-p
1887 ediff-merge-filename-prefix
1889 ;; make ediff-startup pass
1890 ;; ediff-control-buffer back to the meta
1893 (quote ,info) ediff-control-buffer)))))
1894 ((ediff-metajob3) ; need 3 file args
1895 (funcall ediff-session-action-function
1900 'ediff-after-quit-hook-internal
1902 (if (ediff-buffer-live-p
1904 (ediff-show-meta-buffer
1908 (setq ediff-merge-store-file
1909 ,(if (ediff-nonempty-string-p
1913 ediff-merge-filename-prefix
1915 (setq ediff-meta-buffer , (current-buffer)
1916 ediff-meta-session-number
1918 ;; this arranges that ediff-startup will pass
1919 ;; the value of ediff-control-buffer back to
1923 ;; ediff-control-buffer
1925 (quote ,info) ediff-control-buffer)))))
1930 (defun ediff-registry-action ()
1933 (let* ((pos (ediff-event-point last-command-event))
1934 (buf (ediff-event-buffer last-command-event))
1935 (ctl-buf (ediff-get-meta-info buf pos)))
1937 (if (ediff-buffer-live-p ctl-buf)
1938 ;; check if this is ediff-control-buffer or ediff-meta-buffer
1939 (if (ediff-with-current-buffer ctl-buf
1940 (eq (key-binding "q") 'ediff-quit-meta-buffer))
1942 (ediff-show-meta-buffer ctl-buf t)
1944 (ediff-with-current-buffer ctl-buf
1945 (setq ediff-mouse-pixel-position (mouse-pixel-position))
1946 (ediff-recenter 'no-rehighlight)))
1949 (ediff-update-registry))
1950 (ediff-with-current-buffer buf
1956 (defun ediff-show-meta-buffer (&optional meta-buf session-number)
1959 (run-hooks 'ediff-before-directory-setup-hooks)
1963 (setq meta-buf (or meta-buf ediff-meta-buffer))
1966 ((not (ediff-buffer-live-p meta-buf))
1971 (ediff-update-meta-buffer meta-buf nil session-number))
1974 (t (ediff-cleanup-meta-buffer meta-buf)))
1976 (ediff-with-current-buffer meta-buf
1978 (cond ((setq wind (ediff-get-visible-buffer-window meta-buf))
1984 ((window-live-p (setq wind ediff-window-C)) ;in merge--merge buf
1985 (set-window-buffer ediff-window-C meta-buf)
1987 ((window-live-p (setq wind ediff-window-A))
1988 (set-window-buffer ediff-window-A meta-buf)
1990 ((window-live-p (setq wind ediff-window-B))
1991 (set-window-buffer ediff-window-B meta-buf)
1995 (ediff-get-visible-buffer-window ediff-registry-buffer))
1996 (ediff-window-display-p))
2000 (t (ediff-skip-unsuitable-frames 'ok-unsplittable)
2003 (if (and (ediff-window-display-p)
2005 (setq wind (ediff-get-visible-buffer-window meta-buf))))
2009 (ediff-reset-mouse frame)))
2012 (run-hooks 'ediff-show-session-group-hook)
2015 (defun ediff-show-current-session-meta-buffer ()
2017 (ediff-show-meta-buffer nil ediff-meta-session-number))
2019 (defun ediff-show-meta-buff-from-registry ()
2022 (let* ((pos (ediff-event-point last-command-event))
2023 (meta-buf (ediff-event-buffer last-command-event))
2024 (info (ediff-get-meta-info meta-buf pos))
2026 (ediff-with-current-buffer meta-or-session-buf
2027 (ediff-show-meta-buffer nil t))))
2030 (defun ediff-show-registry ()
2033 (ediff-update-registry)
2034 (if (not (ediff-buffer-live-p ediff-registry-buffer))
2037 ;; for some reason, point moves in ediff-registry-buffer, so we preserve it
2039 (ediff-with-current-buffer ediff-registry-buffer
2042 (ediff-get-visible-buffer-window ediff-registry-buffer))
2044 (set-window-buffer wind ediff-registry-buffer)
2046 ((window-live-p ediff-window-C)
2047 (set-window-buffer ediff-window-C ediff-registry-buffer)
2048 (select-window ediff-window-C))
2049 ((window-live-p ediff-window-A)
2050 (set-window-buffer ediff-window-A ediff-registry-buffer)
2051 (select-window ediff-window-A))
2052 ((window-live-p ediff-window-B)
2053 (set-window-buffer ediff-window-B ediff-registry-buffer)
2054 (select-window ediff-window-B))
2056 (ediff-get-visible-buffer-window ediff-meta-buffer))
2057 (ediff-window-display-p))
2060 (set-window-buffer (selected-window) ediff-registry-buffer))
2061 (t (ediff-skip-unsuitable-frames 'ok-unsplittable)
2062 (set-window-buffer (selected-window) ediff-registry-buffer)))
2064 (if (ediff-window-display-p)
2068 (ediff-get-visible-buffer-window ediff-registry-buffer)))
2070 (ediff-reset-mouse frame)))
2071 (run-hooks 'ediff-show-registry-hook)
2075 (defalias 'eregistry 'ediff-show-registry)
2084 (defun ediff-update-meta-buffer (meta-buf &optional must-redraw session-number)
2085 (if (ediff-buffer-live-p meta-buf)
2086 (ediff-with-current-buffer meta-buf
2089 (funcall ediff-meta-redraw-function ediff-meta-list))
2091 (ediff-update-session-marker-in-dir-meta-buffer
2094 (ediff-update-markers-in-dir-meta-buffer ediff-meta-list)))
2095 (setq overl (ediff-get-meta-overlay-at-pos (point)))
2097 (while (and overl (ediff-overlay-get overl 'invisible))
2098 (ediff-next-meta-item1)
2099 (setq overl (ediff-get-meta-overlay-at-pos (point))))
2102 (defun ediff-update-registry ()
2103 (ediff-with-current-buffer (current-buffer)
2104 (if (ediff-buffer-live-p ediff-registry-buffer)
2105 (ediff-redraw-registry-buffer)
2106 (ediff-prepare-meta-buffer
2107 'ediff-registry-action
2108 ediff-session-registry
2110 'ediff-redraw-registry-buffer
2111 'ediff-registry))
2116 (defun ediff-cleanup-meta-buffer (meta-buffer)
2117 (if (ediff-buffer-live-p meta-buffer)
2118 (ediff-with-current-buffer meta-buffer
2119 (ediff-update-meta-buffer meta-buffer)
2120 (if (ediff-buffer-live-p ediff-parent-meta-buffer)
2121 (ediff-update-meta-buffer
2122 ediff-parent-meta-buffer nil ediff-meta-session-number)))))
2125 (defun ediff-safe-to-quit (meta-buffer)
2126 (if (ediff-buffer-live-p meta-buffer)
2127 (let ((lis ediff-meta-list)
2130 ;;(ediff-update-meta-buffer meta-buffer)
2131 (ediff-with-current-buffer meta-buffer
2134 (if (ediff-buffer-live-p
2135 (ediff-get-group-buffer lis)) ; in progress
2140 (defun ediff-quit-meta-buffer ()
2147 (dir-diffs-buffer ediff-dir-diffs-buffer)
2148 (meta-diff-buffer ediff-meta-diff-buffer)
2149 (session-number ediff-meta-session-number)
2150 (parent-buf ediff-parent-meta-buffer)
2151 (dont-show-registry (eq buf ediff-registry-buffer)))
2154 ;;(ediff-cleanup-meta-buffer buf)
2155 (cond ((and (ediff-safe-to-quit buf)
2157 (run-hooks 'ediff-quit-session-group-hook)
2159 (ediff-dispose-of-meta-buffer buf))
2160 ((ediff-safe-to-quit buf)
2165 (ediff-update-meta-buffer parent-buf nil session-number)
2166 (ediff-kill-buffer-carefully dir-diffs-buffer)
2167 (ediff-kill-buffer-carefully meta-diff-buffer)
2168 (if (ediff-buffer-live-p parent-buf)
2171 (ediff-show-meta-buffer parent-buf session-number)))
2174 (ediff-show-registry))))
2176 (defun ediff-dispose-of-meta-buffer (buf)
2177 (setq ediff-session-registry (delq buf ediff-session-registry))
2178 (ediff-with-current-buffer buf
2179 (if (ediff-buffer-live-p ediff-dir-diffs-buffer)
2180 (kill-buffer ediff-dir-diffs-buffer)))
2188 (defun ediff-get-meta-info (buf point &optional noerror)
2190 (if (and point (ediff-buffer-live-p buf))
2191 (ediff-with-current-buffer buf
2192 (ediff-cond-compile-for-xemacs-or-emacs
2194 (if (setq tmp (extent-at point buf 'ediff-meta-info))
2195 (ediff-overlay-get tmp 'ediff-meta-info)))
2201 (overlay-get elt 'ediff-meta-info)))
2212 (ediff-update-registry)
2216 (defun ediff-get-meta-overlay-at-pos (point)
2217 (ediff-cond-compile-for-xemacs-or-emacs
2218 (extent-at point (current-buffer) 'ediff-meta-info) ; xemacs
2222 (while (and overl (null (overlay-get overl 'ediff-meta-info)))
2229 (defsubst ediff-get-session-number-at-pos (point &optional meta-buffer)
2230 (setq meta-buffer (if (ediff-buffer-live-p meta-buffer)
2233 (ediff-with-current-buffer meta-buffer
2234 (ediff-overlay-get
2235 (ediff-get-meta-overlay-at-pos point) 'ediff-meta-session-number)))
2239 (defun ediff-next-meta-overlay-start (point)
2242 (let ((overl (ediff-get-meta-overlay-at-pos point)))
2243 (ediff-cond-compile-for-xemacs-or-emacs
2261 (defun ediff-previous-meta-overlay-start (point)
2264 (let ((overl (ediff-get-meta-overlay-at-pos point)))
2265 (ediff-cond-compile-for-xemacs-or-emacs
2292 (defun ediff-patch-file-form-meta (file &optional startup-hooks)
2293 (let* ((pos (ediff-event-point last-command-event))
2294 (meta-buf (ediff-event-buffer last-command-event))
2295 ;; ediff-get-meta-info gives error if meta-buf or pos are invalid
2296 (info (ediff-get-meta-info meta-buf pos))
2297 (meta-patchbuf ediff-meta-patchbufer)
2302 (setq session-buf (ediff-get-session-buffer info)
2303 beg-marker (ediff-get-session-objB-name info)
2304 end-marker (ediff-get-session-objC-name info))
2306 (or (ediff-buffer-live-p session-buf) ; either an active patch session
2311 (ediff-with-current-buffer meta-patchbuf
2315 (ediff-patch-file-internal meta-patchbuf file startup-hooks)))))
2318 (defun ediff-unmark-all-for-operation ()
2321 (let ((list (cdr ediff-meta-list))
2324 (ediff-mark-session-for-operation elt 'unmark)
2326 (ediff-update-meta-buffer (current-buffer) 'must-redraw))
2328 (defun ediff-unmark-all-for-hiding ()
2331 (let ((list (cdr ediff-meta-list))
2334 (ediff-mark-session-for-hiding elt 'unmark)
2336 (ediff-update-meta-buffer (current-buffer) 'must-redraw))
2341 (defun ediff-meta-mark-equal-files (&optional action)
2350 (let ((list (cdr ediff-meta-list))
2355 (setq fileinfo1 (ediff-get-session-objA elt)
2356 fileinfo2 (ediff-get-session-objB elt)
2357 fileinfo3 (ediff-get-session-objC elt))
2358 (ediff-set-file-eqstatus fileinfo1 nil)
2359 (ediff-set-file-eqstatus fileinfo2 nil)
2360 (ediff-set-file-eqstatus fileinfo3 nil)
2365 (or (ediff-mark-if-equal fileinfo1 fileinfo2)
2367 (if (ediff-metajob3)
2369 (or (ediff-mark-if-equal fileinfo1 fileinfo3)
2371 (or (ediff-mark-if-equal fileinfo2 fileinfo3)
2375 (ediff-mark-session-for-hiding elt 'mark))
2377 (ediff-mark-session-for-operation elt 'mark))
2381 (setq ediff-recurse-to-subdirectories nil)
2382 (ediff-update-meta-buffer (current-buffer) 'must-redraw))
2386 (defun ediff-mark-if-equal (fileinfo1 fileinfo2)
2389 (if (and (stringp f1) (stringp f2) (ediff-same-contents f1 f2))
2391 (ediff-set-file-eqstatus fileinfo1 t)
2392 (ediff-set-file-eqstatus fileinfo2 t)
2397 (provide 'ediff-mult)
2401 ;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
2402 ;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)
2403 ;;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body))
2407 ;;; ediff-mult.el ends here