]> code.delx.au - gnu-emacs-elpa/commitdiff
diff-hl-dired: Highlight ignored files
authorDmitry Gutov <dgutov@yandex.ru>
Mon, 29 Sep 2014 01:04:37 +0000 (05:04 +0400)
committerDmitry Gutov <dgutov@yandex.ru>
Mon, 29 Sep 2014 01:04:37 +0000 (05:04 +0400)
#25

diff-hl-dired.el
diff-hl.el

index 928bb9c4f24ba5952b6d2f4c694634459c5b7ba9..2bbf12bedb08a9970b24d2b98dbc67254d1c81cf 100644 (file)
   '((default :inherit diff-header))
   "Face used to highlight unregistered files.")
 
+(defface diff-hl-dired-ignored
+  '((default :inherit shadow))
+  "Face used to highlight unregistered files.")
+
 ;;;###autoload
 (define-minor-mode diff-hl-dired-mode
   "Toggle VC diff highlighting on the side of a Dired window."
@@ -79,7 +83,7 @@
         (erase-buffer)
         (vc-call-backend
          backend 'dir-status def-dir
-         (lambda (entries &optional _more-to-come)
+         (lambda (entries &optional more-to-come)
            (with-current-buffer buffer
              (dolist (entry entries)
                (cl-destructuring-bind (file state &rest) entry
                                (push (cons dir type) dirs-alist)
                              (setcdr (assoc dir dirs-alist) 'change))))
                      (push (cons file type) files-alist)))))
-             ;; Process's finished, time to use the results.
-             (unless (get-buffer-process diff-hl-dired-process-buffer)
+             (unless more-to-come
                (diff-hl-dired-highlight-items (append dirs-alist
-                                                      files-alist)))))
+                                                      files-alist))
+               (diff-hl-dired-update-ignores backend def-dir))))
          )))))
 
+(defun diff-hl-dired-update-ignores (backend def-dir)
+  (let ((buffer (current-buffer))
+        entries-alist)
+    (with-current-buffer diff-hl-dired-process-buffer
+      (erase-buffer)
+      (vc-call-backend
+       backend 'dir-status-files def-dir
+       (cl-loop for file in (directory-files def-dir)
+                unless (member file '("." ".."))
+                collect file)
+       nil
+       (lambda (entries &optional more-to-come)
+         (with-current-buffer buffer
+           (dolist (entry entries)
+             (cl-destructuring-bind (file state &rest) entry
+               (when (eq state 'ignored)
+                 (push (cons (directory-file-name file)
+                             'ignored) entries-alist))))
+           (unless more-to-come
+             (diff-hl-dired-highlight-items entries-alist))))
+       ))))
+
 (defun diff-hl-dired-highlight-items (alist)
   "Highlight ALIST containing (FILE . TYPE) elements."
   (dolist (pair alist)
index 258e48ace198882e4da11cb850dfb85632b92924..2488f4d1b77d260c2a3a990e9421013d4f09b4ef 100644 (file)
   (cl-case type\r
     (unknown 'question-mark)\r
     (change 'exclamation-mark)\r
+    (ignored 'filled-square)\r
     (t (intern (format "diff-hl-bmp-%s" type)))))\r
 \r
 (defvar vc-svn-diff-switches)\r