Nos navegadores modernos e em outro software com conteúdo de texto, Spacerola mais ou menos uma tela. ShiftSpacerola para cima em tudo, menos less
.
Como alguém pode usar ShiftSpacepara rolar para cima less
? Ou, como alternativa, existe outro pager (a compatibilidade com POSIX é o meu único requisito) que poderia fazer o trabalho?
Foi-me dito que alguns emuladores de terminal e algumas bibliotecas de interface do usuário do terminal (ncurses?) Não reconhecem ShiftSpace. Esse é um problema válido?
less
distinguir entre Espaço e Shift-Space.b
ou^B
(0x2)<shift-Space>
. Note-se queb
é um pouco acima da barra de espaço em várias configurações de teclado/
adotado universalmente como "texto de pesquisa" em várias ferramentas comuns, mas, ao mesmo tempo, tenho receio de impor padrões meglomaníacos excessivos que tornam ainda mais fácil fazer algo que pode ser feito com um toque de tecla (universalmente reconhecível). Interessante saber que, nesse caso, é uma limitação técnica (consulte a resposta do 200_success) e não o design simplório que explica.translations
recurso do widget VT100.Respostas:
Eu acho que você trouxe um choque cultural causado por uma limitação técnica. Como Shift+ Spacegera a mesma saída que Space, o modelo de terminal Unix os trata de forma idêntica. Para distinguir entre os dois, você precisa de um ambiente de programação que suporte eventos chave acima / abaixo. Isso é possível no X11 e nos emuladores de terminal que suportam chaves de remapeamento. Um exemplo de remapeamento Shift+ Spacepara PageUp:
fonte
xterm -xrm 'XTerm.VT100.translations: #override Shift <KeyPress> space: string(0x2)'
no xterm, por exemplo, ou você envia a mesma sequência que a enviada<PageUp>
). Obviamente, isso tornaria a digitação do texto pressionada a tecla Shift.Nos emuladores de terminal, esse recurso interrompe a digitação de texto em maiúsculas com espaços incorporados mantendo pressionada a tecla Shift. Por exemplo, se você quiser digitar "É um título", terá que liberar o Shift entre "A" e "T". Mantê-lo pressionado afasta o cursor e posiciona incorretamente o restante do que você digita. Acredito que seria muito mais irritante do que você ganha com o recurso de rolagem para cima.
Tendo o comportamento regular ao digitar texto e rolar para cima sempre que o Space rolar para baixo, exigiria uma reformulação e uma forte cooperação dos aplicativos (por exemplo, um aplicativo capaz de alternar o que o Shift + Space envia), tenho certeza de que isso não acontecerá.
A principal diferença é que um aplicativo GUI conhece o "contexto", esteja você editando ou visualizando conteúdo; os emuladores de terminal não têm como saber disso.
fonte
Os emuladores de terminal enviam o mesmo caractere para Spacee Shift+Space. Se não o fizessem, seria estranho digitar texto enquanto mantinha pressionada a Shifttecla (consulte a resposta do @ egmont que se expande nesse argumento).
No entanto, você pode contornar isso mapeando Shift+Spacepara uma sequência de caracteres que acabariam inserindo um espaço por padrão e para o qual você poderia configurar aplicativos como
less
rolar para cima com a tecla pressionada.Por exemplo, essa sequência poderia ser
`
DEL
SPC
(altereDEL
paraBS
em sistemas em que BS é oerase
caractere).Para
xterm
, adicione o recurso:E configure
less
com:fonte
less
atualmente não suporta isso, mas definitivamente pode ser adicionado .Se um programa usa uma sequência de controle xterm para definir
modifyOtherKeys
2 escrevendo\e[>4;2m
no terminal, fazxterm
anotações nas teclas com informações adicionais sobre quais teclas modificadoras estão ativas. Especificamente para a Spacechave, commodifyOtherKeys
ativo no xterm, Shift+ se Spacetransforma em\e[27;2;32~
.less
teria que interpretar corretamente isso como Shift+ Spacee, em seguida, acionar uma rolagem para cima.Enquanto isso definitivamente funcionaria no xterm, não funcionaria em todas as aplicações de terminal. Mas os terminais que não reconhecem essa sequência de escape para ligar
modifyOtherKeys
apenas ignoram essa sequência de escape e continuam enviando aos programas um caractere de espaço normal quando você pressiona Shift+ Space.Há uma página bastante detalhada no site xterm que explica como os
modifyOtherKeys
códigos são calculados: https://invisible-island.net/xterm/modified-keys.htmlfonte