anything-something.el
名前は半分冗談w
普段仕事をしていると、使うコマンド(M-xとか)や、動作が意外と限られている事に気がつく。
例えば、職場では mvc-status をかなり頻繁に使用するのだが、その都度 anything-c-mx で選択するのは意外と面倒。
mvc と入力したあたりでもう察してよと思うのだが、mvc-xxx のコマンドがずら〜っとリスティングされてしまい、結局手動でmvc-statusと入力するのと大差ない手間がかかってしまう。
一連のコマンドの組み合わせを呼び出すなんてケースもあり、この場合は anythingを複数回呼ぶ必要がある。
そんな訳で、自分のお気に入りの操作をリスティングするanything.elのインターフェースを作ってみた。
いわゆるランチャーのようなもの。
anything-something-commands に好みの動作を記述しておくという寸法。
引数を持った関数(と呼ぶのかな? lispの場合)をコールする方法がエレガントじゃない気もするが、まぁそのうち修正するということで。
→ (call-interactively (intern "xxxx")) で解決 2008/10/1
と、これを作った後に、anythingの履歴を使用頻度順に記憶しておいて、それを利用したインターフェースを書けばよかったんじゃないかという気がしてきた。。。
(defvar anything-something-commands (list (list :title "kita" :summary "(゚∀゚)キタコレ" :command #'insert :args '("(゚∀゚)キタコレ")) (list :title "signature" :summary "署名を挿入" :command #'insert :args '("/**\n * name: foo\n */\n")) (list :title "occur" :summary "anything-c-source-occurを実行" :command (lambda () (anything '(anything-c-source-occur)))) (list :title "gcode" :summary "モードに合わせた言語でgoogle code searchを引く" :command #'(lambda () (call-interactively (intern "gcode")))) )) (defvar anything-c-source-something '((name . "Something") (init . anything-c-something-init) (candidates-in-buffer) (action . anything-c-something-action))) (defun anything-c-something-init () (with-current-buffer (anything-candidate-buffer 'global) (dolist (command anything-something-commands t) (insert (format "%s: %s\n" (getf command :title) (getf command :summary)) )))) (defun anything-c-something-action (candidate) (with-current-buffer anything-current-buffer (let* ((title (car (split-string candidate ":"))) (command (car (remove-if-not #'(lambda (item) (string= title (getf item :title))) anything-something-commands)))) (apply (getf command :command) (getf command :args))))) (defun anything-something () (interactive) (anything '(anything-c-source-something)))