multiple updates:
[emacs-init.git] / setup / dired.el
1 (require 'dired-x)
2
3 (defvar dired-omit-regexp-orig (symbol-function 'dired-omit-regexp))
4
5 (defun dired-omit-regexp ()
6   (let ((file (expand-file-name ".git"))
7         parent-dir)
8     (while (and (not (file-exists-p file))
9                 (progn
10                   (setq parent-dir
11                         (file-name-directory
12                          (directory-file-name
13                           (file-name-directory file))))
14                   ;; Give up if we are already at the root dir.
15                   (not (string= (file-name-directory file)
16                                 parent-dir))))
17       ;; Move up to the parent dir and try again.
18       (setq file (expand-file-name ".git" parent-dir)))
19     ;; If we found a change log in a parent, use that.
20     (if (file-exists-p file)
21         (let ((regexp (funcall dired-omit-regexp-orig)))
22           (assert (stringp regexp))
23           (concat
24            regexp
25            (if (> (length regexp) 0)
26                "\\|" "")
27            "\\("
28                (mapconcat
29                 #'(lambda (str)
30                     (concat "^"
31                              (regexp-quote
32                               (substring str 13
33                                          (if (= ?/ (aref str (1- (length str))))
34                                              (1- (length str))
35                                            nil)))
36                              "$"))
37                   (split-string (shell-command-to-string
38                                  "git clean -d -x -n")
39                                 "\n" t)
40                   "\\|")
41                "\\)"))
42       (funcall dired-omit-regexp-orig))))