1

在 OS X 上, .emacs 仅包含以下行:

(require 'dired)

(add-hook 'dired-load-hook
      (function (lambda ()
              (load "dired-x"))))

dired-omit-mode在为键绑定Modired-x而战。ns-open-file-using-panelns-win

我理解上面的 .emacs 指定应该在 dired 之后加载 dired-x,因此当 emacs 启动时应该在 dired-x 中绑定 Mo。不是这种情况。由于某种原因,ns-win 中的绑定获胜。

如何在启动时强制使用 dired-x 键绑定?

编辑

(遵循 phils 的建议)如果我的 .emacs 还加载了定义 Mo 的另外两个包

(require 'ns-win)
(require 'facemenu)
(require 'dired)

(add-hook 'dired-load-hook
      (function (lambda ()
              (load "dired-x"))))

即使 dired 最后加载,facemenu 中的绑定仍然会接管。

4

2 回答 2

0

首先, load ns-win,以便它设置它的绑定。然后这个:

(add-hook 
 'dired-mode-hook
 (lambda()
   (require 'dired-x)
   (define-key dired-mode-map (kbd "M-o") 'dired-omit-mode)))

dired-mode-hook覆盖之前绑定的任何内容M-ofor dired-mode

于 2013-08-07T16:34:04.247 回答
0

编辑:啊,对不起,我的回答不相关。

首先 dired-x 将其绑定添加到主模式映射 (dired-mode-map) 并且所有次要模式映射优先于主模式映射。

其次,我假设您ns-win使用的是次要模式也可能无效。我真的应该告诉你首先链接到那个(你应该总是链接到非标准库)。

谷歌建议它使用全局键映射,在这种情况下它不应该覆盖 dired 映射,而且它使用 super 而不是 meta 作为其修饰键,所以我完全不确定我正在查看你的版本'正在使用。

如果您ns-win确实提供了次要模式,那么最简单的选择可能是使用自定义函数破坏次要模式的绑定,该函数检查主要模式,然后根据需要调用原始函数或 dired-x 函数。

您可以使用Emacs 键绑定回退方法来最小化假设的数量。您的测试将是(eq major-mode 'dired-mode).


原始答案;实际上与问题无关:

次要模式映射优先级由 中的条目顺序控制minor-mode-map-alist,这取决于加载库的顺序。最近加载的模式具有最高优先级(新条目添加在列表的前面)。

请参阅https://stackoverflow.com/a/5340797/324105以获取操作此 alist 以提供特定模式优先级的一个示例(在您的情况下,您可能希望使用eval-after-load它来执行测试,因为它是一次性的)。

或者,您可以按所需顺序强制加载/要求这两个库。Emacs 的启动时间稍长,但您不必担心会弄乱 alist。

我只是建议使用您喜欢的任何方法。

于 2013-08-08T02:10:39.157 回答