【发布时间】:2011-06-17 06:20:24
【问题描述】:
我正在编写一个 Emacs 次要模式,在其中我使用 completing-read 让用户从大量搜索结果中进行选择。它们每次都不同,因此用户可能不查看列表就不会知道他们想要什么。出于这个原因,我想立即显示一个包含所有完成的临时缓冲区,而不是等待用户点击 Tab,但对我来说如何做到这一点并不明显。有没有办法,是什么?
【问题讨论】:
标签: emacs autocomplete elisp
我正在编写一个 Emacs 次要模式,在其中我使用 completing-read 让用户从大量搜索结果中进行选择。它们每次都不同,因此用户可能不查看列表就不会知道他们想要什么。出于这个原因,我想立即显示一个包含所有完成的临时缓冲区,而不是等待用户点击 Tab,但对我来说如何做到这一点并不明显。有没有办法,是什么?
【问题讨论】:
标签: emacs autocomplete elisp
使用Icicles,并将icicle-show-Completions-initially-flag绑定到completing-read的调用:
(let ((icicle-show-Completions-initially-flag t))
(completing-read ...))
【讨论】:
您可以通过使用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))
【讨论】:
这是一个开始。如果您的完成列表太大而无法放入迷你缓冲区,则必须打开一个临时缓冲区以显示所有选项。或者,只需在完成阅读的空提示上点击选项卡即可。
(setq tmp '("cat" "dog" "fish"))
(completing-read (concat "Pick one ("
(mapconcat 'identity (all-completions "" tmp) " ")
"): ")
tmp)
【讨论】: