anything-c-lisp-complete-symbolで候補の生成にmapatomsを使う

元ネタhttp://d.hatena.ne.jp/IMAKADO/20080326/1206613916
all-completionsはobarrayからリンク辿ってシンボルの探索をしなかったように見えたので、より多くのシンボルを候補に入れるためにmapatomsを使うように anything-c-lisp-complete-symbol-get-cands を弄る

(when (functionp 'anything-c-lisp-complete-symbol-get-cands)
  (defun anything-c-lisp-complete-symbol-get-cands ()
    (multiple-value-setq
	(anything-c-lisp-complete-symbol-initial-input beg end type)
      (anything-c-lisp-complete-symbol-get-cmp-context))
    (let (ret)
      (cond
       ((and (eq type 'function)
	     (not anything-c-lisp-complete-symbol-all-type))
	(all-completions anything-c-lisp-complete-symbol-initial-input obarray 'functionp)
	(mapatoms (lambda (e)
		    (let ((name (symbol-name e)))
		      (when (and (functionp e)
				 (string-match anything-c-lisp-complete-symbol-initial-input name))
			(push name ret))))
		  obarray))
       (t
	(mapatoms (lambda (e)
		    (let ((name (symbol-name e)))
		      (when (string-match anything-c-lisp-complete-symbol-initial-input name)
			(push name ret))))
		  obarray)))
      ret))

  (setq anything-c-source-lisp-complete-symbol
	(cons '(action . (("Insert" . (lambda (candidate)
                             (delete-backward-char (length anything-c-lisp-complete-symbol-initial-input))
                             (insert candidate)))
			  ("describe" . (lambda (s) (let* ((sym (intern-soft s))
							   (fun (if (fboundp sym)
								    'describe-function
								  'describe-variable)))
						      (funcall fun sym))))
			  ("find" . (lambda (s) (let* ((sym (intern-soft s))
						       (fun (if (fboundp sym)
								'find-function
							      'find-variable)))
						  (funcall fun sym))))))
	      ;; 
	      (assq-delete-all 'action anything-c-source-lisp-complete-symbol))))

ついでにfind-*を追加したアクションに差し変えてみる。このようなalistをペアごと差し替える関数もあるはずなんだけどな‥emacs-clにはあ「った」のかな?
Infoからシンボルの検索をするようなアクションも欲しいけどInfo.elは読む気がしない。