A Riddle Wrapped in a Mystery

中身はエニグマ・Emacs

Dired のソート順のカスタマイズ

Dired におけるファイル名の順番

Emacs の ファイルブラウザ dired では、ファイルの並び順を “s” キーで切り 替える。

切り替え順をアルファベット順・日付順の他にサイズ順やファイルの種類順で 切り替えられるようにする。

GNU ls のインストール

Mac に標準で付属する “ls” 命令は、ファイルを種類順で並び替えることがで きない (-Xオプション)。MacPorts 等で、GNU ls をインストールする。

% sudo port install coreutils +with_default_names

オプション +with_default_names を付けておかないと、ls命令は “gls” 命 令としてインストールされる。glsの方が良い場合は init.el に以下のように 書く。

(when (executable-find "gls")
  (setq insert-directory-program "gls"))

dired の sort命令の拡張

以下に、 dired-toggle-sort を拡張した、 dired-rotate-sort を示す。 この命令で、 dired-mode-map の “s” キーバインドを置き換える。これで “s”キーを押すたびに、diredのファイルの並び順を アルファベット順・更新 時間順・拡張子順・サイズ順に切り替わる。

;; dired の sort を拡張する。
(defvar dired-sort-order '("" "t" "S" "X")
  "-t (時間) -X (拡張子) -S (サイズ) なし (アルファベット順) を切り替える。")
(defvar dired-sort-order-position 0)

(defun dired-rotate-sort ()
  "Rotate dired toggle sorting order by `dired-sort-order'"
  (interactive)
  (setq dired-sort-order-position
        (% (1+ dired-sort-order-position) (length dired-sort-order)))
  (setq dired-actual-switches
        (concat dired-listing-switches (elt dired-sort-order
                                          dired-sort-order-position)))
  (dired-sort-other dired-actual-switches))
(define-key dired-mode-map "s" 'dired-rotate-sort)