【问题标题】:How do I show all completions immediately in completing-read?如何在完成阅读中立即显示所有完成?
【发布时间】:2011-06-17 06:20:24
【问题描述】:

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

【问题讨论】:

    标签: emacs autocomplete elisp


    【解决方案1】:

    使用Icicles,并将icicle-show-Completions-initially-flag绑定到completing-read的调用:

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

    【讨论】:

      【解决方案2】:

      您可以通过使用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))
      

      【讨论】:

      • 这看起来非常非常有希望。我试试看!
      【解决方案3】:

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

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

      【讨论】:

      • 我的意思是,“如何立即显示带有所有选项的临时缓冲区?”我将进行编辑以使其更清晰。
      • 好的。您应该可以使用键盘宏来执行此操作,但我不确定如何。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多