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,mouse-2: 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
  ))