Normalmente, por razones históricas, emacs trata el TAB
código C-i
clave y la clave de la misma manera, cf. la documentación de emacs lisp sobre las teclas de función o la respuesta de abo-abo sobre la pregunta "¿Cuál es la diferencia entre TAB y?" .
NOTA: En este post, son códigos de teclas
TAB
,<tab>
yC-i
; taby Ctrl+ ipor otro lado son las teclas físicas en el teclado.Sin embargo, por el momento, emacs trata el
TAB
yC-i
como la misma cosa, es decir,(equal (kbd "TAB") (kbd "C-i"))
->t
.
Sin embargo, dado que ya no vivimos en la piedra de la informática, esto me resulta extremadamente molesto. Hay algunas sugerencias sobre lo que se puede hacer para solucionar esto, p. Ej.
"¿Cómo puedo vincular un comando a Ci sin cambiar TAB?"
- La solución de Trey no funcionó para mi, la variable
local-function-key-maps
no cambia. Modificarlo para usarlo endelete
lugar de hacerlodelq
da como resultado una variable modificada, pero no trae resolución ... taby Ctrl+ isiguen siendo los mismos. - Traducir al hipermapa parece una solución alternativa de la década de 1980 ... También podría querer usar Hyper+ i.
- La solución de Trey no funcionó para mi, la variable
Usar el
input-decode-map
mapa para Ctrl+ ia algún código de control post-ASCII es casi lo que estoy buscando. Excepto que no funciona correctamente con lakbd
macro, lo que significa que uno debe modificar todos los bits del código fuente que se unirá a Ctrl+ i. Podría decirse que esta es la mejor solución dado que todo el código fuente se modifica correctamente.El uso de
(kbd "<tab>")
for taby(kbd "C-i")
(que se traduce,(kbd "TAB")
es decir, el\t
literal) para Ctrl+ i funciona, pero tendría que modificar todos los archivos fuente que usan el tipo incorrecto de tab[Leer: el código claveTAB
] que es molesto.
Esto se ha sugerido, por ejemplo, en un problema de github y también en emacs.sx .
Ninguna de estas soluciones parece soluciones reales, prefiero considerarlas soluciones o piratas informáticos (del error existente ).
¿Hay una manera de salir allí para forzar emacs para asignar taba
(kbd "<tab>")
y(kbd "TAB")
mientras Ctrl+ iestá asignada a(kbd "C-i")
menos que modyfing el código fuente de emacs?Este enfoque debe ser completamente invisible para el usuario, lo que significa que el tabcomo códigos de teclas
<tab>
yTAB
debe correlacionarse con una unión mientras que el Ctrl+ icomo código claveC-i
debe asignar a otro vinculante.
En una nota menos seria: ¿Algún desarrollador de emacs aquí que pueda comentar si esto se cambiará / arreglará en el código fuente de emacs en algún momento?
fuente
TAB
yC-i
(los códigos, no las claves) son uno y el mismo por definición deTAB
.kbd
traducir TAB como [tab]. Simplemente no funcionará para las partes precargadas de Emacs.Respuestas:
El futuro ya pasó, y la edad de piedra de la informática está a punto de llegar. Todos los terminales de texto que conozco aún envían exactamente la misma secuencia de bytes a Emacs para C-i, por TABlo que la necesidad original de "unificarlos" todavía está muy presente en nosotros.
El input-decode-map (à la
(define-key input-decode-map "\C-i" [C-i])
) es probablemente tan bueno como lo es ahora.Como Emacs ex-mantenedor, daría la bienvenida a una mejor solución a este problema, con el fin de liberar los C-i(y C-my C-[teclas) bajo interfaces gráficas de usuario (probablemente los hacen "reservados para el usuario"). Pero no sé cómo hacerlo sin causar muchos problemas con los paquetes existentes.
fuente