0

我正在阅读 上的文档completing-read,但我找不到做我需要的方法。

它说:

(完成-读取 PROMPT COLLECTION &optional PREDICATE REQUIRE-MATCH INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)

. . .

REQUIRE-MATCH 可以采用以下值: - t 表示不允许用户退出,除非输入是(或完成到)COLLECTION 的元素或为空。- nil 表示用户可以使用任何输入退出。- `confirm' 表示用户可以使用任何输入退出,但如果输入不是 COLLECTION 的元素,她需要确认她的选择。- `confirm-after-completion' 表示用户可以使用任何输入退出,但如果她
在 `minibuffer-complete-and-exit' 之前调用 `minibuffer-complete'
并且输入不是收藏的元素。- 任何其他行为都与 t 类似,除了键入 RET 不会退出,如果它执行非空完成。

我需要做的是:

(completing-read "What kind of project should I create? "
  haxe-project-kinds
  (lambda (x) (message "predicate: %s" x)) t)

这不应该 return nil,因为如果它确实是一个错误 - 但我不想让用户通过所有其他选项,直到她发现她的第一个错误。

不仅如此,文档中宣传的行为与实际发生的情况不符。我放在第 4 个参数的位置上完全没有区别,行为没有改变。

4

1 回答 1

1

我不确定您的示例代码到底不满足您想要的哪一部分,因此很难给出一个好的答案。我的猜测是你想防止用户用空答案点击 RET。Indeedcompleting-read不会阻止这种情况,即使使用require-matchset 也是如此。通常处理这种情况的方法是使用一个非零值作为default参数,在这种情况下,当用户刚刚点击 RET 时会返回这个值。

如果这还不够好,那么您可能必须使用minibiffer-with-setup-hookand 在钩子中,设置您为此创建的特殊键映射,其中 RET 绑定到一个新函数,如果迷你缓冲区为空,则该函数会发出错误信号,并且minibuffer-complete-and-exit否则调用。

于 2012-10-10T17:09:56.660 回答