Définir un raccourci clavier spécifique pour la mode Emacs
Si je sais comment faire pour définir une clé de liaison dans Emacs, j'ai du mal à même Google le code pour un local (minor-mode spécifique) clé de liaison. Par exemple, j'ai ce code dans mon .emacs
:
;; PDFLaTeX from AucTeX
(global-set-key (kbd "C-c M-p")
(lambda ()
(interactive)
(shell-command (concat "pdflatex " buffer-file-name))))
Je ne veux pas définir à l'échelle mondiale. Est-il une fonction comme local-set-key
?
- De plus en plus et je suis aller à la Emacs Wiki pour obtenir de l'aide: emacswiki.org/emacs/KeyBindingDiscussion Là, il montre que vous pouvez ajouter un raccourci clavier à une touche mode carte et montre aussi comment trouver cette carte.
- Yepp... j'ai vu qu'on a déjà, mais j'ai
Symbol's value as variable is void: LaTeX-mode-map
tout le temps. Hmmm...
Vous devez vous connecter pour publier un commentaire.
Pour lier une clé dans une mode, vous avez besoin d'attendre pour le mode d'être chargé avant la définition de la clé. On peut imposer à la mode, ou de l'utilisation
eval-after-load
Ne pas oublier non plus
'
—eval-after-load
n'est pas une macro, donc il a besoin d'eux.eval-after-load
par programmation?'LaTeX-mode
au lieu de'latex
fera tout aussi bien.[(tab)]
est l'ancienne syntaxe pour(kbd "TAB")
[(tab)]
est le même que[tab]
qui est la clé de séquence envoyé lorsque vous appuyez sur laTAB
clé dans l'interface utilisateur de la version d'Emacs.(kbd "TAB")
Otoh, que est le même que[?\t]
qui est la clé de séquence envoyé quand vous frappez la mêmeTAB
clé dans un terminal texte (qui est également la même clé de séquence envoyé quand vous frappezC-i
). Les deux options sont "unifiée" à l'intérieur d'Emacs parfunction-key-map
qui reconfigure[tab]
à(kbd "TAB")
si il n'y a pas de liaison à[tab]
. Donc, si vous voulez que votre liaison de travailler à la fois dans une interface graphique, et dans un tty, de mieux utiliser les(kbd "TAB")
.J'utilise la suite:
d'avoir une liaison définie pour le LaTeX mode seul.
#
est redondant avec moi.'latex-mode-hook
à la place (pas de plafond). J'ai aussi trouvé le#
inutiles.Vous devez identifier la carte clé pour ce mode (par exemple,
LaTeX-mode-map
) et utiliser la fonctiondefine-key
. Comme un exemple, avec l'activation deoutline-minor-mode
au sein de LaTeX de mode, j'ai:Dans ce cas, le mode majeur (LaTeX) détient la clé de liaison, mais il y a aussi un
outline-minor-mode-map
.Aucune des autres réponses satisfait mes besoins. Si cela peut aider d'autres personnes. Je voulais
Tab
de sauter au début de la ligne si je suis dans le Mal est en mode normal (en gros: cela signifie partout dans Emacs), mais j'ai plutôt voulu qu'il cycle entre org point les états-unis si je suis dans un org-mode document.Une option était pour déconner avec distinct des liaisons et de la constante de liaison-reconsolidation chaque fois que je suis passé tampons (parce que le mal ne permet qu'une seule liaison par clavette dans son état normal).
Mais une option plus efficace était de faire
Tab
mon propre code qui exécute la fonction requise, sur la base duquel mode majeur le tampon courant utilise. Donc, si je suis dans un org tampon, ce code s'exécuteorg-cycle
, et sinon il fonctionneevil-first-non-blank
(rendez-vous au premier caractère non-blanc sur la ligne).La technique que j'ai utilisé ici peut également être utilisé par l'appel de votre fonction personnalisée via
global-set-key
au lieu de cela, pour les personnes qui utilisent régulièrement des non-mal Emacs.Pour ceux qui ne savent pas Emacs lisp, la première ligne après l'instruction "if" est la véritable action, et la ligne d'après ce qui est le faux-action. Donc, si
major-mode
est égal àorg-mode
, nous couronsorg-cycle
, sinon, nous couronsevil-first-non-blank
dans tous les autres modes: