Emacs 初心者必見! one-key.el はキーバインドが覚えられない人への特効薬だ
Emacs 初心者向け記事がアツい ので、負けじと俺もっ。
Emacs には無数にキーバインドがあるから覚えきれない人が大多数だろう。 10 年以上使っている俺でさえもだ。ましてやどんどん Emacs Lisp を導入する人にとってはキーバインド習得コストは大問題となる。
その問題に対処しようと今年新星のごとく登場したのが one-key.el だ。キーボードからメニュー形式でコマンドを実行する Emacs Lisp だ。導入記は id:grandVin さんに 先越されちゃった 。
http://www.emacswiki.org/emacs/OneKey
M-x install-elisp http://www.emacswiki.org/cgi-bin/wiki/download/one-key.el
M-x install-elisp http://www.emacswiki.org/cgi-bin/wiki/download/one-key-config.el
インストールは
(require 'one-key)
のみ。
開発者は今 EmacsWiki で勢いづいている Andy Stewart さん。 Emacs 歴がまだ 1 年ちょっとだというのに開発している Emacs Lisp の多いこと多いこと。
http://www.emacswiki.org/emacs/AndyStewart
たとえば、俺は C-x r から始まる register ・ rectangle 系のコマンドには慣れていない。 register 関連は anything-c-source-kill-ring ( kill-summary.el とかでもいいけど)に置き換えられているからだ。 rectangle 系はめったに使わないし。だからキーバインド覚えられない。こんな場合こそ one-key.el の出番となるわけ。
激しく気に入ったので既存のキーマップから one-key.el のメニューを生成するコードジェネレータを作ってしまった。取り込まれているのですぐに使えるよ。
M-x one-key-show-template を押すとキーバインドを聞いてくるので「 C-x r 」と文字通り( C とハイフンと x みたいに)入力する。キーマップの名前(*-map )を入力してもよい。そして、メニューの名前を聞いてくるので「 Register and Rectangle 」と入力する。すると、*One-Key-Template*というバッファが出てきて、こんな内容になるはず。
(defvar one-key-menu-Register-and-Rectangle-alist nil "The `one-key' menu list for REGISTER-AND-RECTANGLE.") (setq one-key-menu-Register-and-Rectangle-alist '( (("C-@" . "point-to-register") . point-to-register) (("SPC" . "point-to-register") . point-to-register) (("+" . "increment-register") . increment-register) (("b" . "bookmark-jump") . bookmark-jump) (("c" . "clear-rectangle") . clear-rectangle) (("d" . "delete-rectangle") . delete-rectangle) (("f" . "frame-configuration-to-register") . frame-configuration-to-register) (("g" . "insert-register") . insert-register) (("i" . "insert-register") . insert-register) (("j" . "jump-to-register") . jump-to-register) (("k" . "kill-rectangle") . kill-rectangle) (("l" . "bookmark-bmenu-list") . bookmark-bmenu-list) (("m" . "bookmark-set") . bookmark-set) (("n" . "number-to-register") . number-to-register) (("o" . "open-rectangle") . open-rectangle) (("r" . "copy-rectangle-to-register") . copy-rectangle-to-register) (("s" . "copy-to-register") . copy-to-register) (("t" . "string-rectangle") . string-rectangle) (("w" . "window-configuration-to-register") . window-configuration-to-register) (("x" . "copy-to-register") . copy-to-register) (("y" . "yank-rectangle") . yank-rectangle) (("C-SPC" . "point-to-register") . point-to-register) )) (defun one-key-menu-Register-and-Rectangle () "The `one-key' menu for REGISTER-AND-RECTANGLE" (interactive) (one-key-menu "REGISTER-AND-RECTANGLE" one-key-menu-Register-and-Rectangle-alist))
内容を確認したら C-x h M-w でバッファの内容をまるごとコピーし、.emacs に貼り付ける。それから、
(define-key global-map "\C-xr" 'one-key-menu-Register-and-Rectangle)
と割り当てるとよい。
ぁ、メニュー名でスペースがハイフンになってら(^^;バグも見つけちゃったよ。あとで修正しとこ。→直した
さて、ここでさっそく C-x r で実行してみると、以下のようなスクリーンショットになる。
あとはメニューに出てくるように、たとえば「 s 」と押せば copy-to-register が実行されるというわけ。素早くコマンドが実行できて、しかもキーバインドが覚えられるんだから一石二鳥だ。 one-key.el のすごいところは、 one-key.el のない通常環境と同じように操作できることだ。さあ、使ってみよう。
なお、インストール時に
(require 'one-key-config)
も入れておくと、すでに定義されているメニューにアクセスできる。 M-x の後で「 one-key-menu-」まで入力して Tab を押せば、どんなメニューが定義されているかわかるので試してみよう。
似たようなものに 123-menu.el がある。そっちはエコーエリアでメニューを構成するやつ。
http://www.emacswiki.org/emacs/OneTwoThreeMenu
追記 [2009/02/12]
わわ、ごめんなさい。 typo ですね。修正しました。指摘ありがとうございます。
なお、 one-key-default.el はデフォルトのキーバインド( C-x 系など)を one-key 化したものです。
M-x install-elisp http://www.emacswiki.org/cgi-bin/wiki/download/one-key-default.el
.emacs の最後尾に
(require 'one-key-default) (one-key-default-setup-keys)
と設定すれば使えます。どうぞ。