anything.elの情報源を選択する(改訂版)

anything-sourceを選択してanythingを起動するanything-source - IMAKADO::BLOG

たまにしか使わない情報源があってそれが重いといやな感じなので、id:IMAKADOさんのコードを思い出した。というか、あらかじめ情報源がわかっている場合に有用。ちとバグ修正・リファクタリングしてみた。ちなみに、特定の文字列から始まるシンボルの集合が欲しければall-completionsを使うのがよい。

さらに、通常のanythingのバッファを潰さないようにするため専用のバッファを用意。これでanything-resume時に困ることはない。

(defvar anything-call-source-buffer "*anything source select*")
(defvar anything-c-source-call-source
  `((name . "Call anything source")
    (candidate-number-limit . 9999)
    (candidates
     . (lambda ()
         (loop for vname in (all-completions "anything-c-source-" obarray)
               for var = (intern vname)
               for name = (ignore-errors (assoc-default 'name (symbol-value var)))
               if name collect (cons (format "%s (%s)" name vname) var))))
    (action . (("Invoke anything with selected source" .
                (lambda (candidate)
                  (anything candidate nil nil nil nil
                            anything-call-source-buffer)))
               ("Describe variable" . describe-variable)))
    (persistent-action . describe-variable)))

(defun anything-call-source ()
  "Call anything source."
  (interactive)
  (anything 'anything-c-source-call-source nil nil nil nil
            anything-call-source-buffer))