2011-08-29 4 views
4

Dans mon fichier de configuration emacs, j'ai créé un mode mineur afin que je puisse relier les clés sans avoir à les relier séparément pour chaque mode majeur. Ce faisant, j'ai remappé C-m sur kill-ring-save. Cependant, par défaut, emacs C-m est identique à RET. Par conséquent, lorsque je suit dans mes .emacs:unbind C-m de RET

(define-key my-minor-mode-map (kbd "C-m") 'kill-ring-save) 

Lorsque j'appuie sur la touche retour, kill-ring-save est exécuté

Comment dois-je m'y fixer mon fichier de configuration pour que je ne cours pas dans ces problèmes?

Je suis également ouvert à une approche différente de la création d'une reliure à clé qui fonctionne dans tous les principaux modes.

Edit: Je suis en cours d'exécution en mode graphique

Répondre

8

Cela ne fonctionnera pas en mode non graphique emacs. Lorsqu'il est exécuté dans un terminal, renvoie et C-m ne peuvent pas être distingués.

Si vous n'êtes pas en cours d'exécution emacs en mode terminal, juste rebind <return> et C-m séparément.

Par exemple:

(cond (window-system ; ensure not running in a terminal 
     (local-set-key (kbd "<return>") 'newline) 
     (local-set-key (kbd "C-m") 'kill-ring-save))) 
+0

Je suis en cours d'exécution en mode graphique, mais comme ' « cm »' est le même que 'enter' en rien emacs que je fais (y compris les variations de votre réponse) a travaillé pour moi. – pseudosudo

+1

Essayez 'C-h k ' pour afficher la liaison de touche pour le retour. Il devrait initialement montrer 'RET (traduit de ) s'exécute ...'. Après la reliaison, il devrait juste dire ' s'exécute ...'. Une fois que '' n'est plus traduit en 'RET', vous devriez pouvoir les lier indépendamment. – ataylor

+1

Essayez de démarrer Emacs avec '-q' pour vous assurer qu'aucune de vos configurations n'interfère. Ensuite, collez le code d'ataylor dans le tampon de travail et évaluez-le. Quand je le fais dans mon GNU Emacs 23.2.1 sous Ubuntu, tout fonctionne comme prévu (à part le fait que '' new-line' devrait être '' newline''). – Thomas