cheatコマンド(チートシート)のanythingインターフェース

http://blog.netswitch.jp/articles/2008/09/25/zsh-completion-for-cheatでcheatコマンドを知る。cheatコマンドは主にRuby関係のチートシートを集めたサイトのコマンドラインインターフェースのようだ。現在392個のチートシートが参照できる。

zshの補完を試してみたけど、遅いのでanything.elのインターフェースを書いてみた。

(defvar anything-c-source-cheat
  '((name . "Cheat Sheets")
    (init . (lambda ()
              (let ((buf (anything-candidate-buffer)))
                (unless buf
                  (with-current-buffer (anything-candidate-buffer 'global)
                    (call-process-shell-command
                     "cheat sheets" nil  (current-buffer))
                    (goto-char (point-min))
                    (forward-line 1)
                    (delete-region (point-min) (point))
                    (indent-region (point) (point-max) -2))))))
    (candidates-in-buffer)
    (action . (lambda (entry)
                (let ((buf (format "*cheat sheet:%s*" entry)))
                  (unless (get-buffer buf)
                    (call-process
                     "cheat" nil (get-buffer-create buf) t entry))
                  (display-buffer buf)
                  (set-window-start (get-buffer-window buf) 1))))))

ローカルにキャッシュされるのでちょくちょく「cheat --new」でキャッシュをクリアしないと古い内容のままだったりするので注意。
キャッシュされるくせに「time cheat cheat」で時間を測ったら0.6秒とか遅すぎ…rubygemsのせいか?

チートシートのポータルになってくれると嬉しい。

追記

cheat.elというEmacs Lispもあるね。 「cheat cheat_el」を実行してunindentしてやればよい。ふむ、これがあればcheat sheetを自在に追加したり編集できるようだ。ネット上でチートシートを共有する動きが盛んになればおもしろいだろう。あとでactionを追加しよかな。