Search code examples
emacsdired

How to get Dired to ignore files with specific extensions


I put the following in my .emacs file:

(require 'dired-x)
(add-hook 'dired-load-hook '(lambda () (require 'dired-x)))
(setq dired-omit-files-p t)
(setq dired-omit-files
(concat dired-omit-files "\\|^\\..+$\\|-t\\.tex$\\|-t\\.pdf$"))

But C-x d still shows me .pdf and .tex files. Did I get the syntax wrong in that last line?

Bonus question: Is there a way to get Dired to hide hidden directories, like .git folders?


Solution

  • Your regexp will match *-t.tex files, not *.tex ones.

    With recent version of Emacs, it should be sufficient to add the following section to ~/.emacs to filter what you want:

    (require 'dired-x)
    (setq-default dired-omit-files-p t) ; this is buffer-local variable
    (setq dired-omit-files
        (concat dired-omit-files "\\|^\\..+$\\|\\.pdf$\\|\\.tex$"))
    

    Update: by default, dired-omit-files regexp filters out special directories . and ... If you don't want this behavior, you can just override defaults (instead of inheriting them with concat):

    (setq dired-omit-files "^\\.[^.]\\|\\.pdf$\\|\\.tex$")
    

    The regexp ^\\.[^.] will match any string of length 2+ starting with a dot where second character is any character except the dot itself. It's not perfect (will not match filenames like "..foo"), but should be ok most of the time.