¿Cómo distinguir Ci de TAB?

20

Normalmente, por razones históricas, emacs trata el TABcódigo C-iclave 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>y C-i; taby Ctrl+ ipor otro lado son las teclas físicas en el teclado.

Sin embargo, por el momento, emacs trata el TABy C-icomo 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-mapsno cambia. Modificarlo para usarlo en deletelugar de hacerlo delqda 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.
  • Usar el input-decode-mapmapa para Ctrl+ ia algún código de control post-ASCII es casi lo que estoy buscando. Excepto que no funciona correctamente con la kbdmacro, 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 \tliteral) para Ctrl+ i funciona, pero tendría que modificar todos los archivos fuente que usan el tipo incorrecto de tab[Leer: el código clave TAB] 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>y TABdebe correlacionarse con una unión mientras que el Ctrl+ icomo código clave C-idebe 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?

elemakil
fuente
2
Tenga en cuenta que TABy C-i(los códigos, no las claves) son uno y el mismo por definición de TAB.
Stefan
@ Stefan Por eso agregué la nota . Voy a editar la publicación y ponerla allí.
elemakil
Posible duplicado de ¿Cómo vincular Ci como diferente de TAB?
Gilles 'SO- deja de ser malvado'
En mi opinión, esta pregunta no es un duplicado, porque quiere reubicar todas las combinaciones de teclas definidas en TAB (incluso las de paquetes externos), para usar <tab> en su lugar. Mientras que la otra pregunta era cómo diferenciarlos en su propio código.
Malabarba
Mi sugerencia sería aconsejar kbdtraducir TAB como [tab]. Simplemente no funcionará para las partes precargadas de Emacs.
Malabarba

Respuestas:

21

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.

Stefan
fuente
¿Te preguntas qué tipo de teclados usas? Con los típicos teclados QWERT, la distinción es simplemente aparente, y no poder distinguir estas teclas es un dolor ...
Ivan Huang