key-chord.elで定義しているコマンドを表示するanything-source

説明

key-chord.elで提供される key-chord-describe コマンドのanythingインターフェイスです。定義されているchordを表示します。
anything-sourceの変数 anything-c-source-key-chord-describe と、それを使ってanythingを起動するコマンド anything-c-key-chord-describe です。
デフォルトアクションはCall Interactivelyです。


key-chord.el凄く便利なんだけど、どのキーに割り当てたか忘れる度に設定ファイルを確認するのが面倒くさくなったので作ってみました。

コード

(defvar anything-c-source-key-chord-describe
  `((name . "key-chord describe bindings")
    (action . (("Call Interactively" . (lambda (c)
                                         (call-interactively (intern c))))
               ("Add to kill-ring" . kill-new)))
    (init . (lambda ()
              (with-current-buffer (anything-candidate-buffer 'global)
                (save-selected-window
                  (call-interactively 'key-chord-describe))
                (let ((los (with-current-buffer "*Help*"
                             (loop initially (goto-char (point-min))
                                   while (re-search-forward (rx "<key-chord>"
                                                                (1+ space)
                                                                (group
                                                                 (* not-newline))) nil t)
                                   unless (save-excursion (progn (beginning-of-line)
                                                      (re-search-forward "Prefix Command" nil t)))
                                   collect (match-string-no-properties 1)))))
                  (insert (mapconcat 'identity los "\n"))))))
    (display-to-real . (lambda (line)
                         ;; (rx bol (= 3 not-newline) (+ space) (group (+ print)))
                         (when (string-match "\\(?:^.\\{3\\}[[:space:]]+\\([[:print:]]+\\)\\)" 
                                             line)
                           (match-string 1 line))))
    (candidates-in-buffer)))


(defun anything-c-key-chord-describe ()
  (interactive)
  (anything '(anything-c-source-key-chord-describe)))

自分の設定

(key-chord-define-global "dk" 'anything-c-key-chord-describe)

その他

重複削除はしたいところ。(v eとe vが両方表示されてしまう)