Shift-Space en menos

9

En los navegadores web modernos y otro software con contenido de texto, se Spacedesplaza hacia abajo más o menos una pantalla completa. ShiftSpacese desplaza hacia arriba en todo menos less.

¿Cómo se puede usar ShiftSpacepara desplazarse hacia arriba less? O, alternativamente, ¿hay otro buscapersonas (la compatibilidad POSIX es mi único requisito) que podría hacer el trabajo?

Me dijeron que algunos emuladores de terminal y algunas bibliotecas de interfaz de usuario de terminal (ncurses?) No lo reconocen ShiftSpace. ¿Es eso un problema válido?

Orfeo
fuente
¿Qué le pasa a tu botón PgUp ? ¿No suficientemente grande?
Ricitos de Oro
@goldilocks: no hay nada de malo en querer usar Shift-Space, especialmente si estás acostumbrado a usarlo con otras herramientas. Simplemente resulta imposible lessdistinguir entre Space y Shift-Space.
Keith Thompson el
Puede configurar su terminal (emulador) para enviar bo ^B(0x2) sobre <shift-Space>. Tenga en cuenta que bestá justo encima de la barra espaciadora en muchas configuraciones de teclado
Stéphane Chazelas
@KeithThompson: Solo una burla amistosa, espero. Yo empatizo; Me gustaría /adoptar universalmente como "texto de búsqueda" varias herramientas comunes, pero al mismo tiempo desconfío de imponer estándares meglomaníacos excesivos que hacen que sea aún más fácil hacer algo que se puede hacer con una tecla (universalmente reconocible) de todos modos. Es interesante saber que, en este caso, es una limitación técnica (ver la respuesta de 200_success) y no un diseño curmudgeonly que explica.
Ricitos de oro
1
@KeithThompson, vea el translationsrecurso para el widget VT100.
Stéphane Chazelas

Respuestas:

6

Creo que has mencionado un choque cultural causado por una limitación técnica. Como Shift+ Spacegenera la misma salida que Space, el modelo de terminal Unix los trata de manera idéntica. Para distinguir entre los dos, necesita un entorno de programación que admita eventos de tecla arriba / abajo. Eso es posible en X11 y en emuladores de terminal que admiten la reasignación de claves. Un ejemplo de reasignación Shift+ Spacea PageUp:

# For [u]rxvt, in ~/.Xdefaults:
URxvt.keysym.Shift-space: \033[5~
200_success
fuente
1
La mayoría de los emuladores de terminal admiten claves de reasignación, por lo que es posible hacerlo con la mayoría de los emuladores de terminal ( xterm -xrm 'XTerm.VT100.translations: #override Shift <KeyPress> space: string(0x2)'en xterm, por ejemplo, o envía la misma secuencia que la enviada <PageUp>). Por supuesto, eso haría que ingresar texto mientras se mantiene presionada la tecla Mayús.
Stéphane Chazelas
1

En los emuladores de terminal, esta característica interrumpiría la escritura de texto en mayúscula con espacios incrustados al mantener presionada la tecla Mayús. Por ejemplo, si quisiera escribir "It's A Title", tendría que soltar Shift entre "A" y "T". Mantenerlo presionado alejaría su cursor y colocaría mal el resto de lo que escribe. Creo que sería mucho más molesto de lo que obtienes con la función de desplazamiento hacia arriba.

Tener el comportamiento regular al escribir texto y desplazarse hacia arriba cada vez que Space se desplaza hacia abajo requeriría un rediseño y una gran cooperación de las aplicaciones (por ejemplo, una aplicación que pueda alternar lo que Shift + Space envía), estoy bastante seguro de que no va a suceder.

La diferencia clave es que una aplicación GUI conoce el "contexto" si está editando o viendo contenido, los emuladores de terminal no tienen forma de saberlo.

egmont
fuente
1

Los emuladores de terminal envían el mismo carácter sobre Spacey Shift+Space. Si no lo hicieran, sería incómodo escribir texto mientras se mantiene presionada la Shifttecla (ver la respuesta de @ egmont que se expande en ese argumento).

Sin embargo, podría solucionarlo mediante la asignación Shift+Spacea una secuencia de caracteres que terminaría insertando un espacio de forma predeterminada, y para el cual podría configurar aplicaciones como lessdesplazarse hacia arriba al presionar dicha tecla.

Por ejemplo, tal secuencia podría ser ` DEL SPC(cambiar DELa BSen sistemas donde BS es el erasepersonaje).

Para xterm, agregue el recurso:

XTerm.VT100.translations: #override \
  Shift <KeyPress> space: string("`") string(0x7f) string(" ") 

Y configurar lesscon:

printf '%s\n' '#command' '`\177\40 back-screen' | lesskey -
Stéphane Chazelas
fuente
1

lessactualmente no es compatible con esto, pero definitivamente podría agregarse .

Si un programa usa una secuencia de control xterm para establecer modifyOtherKeys2 escribiendo \e[>4;2mal terminal, luego xtermanota las teclas con información adicional sobre qué teclas modificadoras están activas. Específicamente para la Spaceclave, con modifyOtherKeysactivo en xterm, Shift+ se Spaceconvierte en \e[27;2;32~. lesstendría que interpretar esto correctamente como Shift+ Spacey luego activar un desplazamiento hacia arriba.

Si bien esto definitivamente funcionaría en xterm, no funcionaría en todas las aplicaciones de terminal. Pero aquellos terminales que no reconocen esta secuencia de escape para activar modifyOtherKeyssimplemente ignorarán esa secuencia de escape y seguirán enviando a los programas un carácter de espacio normal cuando presione Shift+ Space.

Hay una página bastante detallada en el sitio web de xterm que explica cómo modifyOtherKeysse calculan los códigos: https://invisible-island.net/xterm/modified-keys.html

Andrés
fuente