防止完成 - 以nil退出读取

时间:2012-10-10 16:19:57

标签: emacs elisp

我正在阅读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个参数的位置完全没有区别,行为没有改变。

1 个答案:

答案 0 :(得分:1)

我不确定您的样本代码究竟是哪一部分不满意,因此很难给出一个好的答案。我的猜测是你要防止用户用空答案命中RET。确实completing-read即使设置了require-match也无法阻止。通常使用的方法是使用default参数的非零值,在这种情况下,当用户点击RET时会返回此值。

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