如何使emacs ido不能旋转整个选项列表?

时间:2018-07-03 11:47:52

标签: emacs ido

在emacs ido选项中,当前选择的选项始终始终显示在列表中。当我们改变时按箭头键或C-s / C-r:整个列表旋转,而不是当前选择的选项移动到任何地方。这对我来说非常令人不安。为了说明这一点,假设A,B,C和D是缓冲区,我们正在运行ido-switch-buffer

  1. 当前行为
      

    * A * B C D

按C-s

  

* B * C D A

再次按C-s

  

* C * D A B

  1. 我想要的是
  

* A * B C D

按C-s

  

A * B * C D

再次按C-s

  

A B * C * D

我尝试将“ ido-rotate”和“ ido-rotate-file-list-default”分别设置为nil和t,但都没有改变。我也没有在ido的customize-group中看到任何其他选项。如何使选定的选项移动而不是旋转整个列表?

这是针对内置ido的emacs 26.1。

编辑:     在常规ido模式下,我可以按以下方式覆盖下一个先前的键绑定:

(define-key ido-buffer-completion-map (kbd "M-)") 'ido-next-match)

使用ido-grid-mode,我所有的尝试都失败了。似乎坚持使用硬编码键集来查找下一个选项/上一个选项。 这也不起作用:

(define-key ido-completion-map (kbd "M-)") 'ido-next-match)

任何提示我都可以使ido-grid-mode让我覆盖键吗?

1 个答案:

答案 0 :(得分:0)

好,找到答案了。软件包ido-grid-mode确实是我需要的,谢谢@jpkotta。有一个技巧可以使我的键盘绑定工作。

(defun ido-my-keys ()
"Add my keybindings for Ido."
(define-key ido-completion-map (kbd "M-)") 'ido-next-match)
(define-key ido-completion-map (kbd "M-)") 'ido-prev-match)
)
(ido-grid-mode t)
(add-hook 'ido-setup-hook 'ido-my-keys)

也就是说-必须在添加设置挂钩以进行键绑定之前启动ido-grid-mode。我在安装挂钩之后或完全在安装挂钩之外进行了此操作,这不起作用。

编辑:忘了提,还有另一个技巧。破解ido-grid-mode本身。在ido-grid-mode.el中进行以下更改:

  ;; ('C-s     (define-key ido-completion-map (kbd "C-s")       #'ido-grid-mode-next))                                                                                                                         
  ;; ('C-r     (define-key ido-completion-map (kbd "C-r")       #'ido-grid-mode-previous))                                                                                                                     
  ('C-s     (define-key ido-completion-map (kbd "M-)")       #'ido-grid-mode-next))                                                                                                                            
  ('C-r     (define-key ido-completion-map (kbd "M-(")       #'ido-grid-mode-previous))