Emacsのdiredでドットファイルの表示・非表示を切り替える関数を作った


モチベーション

Emacsのdiredモードをよく使う。
このとき、ドットファイルが表示されてほしいときもあれば、表示されてほしくないときもある。
例えば、ホームディレクトリはドットファイルが大量にあるため、普段は隠したい。
一方で、Git管理のディレクトリでは、.gitignoreがあるのを見えるようにしておきたい。
そこで、diredモードが使うlsのオプションをいい感じに変えるようにした。

コード

diredバッファのリロードをする関数が見つからなかったので自作した。
現在のドットファイルの表示状況は[aA]の簡単なマッチでする。

-lgGhF-lgGhFAのところは、各自の好みで変えるとよい。
デフォルトは-alらしいです。

ドットファイルの切り替えなのでC-.に割り当てた。
けっこう気に入っている。

;; C-.でドットファイルの表示と非表示を切り替える
(setq dired-listing-switches "-lgGhF")
(defun reload-current-dired-buffer ()
  "Reload current `dired-mode' buffer."
  (let* ((dir (dired-current-directory)))
    (progn (kill-buffer (current-buffer))
           (dired dir))))
(defun toggle-dired-listing-switches ()
  "Toggle `dired-mode' switch between with and without 'A' option to show or hide dot files."
  (interactive)
  (progn
    (if (string-match "[Aa]" dired-listing-switches)
        (setq dired-listing-switches "-lgGhF")
      (setq dired-listing-switches "-lgGhFA"))
    (reload-current-dired-buffer)))
(define-key dired-mode-map (kbd "C-.") 'toggle-dired-listing-switches)

(追記)use-package化したコード

use-package化したので、以下のようになった。

(use-package dired
  :custom
  (dired-listing-switches "-lgGhF")
  :config
  ;; C-.でドットファイルの表示と非表示を切り替える
  (defun reload-current-dired-buffer ()
    "Reload current `dired-mode' buffer."
    (let* ((dir (dired-current-directory)))
      (progn (kill-buffer (current-buffer))
             (dired dir))))
  (defun toggle-dired-listing-switches ()
    "Toggle `dired-mode' switch between with and without 'A' option to show or hide dot files."
    (interactive)
    (progn
      (if (string-match "[Aa]" dired-listing-switches)
          (setq dired-listing-switches "-lgGhF")
        (setq dired-listing-switches "-lgGhFA"))
      (reload-current-dired-buffer)))
  :bind (:map dired-mode-map
              ("C-." . toggle-dired-listing-switches)))