![Por que Esc-[ não rola para a esquerda em `menos`?](https://rvso.com/image/164695/Por%20que%20Esc-%5B%20n%C3%A3o%20rola%20para%20a%20esquerda%20em%20%60menos%60%3F.png)
De acordo compágina de manualpara lesskey
, as seguintes teclas estão vinculadas à rolagem para a esquerda e para a direita:
\e[ left-scroll
\e] right-scroll
\e( left-scroll
\e) right-scroll
\kl left-scroll
\kr right-scroll
As teclas de seta e Esc-(
/ Esc -)
funcionam bem, assim como Esc-]
a rolagem para a direita, mas Esc-[
não funcionam para a rolagem para a esquerda. Em vez disso, apenas mostra isso no prompt da linha de comando:
ESC[
Adicionar esta linha às ~/.lesskey
funções como uma solução alternativa:
\e[ left-scroll
Mas por que não funciona por padrão?
Eu observei esse comportamento no XFCE4 no Debian stretch, bem como no Kubuntu 18.04, bem como em uma variedade 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
Pensei em preencher um relatório de bug, masa lista de bugs conhecidos e solicitações de recursos sugere que é um comportamento conhecido:
Solicitações de melhorias
[. . . ]
Número de referência: 175
Implementado na versão: 322
Adicione um comando alternativo para ESC-[.
Isso é realmente uma limitação less
ou é uma peculiaridade na maneira como os terminais lidam com a tecla Escape?
Responder1
É porque ESC [
também é o início da sequência de caracteres enviados por diversas teclas de função em alguns terminais, como Homeou Endou PageUp... Esses também estão vinculados a alguma ação em less
.
Então, quando less
recebe um ESC [
, ele está esperando por mais (sem atingir o tempo limite, como fazem alguns outros aplicativos).
No meu terminal ESC[6~
está PageDown. Se eu pressionar Alt+[, vejo ESC [
como você vê. Mas então posso entrar 6
e ~
rolar para baixo.
Se você executar TERM=vt100 less
em vez de less
, onde a vt100
página terminfo não possui nenhuma entrada para Homeou End... você verá ESC [
que funciona.
Se, no entanto, você adicionar \e[ left-scroll
ao seu ~/.lesskey
(e executar lesskey
para compilá-lo ~/.less
), você notará que os ESC [
trabalhos rolam para a esquerda, mas todos os Home, PageUP... param de funcionar, todos rolam para a esquerda e os caracteres extras que eles enviam causam alguns bipes.
Olhando para o código, o que importa é a ordem em que a tabela de comandos é processada. A ~/.less
tabela de comando éadicionado por último, masinserido na cabeça, então suas entradas são processadasantesos embutidos.
Após uma ESC [
entrada, se a entrada for \e[ left-scroll
for encontrada primeiro, ela será processada; se aquela for \kD forw-screen
(que em muitos terminais se traduz como \e[6~ forw-screen
) for encontrada primeiro, entãoé apenas umprefixocorresponder, eless
espera por mais entrada.
Então, é uma espécie de bug. A solução seria adicionar um tempo limite. Adicionar um tempo limite curto significaria, no entanto, desistir de comandos com várias teclas; um longo tempo limite para dar tempo suficiente para um usuário inserir um comando com várias teclas provavelmente deixaria ESC [
de responder.
Agora, os terminais que possuem PageUp, etc, geralmente também possuem Leftuma Rightchave que também está vinculada a left-scroll
, right-scroll
, então você pode querer usá-la para rolar.