Establecer el enlace de teclas personalizado para el modo Emacs específico
key-bindings (4)
Debe identificar el mapa de teclas para ese modo (por ejemplo, LaTeX-mode-map
) y usar la función define-key
. Como ejemplo, junto con la activación del modo de outline-minor-mode
LaTeX, tengo:
(define-key LaTeX-mode-map [(tab)] ''outline-cycle))
En este caso, el modo mayor (LaTeX) contiene el enlace de teclas, pero también hay un outline-minor-mode-map
.
Aunque sé cómo establecer un enlace de clave global en Emacs, me resulta difícil igualar el código de Google para un enlace de clave local (específico del modo menor). Por ejemplo, tengo este código en mi .emacs
:
;; PDFLaTeX from AucTeX
(global-set-key (kbd "C-c M-p")
(lambda ()
(interactive)
(shell-command (concat "pdflatex " buffer-file-name))))
No quiero configurarlo globalmente. ¿Existe una función como local-set-key
?
Ninguna de las otras respuestas satisfacía mis necesidades. Así que esto puede ayudar a otras personas. Quería que Tab
saltara al principio de la línea si estoy en el modo normal de Evil (básicamente: esto significa en todas partes en Emacs), pero en su lugar quería que alternara entre los estados de los elementos de la organización si estoy en un documento de modo org.
Una opción era perder el tiempo con enlaces separados y un enlace constante cuando se cambiaban los buffers (porque el mal solo permite un enlace por clave en su estado normal).
Pero una opción más eficiente era hacer que Tab
ejecute mi propio código, que ejecuta la función requerida en función del modo principal que utiliza el búfer actual. Entonces, si estoy en un búfer de organización, este código ejecuta org-cycle
y, de lo contrario, se ejecutará de forma evil-first-non-blank
(vaya al primer carácter que no sea un espacio en blanco en la línea).
La técnica que utilicé aquí también se puede usar llamando a su función personalizada a través de global-set-key
, para las personas que usan Emacs no malignos normales.
Para aquellos que no conocen Emacs lisp, la primera línea después de la frase "if" es la acción verdadera, y la línea después de eso es la acción falsa. Entonces, si major-mode
es igual org-mode
, ejecutamos org-cycle
; de lo contrario, ejecutamos el evil-first-non-blank
en todos los demás modos:
(defun my/tab-jump-or-org-cycle ()
"jumps to beginning of line in all modes except org mode, where it cycles"
(interactive)
(if (equal major-mode ''org-mode)
(org-cycle)
(evil-first-non-blank))
)
(define-key evil-normal-state-map (kbd "<tab>") ''my/tab-jump-or-org-cycle)
Para enlazar una clave en un modo, debe esperar a que se cargue el modo antes de definir la clave. Uno podría requerir el modo, o usar eval-after-load
(eval-after-load ''latex
''(define-key LaTeX-mode-map [(tab)] ''outline-cycle))
No olvide tampoco ''
- eval-after-load
no es una macro, así que las necesita.
Yo uso lo siguiente:
(add-hook ''LaTeX-mode-hook
(lambda () (local-set-key (kbd "C-0") #''run-latexmk)))
tener un enlace definido para el modo LaTeX solo.