7

When using stock find-file or counsel-find-file, is there a way to ignore certain files that I almost never want to open by hand? Examples include .elc files and backups.

Swarnendu Biswas
  • 1,378
  • 1
  • 11
  • 24
Nova
  • 1,059
  • 9
  • 21
  • Option **`completion-ignored-extensions`** doesn't work in that context? That's what ordinary `file-name-completion` respects. See (elisp)[File Name Completion](https://www.gnu.org/software/emacs/manual/html_node/elisp/File-Name-Completion.html) and (emacs)[Completion Options](https://www.gnu.org/software/emacs/manual/html_node/emacs/Completion-Options.html). Of course, that's just extensions... – Drew Jan 10 '17 at 05:58
  • 2
    If you customize `counsel-find-file-ignore-regexp`, one of the options is to use `completion-ignored-extensions`. – John Wiegley Dec 13 '17 at 00:12

2 Answers2

9

Yes, use counsel-find-file-ignore-regexp.

For the simple example you provide use

    (setq counsel-find-file-ignore-regexp "\\.elc\\'")

The are more examples in the docstring for that variable.

justbur
  • 1,500
  • 8
  • 8
1

While counsel-find-file-ignore-regexp can be used to exclude filenames, you can configure the find command to exclude paths with greater control as it has all the options available to find.

For example, this command excludes __pycache__ and directories beginning with a . including .git & .mypy_cache.

This example finds all *.el, *.org & Makefiles, excluding .* (.git for e.g.).

(setq counsel-file-jump-args 
     (list "."
           "-not" "-path"  "*/\\.*"
           "-not" "-path" "./*__pycache__/*"
           "(" "-name" "*.el" "-o" "-path" "*.org" "-o" "-path" "**/Makefile" ")"
           "-type" "f"
           "-print"))

You can experiment in the command line to check which files will be found:

find . -not -path './*__pycache__/*' \
       -not -path '*/\\.*' \
     "(" -name "*.el" -o -path "*.org" -o -path "**/Makefile" ")" \
     -type "f" -print
ideasman42
  • 8,375
  • 1
  • 28
  • 105