Quiero hacer Control-ifuncionar indent-region(básicamente porque Xcode ya ha construido esa memoria muscular).
Me doy cuenta de eso Control-iy no puedo tabdistinguirlos en el sentido de Ascii, pero están en el sentido del código clave.
He intentado lo obvio:
(global-unset-key (kbd "C-i"))
(global-set-key (kbd "C-i") 'indent-region)
en vano: presionar Control-isolo hace lo que hace la tabtecla en el contexto actual. ¿Hay algo que pueda hacer para ayudar a Emacs a tratar el botón de pestaña de manera diferente Control-i?
Actualización: Creo que un resultado equivalente se lograría por ser capaz de volver a asignar lo que un tab/ Control-ihace prensa cuando se selecciona una región.

Respuestas:
No creo que esto se pueda lograr desde un terminal, pero en modo GUI podría intentar esto:
Hago lo mismo
C-mpara que pueda distinguirse deRETEDITAR:
Lo siguiente debería funcionar si está en modo GUI o TTY:
No es bonito, pero parece hacer el trabajo. Agradezco cualquier modificación o edición de este código según sea necesario.
fuente
<C-i>y[C-i]podría haber sido un identificador arbitrario, como<foobar>y[foobar], y aún funcionaría; simplemente no lo llamestabobackspace.emacsarchivo pero ambosTAByC-ise reasigna :-( @nispio(window-system)devueltonilen el momento en que.emacsse cargó. Esto podría deberse a que está ejecutando una instancia no gráfica de Emacs, o porque está ejecutando un demonio Emacs.Marcos GUI
En los marcos de la GUI (ya sea X11, Windows, OSX, ...), Emacs lee la Tabtecla como la
tabtecla de función. Sin embargo, debido a que la Tabtecla en los terminales envía tradicionalmente el carácter^I( Control + I), Emacs traduce latabtecla de función al carácter Control + I (carácter 9), que se muestra comoTAB. Esta traducción se realiza a través defunction-key-map.Una traducción similar ocurre con algunas otras teclas de función. ( Backspacey Deletees un caso espinoso que no discutiré en detalle aquí).
Si desea separar Tabde Ctrl+ por Icompleto, elimine el enlace de
function-key-map:Sin embargo, esto no es muy útil, ya que las entradas
function-key-mapse anulan mediante enlaces en mapas de teclas específicos del modo o en el mapa global. Entonces, si desea definir un enlace diferente paratab, simplemente hágalo (en Elisp, no de forma interactiva, porque el indicador de lectura clave aplica lafunction-key-maptraducción para que termine volviendo a vincularTABy notab):Todos los modos estándar que modifican la acción de la Tabtecla lo hacen modificando la
TABtecla, que es un apodo para elC-icarácter generado por la combinación de teclas Ctrl+ I. Si desea que se apliquen enlaces estándar entablugar deC-i, dejefunction-key-mapy modele mapas de teclas solos y, en su lugar, redirija Ctrl+ Ia una tecla diferente.Ahora Emacs informará Ctrl+ Icomo "
<control-i>(traducido deTAB)". Esto no es bonito, pero es inevitable: la bonita impresión del carácter 9 tal comoTABestá integrado en el código fuente de Emacs.Marcos terminales
En marcos de terminales, el problema es más difícil y a menudo imposible. Los terminales no transmiten claves, transmiten caracteres (más precisamente, de hecho, transmiten bytes). La Tabclave se transmite como el carácter de tabulación, que es Control + I, igual que lo que genera la combinación de teclas Ctrl+ I. Las teclas de función que no tienen un carácter correspondiente (como las teclas del cursor) se transmiten como secuencias de escape, es decir, secuencias de caracteres que comienzan con
ESC= Control + [(por lo que Emacs define escapecomo una tecla de prefijo,ESCtiene que ser un prefijo). Consulte ¿Cómo funcionan la entrada del teclado y la salida de texto? para más antecedentesHay algunos terminales que se pueden configurar para enviar diferentes secuencias de teclas para las teclas de función, pero no muchos. Tanto libtermkey / libtickit de LeoNerd como xterm de Thomas Dickey (desde la versión 216) lo respaldan. En Xterm, la función es opcional y se activa a través del
modifyOtherKeysrecurso. Sin embargo, no conozco ningún emulador de terminal popular que no sea xterm que admita esto, en particular los muchos emuladores creados en libvte . Algunos emuladores de terminal le permiten hacer esto manualmente a través de una correspondencia definida por el usuario desde los teclados para escapar de las secuencias.Este mecanismo permite distinguir muchas combinaciones de teclas, no solo tab / Ci, return / Cm y escape / C- [. Consulte Problemas con las combinaciones de teclas al usar la terminal para obtener una descripción más detallada.
La función xterm básica es compatible desde Emacs 24.4. Sin embargo, los fundamentos (en particular Tab, Return, Escape, Backspace) siguen enviando los caracteres de control tradicionales, porque eso es lo que esperan que las aplicaciones. Hay un modo donde Ctrl+ letterenvía una secuencia de escape en lugar del carácter de control. Entonces, para distinguir las teclas de función de las Ctrlcombinaciones en Emacs 24.4, modifique su soporte para
modifyOtherKeysusar este modo estableciendo el recurso en 2 en lugar de 1.fuente