例えば/a/b/c/d/e
というファイルを開いたときに、デフォルトのバッファ名はe
ですが、これをd/e
にしたい(フルパスだと長過ぎるので……)。
そこで、以下のコードをinit.elに追加しました。
init.el
(defun add-parent-directory-in-buffer-name (&rest args)
(let ((file (or buffer-file-name dired-directory)))
(when file
(when (not (string= file "~/"))
(setq file (abbreviate-file-name (directory-file-name file))))
(let* ((parent (directory-file-name
(file-name-directory file)))
(dir (if (string-match "\\`/[^/]*\\'" parent)
parent
(file-name-nondirectory parent))))
(rename-buffer (concat
(file-name-as-directory dir)
(file-name-nondirectory file)))))))
(advice-add 'find-file :after 'add-parent-directory-in-buffer-name)
バッファ名を変更する関数を作って、find-file
の直後に実行されるようにadvice-add
しています。
find-file-other-window
なども同様にadvice-add
すればできます。
バッファが開いているのがファイル・ディレクトリ以外の場合(*scratch*
バッファなど)はfile
がnilになるので何もしません。
ルートから2階層以内のファイルでは先頭の/も付けます。