2011-01-28 41 views
3

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

回答

6

你可以通过使用并添加minibuffer-complete到设置挂钩,就像这样:

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

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

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

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

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

我的意思是,“如何立即显示所有选项的临时缓冲区? “我将进行编辑以使其更清晰。 – JasonFruit 2011-01-28 14:51:14

+0

好的。你应该可以用键盘宏来做到这一点,但我不知道如何。 – Tyler 2011-01-28 15:01:10

0

使用Icicles,并结合icicle-show-Completions-initially-flag呼叫周围completing-read

(let ((icicle-show-Completions-initially-flag t)) 
    (completing-read ...)) 
相关问题