4

Emacsのグローバルオーバーライドキーバインディングで与えられたすべてに従った後でも、 私はまだそれを機能させることができませんでした。

M-o次のように、グローバルキーマップのother-windowにバインドしました。

(defvar my-keys-minor-mode-map (make-keymap) "my-keys-minor-mode keymap.")
(define-key my-keys-minor-mode-map "\M-o" 'other-window)

(define-minor-mode my-keys-minor-mode
  "A minor mode so that my key settings override annoying major modes."
  t " my-keys" 'my-keys-minor-mode-map)

(my-keys-minor-mode 1)

(defun my-minibuffer-setup-hook ()
  (my-keys-minor-mode 0))
(add-hook 'minibuffer-setup-hook 'my-minibuffer-setup-hook)

;; Maintain the above keymap even after loading a new library
(defadvice load (after give-my-keybindings-priority)
  "Try to ensure that my keybindings always have priority."
  (if (not (eq (car (car minor-mode-map-alist)) 'my-keys-minor-mode))
      (let ((mykeys (assq 'my-keys-minor-mode minor-mode-map-alist)))
        (assq-delete-all 'my-keys-minor-mode minor-mode-map-alist)
        (add-to-list 'minor-mode-map-alist mykeys))))
(ad-activate 'load)

しかし、diredモードはこれをオーバーライドし、に再マップしdired-omit-modeます。

私は何が欠けていますか?

4

1 に答える 1

3

マイナーモードはバッファローカルとして定義されています。次のように、グローバルに定義できます。

(define-minor-mode my-keys-minor-mode
  "A minor mode so that my key settings override annoying major modes."
  :global t
  :lighter " my-keys")

ただし、my-minibuffer-setup-hookグローバルにもオフにします。また、グローバルであり、基本的に常にオンにしている場合は、を提供しない方がよい場合があり:lighter " my-keys"ます。これにより、モードラインが不必要に埋められることはありません。

于 2012-09-21T13:35:52.313 に答える