¿Por qué Esc-[no se desplaza hacia la izquierda en `menos`?

¿Por qué Esc-[no se desplaza hacia la izquierda en `menos`?

De acuerdo con lapágina de manualpara lesskey, las siguientes teclas están vinculadas al desplazamiento hacia la izquierda y hacia la derecha:

\e[       left-scroll
\e]       right-scroll
\e(       left-scroll
\e)       right-scroll
\kl       left-scroll
\kr       right-scroll

Las teclas de flecha y Esc-(/ Esc -)funcionan bien, al igual que Esc-]para el desplazamiento hacia la derecha, pero Esc-[no funcionan para el desplazamiento hacia la izquierda. En cambio, simplemente muestra esto en la línea de comando:

ESC[

Agregar esta línea a ~/.lesskeylas funciones como solución alternativa:

\e[ left-scroll

¿Pero por qué no funciona por defecto?

He observado este comportamiento en XFCE4 en Debian Stretch, así como en Kubuntu 18.04, así como en una variedad de emuladores de terminal.

$ less --version
less 487 (GNU regular expressions)
Copyright (C) 1984-2016  Mark Nudelman

less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Homepage: http://www.greenwoodsoftware.com/less

Consideré presentar un informe de error, perola lista de errores conocidos y solicitudes de funciones sugiere que es un comportamiento conocido:

Solicitudes de mejora

[ . . . ]

Número de referencia: 175

Implementado en la versión: 322

Agregue un comando alternativo para ESC-[.

¿Es esto realmente una limitación lesso es una peculiaridad en cómo los terminales manejan la tecla Escape?

Respuesta1

Es porque ESC [también resulta ser el inicio de la secuencia de caracteres enviados por varias teclas de función en algunos terminales, como Homeo Endo PageUp... Esos también están vinculados a alguna acción en less.

Entonces, cuando lessrecibe un correo electrónico ESC [, espera más (sin tiempo de espera como lo hacen otras aplicaciones).

En mi terminal ESC[6~está PageDown. Si presiono Alt+[, veo ESC [lo mismo que tú. Pero luego puedo ingresar 6y ~eso se desplaza hacia abajo.

Si ejecuta TERM=vt100 lessen lugar de less, donde la vt100página terminfo no tiene ninguna entrada para Homeo End... verá ESC [que funciona.

Sin embargo, si agrega \e[ left-scrolla su ~/.lesskey(y ejecuta lesskeypara compilarlo ~/.less), notará que los ESC [trabajos se desplazan hacia la izquierda, pero todos Home, PageUP... dejan de funcionar, todos se desplazan hacia la izquierda y los caracteres adicionales que envían provocan algunos pitidos.

Al observar el código, se trata del orden en que se procesa la tabla de comandos. La ~/.lesstabla de mando esañadido último, peroinsertado en la cabeza, por lo que sus entradas se procesananteslos incorporados.

Tras una ESC [entrada, si la entrada for \e[ left-scrollse encuentra primero, se procesa, si la entrada for \kD forw-screen(que en muchos terminales se traduce como \e[6~ forw-screen) se encuentra primero, entonceses solo unprefijofósforo, ylessespera más aportes.

Entonces, es una especie de error. La solución sería agregar un tiempo de espera. Sin embargo, agregar un tiempo de espera breve significaría renunciar a los comandos de múltiples teclas; un tiempo de espera prolongado para darle tiempo suficiente a un usuario para ingresar un comando de múltiples teclas probablemente haría que ESC [no respondiera demasiado.

Ahora, los terminales que tienen PageUp, etc., generalmente también tendrán Leftuna Rightclave que también está vinculada a left-scroll, right-scrollpor lo que es posible que desees usarla en su lugar para desplazarte.

información relacionada