読者です 読者をやめる 読者になる 読者になる

cpprefで候補が複数ある場合

http://d.hatena.ne.jp/antipop/20091009/1255087113


id:antipopさんの作ったcpprefが便利そうなので使ってみました。
普段は手元のリファレンス本をたまに見ながら調べていたので、
それに比べるととても快適です。

ただ、候補が複数ある場合、例えばswapで検索すると、
ミニバッファに複数候補があることだけを通知して終了してしまいます。

        /home/bokko/emacs-macros-src/cppref/docs/stl/multiset/swap.html
        /home/bokko/emacs-macros-src/cppref/docs/stl/multimap/swap.html
        /home/bokko/emacs-macros-src/cppref/docs/stl/map/swap.html
        /home/bokko/emacs-macros-src/cppref/docs/stl/list/swap.html
        /home/bokko/emacs-macros-src/cppref/docs/stl/deque/swap.html
        /home/bokko/emacs-macros-src/cppref/docs/stl/algorithm/swap.html
        /home/bokko/emacs-macros-src/cppref/docs/stl/algorithm/iter_swap.html

なので、ちょこちょこっと手を入れて複数候補がある場合に
ミニバッファで対象パスを補完入力できるようにしてみました。

diff --git a/cppref.el b/cppref.el
index d88787f..a6977e6 100644
--- a/cppref.el
+++ b/cppref.el
@@ -91,11 +91,13 @@ browser."
     (if (not reference)
         (error (concat "no document found for " name)))
     (if candidates
-        (error (concat "multiple choices for " name ":\n\t"
-                       (mapconcat 'identity candidates "\n\t"))))
-
+       (setq reference (cppref-select-from-multiple-choices
+                        candidates)))
     (cppref-visit-reference reference)))
 
+(defun cppref-select-from-multiple-choices (choices)
+  (completing-read "multiple choies. push tab key. select :" choices nil t ""))
+
 (defun cppref-init-doc-dir ()
   (if (not cppref-doc-dir)
       (let* ((library-path (find-library-name "cppref"))

結構やっつけ感がありますが、githubの練習がてらforkして↑の修正をコミットしています↓

http://github.com/cubicdaiya/emacs-cppref