2010-04-09 6 views
0

J'ai configuré mes emacs utiliser M-j comme backward-char parComment définir une combinaison de touches qui est valable dans tous les modes Emacs

(global-set-key (kbd "M-j") 'backward-char) ; was indent-new-comment-line 

dans mon fichier .emacs. Cela fonctionne très bien dans de nombreux modes (text/org/lisp).

Mais c++-mode & php-mode il est lié à la valeur par défaut c-indent-new-comment-line
Comment puis-je lier M-j à utiliser backward-char dans ces modes aussi.
Et en général pour TOUS les modes.

Merci,
AnotherEmacsLearner

+0

Regardez cette question: http://stackoverflow.com/questions/683425/globally-override-key-binding-in -emacs – scottfrazer

Répondre

1

Ce problème a été adressé in this question. La façon de faire est de créer un mode mineur avec vos liaisons. Vos liaisons en mode mineur masquent les liaisons de tout mode majeur. J'aime votre exemple, puisque depuis quelques semaines, je rebondis Mh, j, k, l à leurs mouvements vim équivalents, et fait un mode mineur pour le faire (ça a été une bonne idée Les liaisons par défaut d'Emacs sont vraiment terribles). Voici un exemple d'une partie de mon code:

(defvar kirkland-minor-mode-map (make-keymap) "kirkland-minor-mode keymap.") 
(define-key kirkland-minor-mode-map (kbd "M-h") 'backward-char) 
(define-key kirkland-minor-mode-map (kbd "M-l") 'forward-char) 
(define-key kirkland-minor-mode-map (kbd "M-j") 'next-line) 
(define-key kirkland-minor-mode-map (kbd "M-k") 'previous-line) 
(define-minor-mode kirkland-minor-mode 
    "A minor mode so that my key settings aren't shadowed by other major/minor modes" 
    t " kirkland" 'kirkland-minor-mode-map) 

Une autre chose que je devrais mentionner est que tout ceci surpassera toutes les liaisons de mode majeur, il peut encore être remplacé par d'autres modes mineurs qui sont chargés plus tard.

+0

se sent bien d'avoir mon «propre» mode :) – shashankpv

0

Rien ne peut arrêter tout mode de redéfinir une touche comme il l'entend et les ombres toujours global-set-key. Vous devez donc le redéfinir pour chaque mode qui le redéfinit:

(defun redefine-cc-mode-keys() 
    (define-key c-mode-base-map "M-J" 'backward-char)) 
(add-hook 'c-initialization-hook 'redefine-cc-mode-keys) 

ou similaire.

10

Il existe des règles concernant les clés censées être dépendantes du mode et celles qui ne le sont pas. Vous pouvez remplacer les liaisons modifiées par un mode spécifique, mais c'est un problème et cela doit être fait pour chaque mode que vous utiliserez. Il est plus intelligent de garder vos propres liaisons neato transversales aux touches que les principaux modes ne toucheront pas par principe. J'aime particulièrement les touches F1 - F12 pour cela, ou les touches de fonction Sun quand je peux les obtenir. Les séquences C-c + sont également explicitement réservées aux commandes définies par l'utilisateur et ne seront pas relancées par les modes majeurs. (Voir: Key Binding Conventions)

+0

Oh bien; il s'avère que ce n'est pas aussi facile que je le pensais. – shashankpv

4

I clés non définies qui sont la voie à des modes spécifiques comme celui-ci:

(add-hook 'gnus-summary-mode-hook 
      (function (lambda() 
         (local-unset-key '[M-down]) 
         (local-unset-key '[M-up])))) 

(add-hook 'org-mode-hook 
      (function (lambda() 
         (local-unset-key '[S-down]) 
         (local-unset-key '[S-left]) 
         (local-unset-key '[S-right]) 
         (local-unset-key '[S-up])))) 
Questions connexes