Emacs:移动整个次要模式的键绑定

时间:2018-02-18 19:04:19

标签: emacs key-bindings

我已经牦牛剃了2个小时,需要继续前进,但我会把它扔到互联网上,看看是否有任何问题。

我正在midje-mode加载clojure-mode - midje-mode是次要模式。 keymap clobbers projectile-mode,坦率地说,它更有用,更常用(对我而言)。

midje-mode定义C-c下的所有内容,但没有后续和弦(为什么?这是一个该死的小模式!)。所以我想把所有内容都移到C-c C-m或类似的东西。

我已经尝试了一切。什么都没有。我已经连接到次模式启动以取消映射并映射键映射中的所有条目。我做了同样的主要模式(clojure-mode)。旧的绑定不会一直离开,新的绑定永远不会发生。

我试过以下:http://emacsredux.com/blog/2013/09/25/removing-key-bindings-from-minor-mode-keymaps/没有骰子。 (define-key 'map (kbd "<foo>") (kbd "<bar>"))不起作用,而且坦率地说,如果有的话,它在Emacs的GNU文档中没有任何地方,所以我不知道作者在谈论的是什么。

我只是要删除midje-mode并继续前进,但知道这会很好。

1 个答案:

答案 0 :(得分:1)

以下内容将按照您的要求执行:

;; Move the `midje-mode-map' prefix from "C-c" to "C-c ."
(with-eval-after-load "midje-mode"
  (let ((prefix-map (lookup-key midje-mode-map (kbd "C-c"))))
    (define-key midje-mode-map (kbd "C-c") nil)
    (define-key midje-mode-map (kbd "C-c .") prefix-map)))

那就是说,我觉得已经提到的其他一些建议已经产生了影响,所以你说他们没有做过任何事情的事实让我觉得有些不妥你试图应用它们,或者你没有注意到错误。

请注意,无法在加载库之前对midje-mode-map进行所需的更改(因为否则键映射不存在);但midje-mode-hook在加载该库之前无法运行(因此该方法肯定应该有效);并且在进行更改之前require库也确保它已加载(因此应该也可以正常工作)。

在这些情况下,通常优选使用eval-after-load方法,因为您只希望此代码运行一次,并且您不必提前加载库。