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

elscreenでバッファ名に shellが含まれるとタブ名が "shell"になってしまう問題の回避方法

emacs elscreen

今まで放置していたんですが, 調べてたらすぐにわかったのでここにメモっておきます.

問題

elscreenでは特定の名前にマッチするバッファ名はニックネームが付けられて
しまうことが原因でした. それを管理するのは elscreen-buffer-to-nickname-alistという
変数で、以下のような定義がされています.

(defcustom elscreen-buffer-to-nickname-alist
  '(("[Ss]hell" . "shell")
    ("compilation" . "compile")
    ("-telnet" . "telnet")
    ("dict" . "OnlineDict")
    ("*WL:Message*" . "Wanderlust"))
  "*Alist composed of the pair of regular expression of
buffer-name and corresponding screen-name."
  :tag "Alist to Derive Screen Names from Major Modes"
  :type '(alist :key-type string :value-type (choice string function))
  :set (lambda (symbol value)
         (custom-set-default symbol value)
         (when (fboundp 'elscreen-rebuild-buffer-to-nickname-alist)
           (elscreen-rebuild-buffer-to-nickname-alist)))
  :group 'elscreen)

これにより, shellを含むものは "shell"に, compilationが含まれていると "compile"と
いったようにタブ名が設定されていました.

解決方法

elscreen-buffer-to-nickname-alistから shellを抜けば OKです.
ただ個人的にニックネーム自体不要だったので, nilにしておきました

(custom-set-variables
  '(elscreen-buffer-to-nickname-alist nil))


このとき単に setqや setfで nilと設定しないようにしてください.
実際のところ, この変数だけではこの機能を解除することができません.
設定をトリガに実行される関数が実行されて初めて目的が達成できます.
custom-set-variablesで設定を行うとその関数が実行されるので,
期待した動作になるというわけです. setf, setqでは, その関数が実行されません.