ティンカラー日記

こなゆき(a.k.a. p-snow)

21 Oct 2024

よく利用する場所に素早くジャンプする

よく使うものをどれだけ素早く取り出せるか。これは大事な話です、たぶん。物理的な世界では「整頓」がカギを握るわけですが、コンピュータ内では少し事情が違ってきます。今回は私がEmacs内でよく利用する場所に移動するためにどんな方法を使っているかを見ていきたいとおもいます。

よく利用する場所。個人的には、設定ファイルを集約したOrgファイルであるdotfiles.orgや、直近で開発を進めているプロジェクトのルートディレクトリがそれにあたるでしょうか。

これらに素早く移動するEmacsの機能としてまず思い浮かぶのはRegisterでしょう。でも私はこれ、うまく使えません。理由はいくつか思いつきます。まずRegisterでジャンプするためのコマンド、jump-to-registerのデフォルトキーバインドがイマイチすぎる。それならもちろんリバインドするわけですが、それでもまだまだ不満は残ります。Emacsの再起動後に登録したRegisterが使えない。これも以下のコードで一応は解決ができるのですが、不意に消えてたりもするのでなかなかしんどいです。

(add-to-list 'savehist-additional-variables
             'register-alist)

すいません。Registerをディスりすぎましたが、それだけ真剣に使おうとしたことは付言しておきます。

じゃあ、Bookmarkだ。そうだ。僕らにはBookmarkがある!でも bookmark-jump にしても consult-bookmark にしても、Bookmark名を入力しなきゃいけない。違うんだ。もっと短いタイプ数じゃなきゃダメなんだ。

そこで私が行きついたのが、Bookmark名を入力するキーボードマクロをつくりこれを実行するという方法。これを好みの(短めの)キーにバインドすればめでたく目的達成です。私はH-kとそれに続くキーで目的の場所ごとのショートカットをつくれるようにしました。ジャンプするためのキーボードマクロを登録したあと、これを保存するコードを自動生成するコマンドもつくりました。

Elisp Code for Inserting Last KBD Macro for my/kmacro-map

(defun my/insert-last-kbd-macro (macroname keys)
  "Customized `insert-kbd-macro' to bind last recorded kbd macro to `my/kmacro-map'.."
  (interactive (list (read-string "Macro name: ")
                     (read-string "Keys (following H-k): ")))
  (kmacro-name-last-macro (intern macroname))
  (insert-kbd-macro (intern macroname))
  (insert "(keymap-set my/kmacro-map")
  (insert (format " \"%s\"" keys))
  (insert (format " #'%s)" macroname)))

これで今のところ快適に2キータイプで移動できています。

Tags: emacs register bookmark kmacro