¿Por qué emacs no admite eventos clave arriba / abajo?

9

AFAIK emacs no solo admite keyup/keydowneventos keypressed. Un ejemplo de una consecuencia es que cuando queremos marcar una región, primero tenemos que establecer una marca set-mark-commandy luego podemos marcar la región moviéndonos alrededor del punto. Si bien esta es realmente una característica interesante, ya que no es necesario mantener presionada una tecla Mayús mientras se marca el texto, a veces sería deseable tener el mismo comportamiento que en otros editores. Esta pregunta es para entender por qué emacs no admite esta función y por qué se considera mejor . ¿También hay un enfoque ideomático de cómo podríamos resolver esto en emacs?

eje
fuente
66
Emacs también funciona en una terminal, y los eventos clave arriba / abajo no tienen sentido en ese entorno. Muy probablemente, esa es al menos una razón histórica por la que estos eventos no son compatibles. Sin embargo, eso no significa que no puedan ser compatibles. Sospecho que nadie ha visto una necesidad lo suficientemente apremiante como para molestarse con eso.
Harald Hanche-Olsen
1
Bien, ese es un argumento válido, aunque hay otras características en emacs que solo funcionan en un entorno gráfico (fuentes, eventos del mouse, etc.)
eje
3
Escribí un código que simula eventos de tecla arriba / abajo para obtener una vista previa de un archivo con la tecla presionada y luego cerrar el búfer de vista previa con la tecla arriba, como la respuesta dice que es hacky, pero tal vez podría moldearse en algo estable. emacs.stackexchange.com/questions/275/…
Jordon Biondo
3
¿A qué "mismo comportamiento como en otros editores" se refiere [no uso esos otros editores de texto]? El resto del texto parece insinuar "desplazamiento + movimiento para seleccionar", pero eso ya es compatible con Emacs.
Stefan
44
A pesar de que tienes razón estos eventos clave no existen en Emacs, se debe saber que Emacs hace de selección del cambio de soporte (si eso es lo que inspiró a su pregunta).
Malabarba

Respuestas:

2

Como se respondió en los comentarios por razones históricas, Emacs se ejecuta en terminales y esos dispositivos están orientados a los caracteres: obtienes una secuencia de bytes sin ninguna garantía cuando esto sucede en el teclado.

La discusión también señala que es posible implementar esto para el entorno gráfico. Pero a nadie le interesa eso.

Tenga en cuenta que algunos programas, como los juegos o el software de música, pueden usar información detallada sobre cuándo se presionan las teclas, cuánto tiempo y cuándo se liberan, pero la edición de texto no tiene nada en común.

Del manual (info "(elisp)Mouse Events"):

Emacs supports four kinds of mouse events:
click events, drag events, button-down events, and motion events.

El evento de desplazamiento puede ser emulado por un temporizador inactivo, analizando la cosa en el punto después del retraso.

gavenkoa
fuente