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))
					  )
					)))

上の奴は、少し触った感じでは一応問題なく動作しそう。今まで書いたのは問題があるので、一応これが安定しているかも。次はこれをループさせたいわけだけど、前から書いているように、何となく面倒くさそう。

  1. その1
  2. その2
  3. その3
  4. その4