Emacs 防止完成读取以nil退出

Emacs 防止完成读取以nil退出,emacs,elisp,Emacs,Elisp,我正在阅读关于完成阅读的文档,但是我找不到一种方法来做我需要的事情 它说: (完成读取提示集合和可选谓词REQUIRE-MATCH) 初始输入历史定义(继承输入法) REQUIRE-MATCH可以采用以下值: -t表示不允许用户退出,除非输入是(或完成)集合元素或为null。 -nil表示用户可以通过任何输入退出。 -“确认”表示用户可以使用任何输入退出,但如果输入不是集合元素,则需要确认她的选择。 -“完成后确认”意味着用户可以通过任何输入退出,但如果她呼叫,则需要确认她的选择 `minib

我正在阅读关于完成阅读的
文档,但是我找不到一种方法来做我需要的事情

它说:

(完成读取提示集合和可选谓词REQUIRE-MATCH) 初始输入历史定义(继承输入法)

REQUIRE-MATCH可以采用以下值: -t表示不允许用户退出,除非输入是(或完成)集合元素或为null。 -nil表示用户可以通过任何输入退出。 -“确认”表示用户可以使用任何输入退出,但如果输入不是集合元素,则需要确认她的选择。 -“完成后确认”意味着用户可以通过任何输入退出,但如果她呼叫,则需要确认她的选择
`minibuffer complete'就在“minibuffer complete and exit”之前
并且输入不是集合的元素。 -其他任何操作都类似于t,只是如果输入RET完成非null,则不会退出

我需要做的是:

(completing-read "What kind of project should I create? "
  haxe-project-kinds
  (lambda (x) (message "predicate: %s" x)) t)
这不应该返回
nil
,因为如果返回,那就是一个错误-但我不想让用户运行所有其他选项,直到她发现第一个选项出错


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

我不确定您想要的内容的哪一部分不被示例代码所满足,因此很难给出一个好的答案。我的猜测是,您希望防止用户使用空答案点击RET。实际上,
完成读取
并不能阻止这种情况,即使设置了
要求匹配
也不行。通常的处理方法是为
default
参数使用非nil值,在这种情况下,当用户刚刚点击RET时返回该值


如果这还不够好,那么您可能必须使用带有安装挂钩的
迷你型biffer
并在挂钩中,设置为此目的而创建的特殊密钥映射,其中RET绑定到一个新函数,该函数在微缓冲区为空时发出错误信号,并调用
minibuffer complete,否则退出

@wvxvw:Personne ne t'currentáusiver
(交互式(列表…)
。Tu peux使用者
(交互式(let((arg1(完成读取…))(除非arg1(错误…))(列表…))
。La forme est simplement
(交互式EXP)
oùEXP est une expression qui renvoie La liste des arguments.@wvxvw:Duh!对不起,这是法语。难道你不能循环直到输入为非nil吗?当require match as参数是一个函数(如你的示例中所示)时,这个函数将不会被调用,而只作为一个非nil的值使用。