id:IMAKADO さんの
をちょこっと改造してみました。
もともとは key-chord-define-global を繰り返し書くのが冗長に感じて リスト+funcall の形にしたのですが、そしたらもうこのリストを使いまわせばよくね? と思ったのでそうしてみました。
(require 'key-chord) (key-chord-mode 1) (setq key-chord-list '(("fj" . anything) ("^\\" . apropos) ("o0" . howm-menu) ("\\]" . block-indent) ("@[" . toggle-truncate-lines) ("i9" . describe-key-briefly) (";:" . eval-expression) (";@" . eval-region) (";l" . eval-last-sexp) ("vg" . view-mode) ("yu" . moccur) ("dk" . anything-c-key-chord-describe) )) (dolist (pair key-chord-list) (funcall 'key-chord-define-global (car pair) (cdr pair))) (defvar anything-c-source-key-chord-describe `((name . "key-chord describe bindings") (action . (("Call Interactively" . (lambda (c) (call-interactively (intern (car (cdr (split-string c " - "))))))) ("Add to kill-ring" . kill-new))) (candidates . (lambda () (mapcar (lambda (pair) (format "%s - %s" (car pair) (cdr pair))) key-chord-list))))) (defun anything-c-key-chord-describe () (interactive) (anything '(anything-c-source-key-chord-describe)))
-
-
- -
-
2011年 1月 3日 月曜日 18:59:08 JST
Call Interactively のとこが動かなくなっていたのを修正
追記 2011年 1月 4日 火曜日 21:41:51 JST
上のを適当に書いた後で Emacsテクニックバイブル の anything のとこをパラパラと見ていたら、335 ページに次のように書いてありました。
candidates 属性は、候補の取得方法を変数名かリストか無引数関数で指定します。変数の値、関数呼び出しの結果はリストである必要があります。リストの要素は文字列かシンボルを受け付けます。
上記のコードでは「文字列 or シンボル」以外のものを返していてダメな感じになってます。
また、real-to-display を使うと良さそうだということも分かり(同348ページ)、それも併せて次のように修正しました。
(defvar anything-c-source-key-chord-describe `((name . "key-chord describe bindings") (action . (("Call Interactively" . call-interactively) ("Add to kill-ring" . kill-new))) (candidates . (lambda () (mapcar (lambda (pair) (cdr pair)) key-chord-list))) (real-to-display . (lambda (real) (format "%s - %s" (caar (remove-if-not (lambda (pair) (string= (cdr pair) real)) key-chord-list)) real)))))