在Emacs中以特定模式设置快捷键(例如ido)

use*_*592 4 emacs keyboard-shortcuts ido flyspell

我有两个问题,我相信有些相关:

1)在IDO中,我想将ido-restrict-to-match更改为除C-SPCor之外的其他内容C-@.不幸的是,我不知道如何告诉emacs我想要一个不同的快捷方式(比方说C-0).

2)我想保护我,C-;但每当flyspell模式运行它超车C-;.我的定义在.emacs中:

(global-set-key (kbd "C-;") 'mark-paragraph)
Run Code Online (Sandbox Code Playgroud)

但显然flyspell会覆盖这个......(尽管如此,如果我查看帮助M-h k C-;它会说mark-paragraph)

有人可以告诉我如何在这些条件下绑定/解除绑定键吗?它必须在不修改ido.el和flyspell.el并重新构建的情况下工作,对吗?

非常感谢!

san*_*inc 9

Flyspell为C-;绑定提供了自定义功能,因此您可以在以下内容中添加M-x customize RET flyspell-auto-correct-binding RET或添加以下内容~/.emacs:

(setq flyspell-auto-correct-binding (kbd "C-~")) ; or a binding of your choice
Run Code Online (Sandbox Code Playgroud)

至于ido你的问题有点令人困惑,因为这意味着你有时候在迷你游戏之外使用ido ......

ido.el中的文档包含以下建议:

;; To modify the keybindings, use the ido-setup-hook.  For example:
;;(add-hook 'ido-setup-hook 'ido-my-keys)
;;
;;(defun ido-my-keys ()
;;  "Add my keybindings for ido."
;;  (define-key ido-completion-map " " 'ido-next-match)
;;  )
Run Code Online (Sandbox Code Playgroud)

使用这些知识,您可以在自己的"ido-my-keys"函数中更改这样的键绑定:

(define-key ido-completion-map (kbd "C-SPC") nil)
(define-key ido-completion-map (kbd "C-@") nil)
(define-key ido-completion-map (kbd "C-0") 'ido-restrict-to-matches)
Run Code Online (Sandbox Code Playgroud)

还有一个专门用于迷你缓冲器的额外ido钩子,但是不清楚为什么你需要它:ido-minibuffer-setup-hook.