我正在阅读completing-read
上的文档,但我找不到办法来做我需要的。
它说:
(完成阅读PROMPT COLLECTION&可选预测请求 - 匹配 INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)
。 。
REQUIRE-MATCH可以采用以下值: - t表示除非输入是(或完成)COLLECTION元素或为null,否则不允许用户退出。 - nil表示用户可以退出任何输入。 - “confirm”表示用户可以退出任何输入,但如果输入不是COLLECTION的元素,则需要确认她的选择。 - “完成后确认”意味着用户可以通过任何输入退出,但如果她打电话给她,则需要确认她的选择 `minibuffer-complete'就在'迷你缓冲区完成并退出'之前 并且输入不是COLLECTION的元素。 - 其他任何行为都像t一样,除非输入RET在非空完成时不退出。
我需要做的是:
(completing-read "What kind of project should I create? "
haxe-project-kinds
(lambda (x) (message "predicate: %s" x)) t)
这不应该返回nil
,因为如果确实如此,那就是错误 - 但我不想让用户通过所有其他选项,直到她发现她第一个错误。< / p>
更重要的是,文档中宣传的行为与实际发生的行为不符。我把它放在第4个参数的位置完全没有区别,行为没有改变。
答案 0 :(得分:1)
我不确定您的样本代码究竟是哪一部分不满意,因此很难给出一个好的答案。我的猜测是你要防止用户用空答案命中RET。确实completing-read
即使设置了require-match
也无法阻止。通常使用的方法是使用default
参数的非零值,在这种情况下,当用户点击RET时会返回此值。
如果这还不够好,那么你可能不得不使用minibiffer-with-setup-hook
并在钩子中设置一个你为此目的创建的特殊键映射,其中RET绑定到一个新的函数信号如果迷你缓冲区为空则会出错,否则会调用minibuffer-complete-and-exit
。