Emacs vuelve a enlazar C-i mientras mantiene los enlaces <tab>

3

Estoy usando Aquamacs. Se puede distinguir entre <tab>, la tecla de tabulación real, y TAB, que viene de teclear C-i. Quiero atarme C-i a 'next-line permanentemente. Esto funciona para eso:

(global-set-key (kbd "TAB") 'next-line)

Pero luego los mapas de modo anulan la TAB con el comportamiento de autocompletar o lo que sea y pierdo la funcionalidad de la siguiente línea. Podría poner mi enlace en el mapa-terminal-local-overriding, pero prefiero que los mapas de modo se reasignen <tab> así que todavía puedo usar la función que el modo asigna a la pestaña.

Puedo volver a enlazar manualmente la pestaña para cada modo que uso, pero espero que haya una manera fácil de redirigir todos los TAB mapeos a la tecla de tabulación sin desordenar C-i.

mckeed
fuente

Respuestas:

2

Eso es un poco complicado, pero posible. Lo que hago para esta situación exacta es crear un modo menor, a saber gvol-mode, y luego en esto se unen C-i a previous-line (o lo que quieras). Entonces me ato & lt; tab & gt; a la función de abajo.

(defun gvol-indent-for-tab-command ()
  "This is to fix `indent-for-tab-command' for `gvol-mode'.
It runs [tab] or C-i with `gvol-mode' nil because `gvol-mode'
binds C-i to a different command.  Ideally this should take into
account window system so that it can DTRT in a terminal (whatever
the right thing is)."
  (interactive)
  (let* ((gvol-mode nil)
         (command (or (key-binding [tab])
                      (key-binding "\C-i"))))
    ;; This is to satisfy `python-indent-line' which checks
    ;; `this-command' to cycle
    (setq this-command 'indent-for-tab-command)
    ;; Make people think this was called with C-i.  This allows
    ;; `self-insert-command' to work
    (setq last-command-event 9)
    (call-interactively command)))

Para explicarlo un poco, lo dejo atar. gvol-mode a nil de modo que cuando haga la búsqueda de teclas, mi modo menor no estará en juego. Así encontrará el enlace para & lt; tab & gt; o C-i eso estaría en su lugar si el modo menor no estuviera activado. Luego, para que funcionen algunas funciones tengo que configurar this-command a indent-for-tab-command. También lo hago parecer como si hubiera escrito C-i lo que le permite trabajar con yasnippet-mode IIRC.

Ivan Andrus
fuente
Esto funcionó muy bien. ¡Gracias! Es especialmente bueno tener esos arreglos de borde, estoy seguro de que me ahorraste mucha frustración
mckeed
1
También tuve éxito usando este método para [return] y C-m. Muy útil.
mckeed
De nada, y sí, hubo mucha frustración involucrada. :-)
Ivan Andrus