我有这个:
(defun promptread (prompt)
(format *query-io* "~10t~a:" prompt)
(force-output *query-io*)
(read-line *query-io*))
(defun prompt-cd ()
(make-cd
(promptread "Artist")
(promptread "Album")
(promptread "Rating")
(promptread "Like [y/n]")))
它有效,但格式~10t
仅影响promptread
内make-cd
的第一次调用;其他人在没有这种填充的情况下左对齐。
为什么会这样?
REPL:
CL-USER> (addcds)
Artist:Dixie
Album:Funny
Rating:22
第一个promptread
是缩进的,因为format
与~10t
但不是其他人,它们使用相同的format
调用。
答案 0 :(得分:5)
问题是在force-output
和readline
之后,format
不知道光标位于0位置。因此绝对制表将失败。如果您使用~&
启动格式字符串,您将看到此内容,无论如何都会输出另外的换行符。
要解决此问题,请使用@
修饰符获取相对列表:
(format *query-io* "~10@t~a:" prompt)