読者です 読者をやめる 読者になる 読者になる

cloverrose's blog

Python, Machine learning, Emacs, CI/CD, Webアプリなど

Emacs find-file TABの一覧で非表示にしたいファイルを設定

Emacs

C-x C-f TABで表示される候補に hoge.py~とかhoge.pycとか#hoge.py#とか表示されると邪魔なので表示しない方法を調べた。

注意

参考サイトの上の2つでは

completion--file-name-table

って書いてあるけど僕の環境(Emacs24)では、これだとエラーが出ます。正しくは以下のように--を-に直します。

completion-file-name-table

ソース

以下が実際に追加したスクリプトです。
Meadow/Emacs memo: ファイルを開く関連にあるように

M-x help-for-help v completion-ignored-extensions

でcompletion-ignored-extensionsの初期値を調べると~とか.pycとか大概の物は設定されています。なので自分はEmacsを不正に終了した時に生成される#hoge.py#のために"#"だけを追加しています。

;; find-fileでTABで一覧を表示した時に表示しないファイルを設定
;; http://epian-wiki.appspot.com/wiki/Memo/20100828085804/Emacs:find-file%E6%99%82%E3%81%AE%E4%B8%80%E8%A6%A7%E3%81%AB%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%AA%E3%81%84
;; http://stackoverflow.com/questions/1731634/dont-show-uninteresting-files-in-emacs-completion-window
(setq completion-ignored-extensions
      (append completion-ignored-extensions
              ;; 表示したくないファイルの末尾を追加 e.g. ".pyc"
              '("#")))
(defadvice completion-file-name-table (after ignoring-backups-f-n-completion activate)
  "filter out results when the have completion-ignored-extensions"
  (let ((res ad-return-value))
    (if (and (listp res)
          (stringp (car res))
          (cdr res)) ; length > 1, don't ignore sole match
        (setq ad-return-value
          (completion-pcm--filename-try-filter res)))))
(eval-after-load "dired"
  '(require 'dired-x))
(add-hook 'dired-mode-hook
          (lambda ()
            (dired-omit-mode 1)))