2

在 emacs ido 选项中,当前选择的选项总是首先显示在列表中。当我们通过箭头键或 Cs / Cr 进行更改时:整个列表被旋转,而不是当前选择的选项移动到任何地方。这对我来说非常令人不安。为了说明,假设 A、B、C 和 D 是缓冲区,我们正在运行 ido-switch-buffer

  1. 当前行为

    *A B C D

按 Cs

*B* CDA

再次按 Cs

*C* 民建联

  1. 我想要的是

*A B C D

按 Cs

A B C D

再次按 Cs

A B C D

我尝试将 "ido-rotate" 和 "ido-rotate-file-list-default" 都设置为 nil 和 t,一一设置,但在这方面没有任何变化。我也没有在 ido 的自定义组中看到任何其他选项。如何使所选选项移动而不是整个列表旋转?

这适用于 emacs 26.1,内置 ido。

编辑:使用常规 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 的任何提示让我覆盖键?

4

1 回答 1

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))                                                                                                                        
于 2018-07-03T19:23:54.663 回答