M-xしたミニバッファでの補完(その4)
■具体的に直した所。
backward-wordで移動して重複部分を削除すると補完候補に*とか付いてると移動してくれなくて*が残って困るので。lisp-complete-symbolのsourceをみてやり方をパクリ。
(setq *print-completion-list-hook* '(lambda (list prefix &optional string) (popup-list list '(lambda (arg) (let ((end (point)) (begin (progn (when (skip-syntax-spec-backward "w_") (skip-syntax-spec-forward "'")) (point)))) ;重複部分を予め位置をとっておく↑ (unless (minibuffer-window-p(selected-window)) ;minibufferじゃない所で使った場合を考えて ;EOFが直後にあったらおかしくなったのでそれ対策 (if (next-line) ; (goto-char end) (open-line))) ;直前のprefix部分が補完したときに重複しないように削除 (delete-region begin end) (insert arg) (refresh-screen)) ) )))
上の奴は、少し触った感じでは一応問題なく動作しそう。今まで書いたのは問題があるので、一応これが安定しているかも。次はこれをループさせたいわけだけど、前から書いているように、何となく面倒くさそう。