2011-07-23 3 views
5

En particulier, lorsque je charge dired-x, il définit M-o pour basculer le mode omettre mineur. J'utilise M-o pour other-window, donc je voudrais changer la clé que dired-x lie à autre chose. J'ai essayé de régler la clé après le chargement du mode comme ceci:Comment remplacer/modifier les raccourcis clavier en mode elisp?

(add-hook 'dired-mode-hook 
    (lambda() 
    (dired-omit-mode 1) 
    (global-set-key (kbd "M-o") 'other-window) 
    )) 

mais en vain.

+1

Essayé regardant http://stackoverflow.com/questions/3773820/emacs-shortcuts-specific-for-a-file-type/3773856#3773856? – huitseeker

+0

N'a pas trouvé celui-là, merci. C'est la même réponse que celle acceptée ci-dessous. – Loren

+1

J'adore le débordement de la pile: non seulement c'est exactement ce que je voulais, c'est aussi exactement la reliure que je voulais ... – Shep

Répondre

7

légèrement mieux que d'ajouter une autre copie de votre commande globale de liaison à la carte du mode local, serait la suppression de la liaison locale de sorte qu'il n'ombres plus la liaison globale. Vous pouvez également donner à cette fonction une nouvelle clé avant de faire cela.

(eval-after-load "dired-x" 
    '(progn 
    ;; Add an alternative local binding for the command 
    ;; bound to M-o 
    (define-key dired-mode-map (kbd "C-c o") 
     (lookup-key dired-mode-map (kbd "M-o"))) 
    ;; Unbind M-o from the local keymap 
    (define-key dired-mode-map (kbd "M-o") nil))) 
5

Les liaisons en mode dired "ombrent" les globales de sorte que votre "clé-ensemble-global" n'aide pas. Qu'est-ce que vous voulez faire est passer outre le mode dired obligatoire:

(add-hook 'dired-mode-hook 
    (lambda() 
    (dired-omit-mode 1) 
    (define-key dired-mode-map (kbd "M-o") 'other-window) 
    )) 
+0

Merci! Pour quelqu'un d'autre avec cette question, il n'est pas nécessaire de mettre la clé de définition dans le crochet. – Loren

+3

Mais il est nécessaire que 'dired-mode-map' existe lorsque vous l'utilisez. – phils

Questions connexes