elisp – Diferencias entre configurar teclas de modo principal con un gancho o agregarlas al mapa de modo

Pregunta:

Supongamos que descargué un modo principal llamado modo magical-mode , y tiene su propio magical-mode-map teclas magical-mode-map llamado magical-mode-map . Este modo también proporciona un gancho magical-mode-hook que se ejecuta cada vez que magical-mode convierte en el modo principal de un búfer. Ahora quiero modificar mi archivo de inicio para agregar algunas combinaciones de teclas personalizadas para usar en ese modo.

Parece que hay (al menos) dos formas de configurar combinaciones de teclas personalizadas para magical-mode . El que veo con más frecuencia es este:

(defun my-magical-keys ()
  (local-set-key (kbd "C-i") 'previous-line)
  (local-set-key (kbd "C-k") 'next-line)
  (local-set-key (kbd "C-j") 'backward-char)
  (local-set-key (kbd "C-l") 'forward-char))
(add-hook 'magical-mode-hook 'my-magical-keys)

Pero también es posible hacerlo de esta manera:

(define-key magical-mode-map (kbd "C-i") 'previous-line)
(define-key magical-mode-map (kbd "C-k") 'next-line)
(define-key magical-mode-map (kbd "C-j") 'backward-char)
(define-key magical-mode-map (kbd "C-l") 'forward-char)

En realidad, el segundo método me parece más limpio. ¿Hay alguna ventaja en hacerlo de una forma sobre la otra?

Respuesta:

El segundo enfoque es preferible ya que modifica el mapa de teclas del modo solo una vez.

Si lo hace usando el gancho del modo, se llamará cada vez que ese modo esté habilitado en algún búfer. Si lo hace de nuevo, por lo general, no tendrá ningún efecto porque las claves están vinculadas nuevamente a lo que ya están vinculadas. Los mapas de teclas del modo principal son "locales" para el modo principal, no para los búferes individuales que usan ese modo, por lo que si cambia un enlace en uno de estos búferes usando local-set-key , eso afectará a todos los búferes con el mismo modo principal.

local-set-key está destinado principalmente a ser utilizado como un comando. Una vez que haya determinado que le gustaría que algún cambio sea persistente, use define-key con el mapa de define-key modo como primer argumento.

Si usa un gancho para modificar el mapa de teclas una y otra vez, eso podría entrar en conflicto con el uso previsto de local-set-key . Digamos que usó Mx local-set-key RET Ci fancy-previous-line RET porque quiere probar esa variante de previous-line . Si ahora abre un nuevo búfer que usa el mismo modo principal, entonces el gancho se ejecutará nuevamente y anulará su enlace temporal, en todos los búferes que usan ese modo principal, incluido el búfer en el que usó previamente local-set-key .

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım