2005-10-26 [長年日記]

[Q3] 2.9.18

2.9.18を出しました。変更点はこちらです。

xyzzyでミニバッファから読み込むときのヒストリ

read-stringやcompleting-readでミニバッファから入力を読み込むときには、:historyにヒストリを渡してやれば良さそうですがなぜかうまくいきません。

(read-string "Test: " :history '("a" "b" "c"))

色々と調べてみたところ、*minibuffer-default-history*をセットすると良いようです。

(let ((*minibuffer-default-history* '("a" "b" "c")))
  (read-string "Test: "))

さらに、define-history-variableを使うと、使ったヒストリをxyzzyが終了してもおぼえてくれるようになるので、

(define-history-variable *my-history* nil)
(defun my-command (&aux input)
  (interactive)
  (let ((*minibuffer-default-history* *my-history*))
    (setf input (read-string "Test: "))
    (setf *my-history* *minibuffer-default-history*))
  (print input))

のようにするとコマンドごとにヒストリを持てるようになります。

しかし、interactiveの:history0もうまくいかないし、:historyがうまくいかないのは謎のままです…

[]