Function: ediff-draw-dir-diffs
ediff-draw-dir-diffs is a byte-compiled function defined in
ediff-mult.el.gz.
Signature
(ediff-draw-dir-diffs DIFF-LIST &optional BUF-NAME)
Source Code
;; Defined in /usr/src/emacs/lisp/vc/ediff-mult.el.gz
(defun ediff-draw-dir-diffs (diff-list &optional buf-name)
(if (null diff-list) (user-error "Lost difference info on these directories"))
(setq buf-name
(or buf-name
(ediff-unique-buffer-name "*Ediff File Group Differences" "*")))
(let* ((regexp (ediff-get-group-regexp diff-list))
(dir1 (ediff-abbreviate-file-name (ediff-get-group-objA diff-list)))
(dir2 (ediff-abbreviate-file-name (ediff-get-group-objB diff-list)))
(dir3 (ediff-get-group-objC diff-list))
(dir3 (if (stringp dir3) (ediff-abbreviate-file-name dir3)))
(meta-buf (ediff-get-group-buffer diff-list))
(underline (make-string 26 ?-))
file membership-code saved-point
buffer-read-only)
;; skip the directory part
(setq diff-list (cdr diff-list))
(setq ediff-dir-diffs-buffer (get-buffer-create buf-name))
(ediff-with-current-buffer ediff-dir-diffs-buffer
(setq saved-point (point))
(use-local-map ediff-dir-diffs-buffer-map)
(erase-buffer)
(setq ediff-meta-buffer meta-buf)
(insert "\t\t*** Directory Differences ***\n")
(insert "
Useful commands:
C,button2: over file name -- copy this file to directory that doesn't have it
q: hide this buffer
n,SPC: next line
p,DEL: previous line\n\n")
(insert (format "\n*** Directory A: %s\n" dir1))
(if dir2 (insert (format "*** Directory B: %s\n" dir2)))
(if dir3 (insert (format "*** Directory C: %s\n" dir3)))
(if (and (stringp regexp) (> (length regexp) 0))
(insert
(format "*** Filter-through regular expression: %s\n" regexp)))
(insert "\n")
(insert (format "\n%-27s%-26s" "Directory A" "Directory B"))
(if dir3
(insert (format " %-25s\n" "Directory C"))
(insert "\n"))
(insert (format "%s%s" underline underline))
(if (stringp dir3)
(insert (format "%s\n\n" underline))
(insert "\n\n"))
(if (null diff-list)
(insert "\n\t*** No differences ***\n"))
(while diff-list
(setq file (car (car diff-list))
membership-code (cdr (car diff-list))
diff-list (cdr diff-list))
(if (= (mod membership-code ediff-membership-code1) 0) ; dir1
(let ((beg (point)))
(insert (format "%-27s"
(string-truncate-left
(ediff-abbreviate-file-name
(if (file-directory-p (concat dir1 file))
(file-name-as-directory file)
file))
24)))
;; format of meta info in the dir-diff-buffer:
;; (filename-tail filename-full otherdir1 otherdir2 otherdir3)
(ediff-set-meta-overlay
beg (point)
(list meta-buf file (concat dir1 file) dir1 dir2 dir3)))
(insert (format "%-27s" "---")))
(if (= (mod membership-code ediff-membership-code2) 0) ; dir2
(let ((beg (point)))
(insert (format "%-26s"
(string-truncate-left
(ediff-abbreviate-file-name
(if (file-directory-p (concat dir2 file))
(file-name-as-directory file)
file))
24)))
(ediff-set-meta-overlay
beg (point)
(list meta-buf file (concat dir2 file) dir1 dir2 dir3)))
(insert (format "%-26s" "---")))
(if (stringp dir3)
(if (= (mod membership-code ediff-membership-code3) 0) ; dir3
(let ((beg (point)))
(insert (format " %-25s"
(string-truncate-left
(ediff-abbreviate-file-name
(if (file-directory-p (concat dir3 file))
(file-name-as-directory file)
file))
24)))
(ediff-set-meta-overlay
beg (point)
(list meta-buf file (concat dir3 file) dir1 dir2 dir3)))
(insert (format " %-25s" "---"))))
(insert "\n"))
(setq buffer-read-only t)
(set-buffer-modified-p nil)
(goto-char saved-point)) ; end eval in diff buffer
))