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がうまくいかないのは謎のままです…