如何在完成阅读时立即显示所有完成?

时间:2011-01-28 13:43:42

标签: emacs autocomplete elisp

我正在编写一个Emacs次要模式,在其中我使用completing-read让用户从大量搜索结果中进行选择。它们每次都不同,所以如果不查看列表,用户很可能不知道自己想要的是什么。出于这个原因,我想立即显示一个包含所有完成的临时缓冲区,而不是等待用户点击Tab,但对我来说这样做并不明显。有没有办法,它是什么?

3 个答案:

答案 0 :(得分:6)

您可以使用minibuffer-with-setup-hook并将minibuffer-complete添加到设置挂钩来实现这一点,如下所示:

(setq tmp '("cat" "dog" "fish"))

(minibuffer-with-setup-hook 'minibuffer-complete
  (completing-read (concat "Pick one (" 
                           (mapconcat 'identity (all-completions "" tmp) " ") 
                           "): ") 
                   tmp))

答案 1 :(得分:0)

这是一个开始。如果您的完成列表太大而无法放入迷你缓冲区,则必须打开一个临时缓冲区以显示所有选项。或者,只需在完成阅读的空提示上点击标签即可。

(setq tmp '("cat" "dog" "fish"))

(completing-read (concat "Pick one (" 
                         (mapconcat 'identity (all-completions "" tmp) " ") 
                         "): ") 
                 tmp)

答案 2 :(得分:0)

使用 Icicles ,并在调用icicle-show-Completions-initially-flag时绑定completing-read

(let ((icicle-show-Completions-initially-flag  t))
  (completing-read ...))