como fazer menos pager responder a roda de rolagem e não limpar a tela

10

Eu sei sobre respostas como como-fazer-mouse-roda-rolar-o-menos-pager-usando-bash-e-gnome-terminal , que é remover o sinalizador -X do ambiente $ LESS variável. Mas eu gostaria de fazer ambos destes:

  1. use a roda do mouse para rolar o pager (em vez de rolar a barra de rolagem da janela do terminal) (que você obtém removendo -X de $LESS )
  2. faça com que o conteúdo do pager permaneça na tela depois de sair (o que normalmente é realizado adicionando adicionando -X a $LESS ).

Existe alguma maneira de eu ter meu bolo e comê-lo também?

    
por Kevin G. 24.08.2015 / 01:09

1 resposta

14

Não sem invadir o código-fonte de menos. Um pouco de história de fundo:

Menos não pode manipular o mouse (incluindo eventos de rolagem).

Emuladores de terminal suportam uma tela chamada alternativa. É para isso que a maioria dos aplicativos de tela cheia muda para sua duração (e volta para a tela normal quando eles param, fazendo com que o conteúdo anterior seja "restaurado"), e não tem um buffer de rolagem. Menos também alterna para essa tela alternativa, a menos que -X seja fornecido, caso contrário,

Muitos emuladores de terminal descobriram que quando está em modo de tela alternativo e o aplicativo em execução não está interessado em eventos de mouse, faz sentido converter em rolagem para cima ou para baixo. É um hack, e seria prejudicial tanto na tela normal (imagine o que aconteceria, por exemplo, no prompt do seu shell), ou quando o aplicativo deseja manipular o mouse (com certeza, eles têm que ver os eventos reais do mouse, então). Mas como, por padrão, nenhum desses dois é válido quando você está executando less , esse hack é ativado (sujeito ao emulador de terminal que o suporta e ativado via \e[?1007h vs. \e[?1007l ). Seus eventos de rolagem são convertidos pelo emulador de terminal para as teclas para cima e para baixo e menos não conseguem distingui-los dos pressionamentos de tecla reais. Ele não recebe eventos de rolagem do mouse: ele exibe as teclas para cima e para baixo.

Então você está lá: ou você muda para tela alternativa e o hack do terminal converte eventos de rolagem em pressionamentos de tecla por menos, e a tela normal é restaurada quando você sai; ou você não, e então não pode haver nenhum evento de rolagem de conversão mágica para pressionamentos de tecla e menos não entende os eventos de rolagem.

Então, o que poderia ser feito? Bem, ou implementar o mouse suporte em menos e deixá-lo lidar com eventos de rolagem em si (e viver com um clique não padrão ou copiar e colar), ou implementar outro hack estranho: após sair, depois de reverter para a tela normal, less poderia a última vez que imprime uma tela cheia de conteúdo, repetindo o que foi exibido antes de sair.

Na prática, basicamente se resume a: desculpe, esqueça.

    
por 13.09.2015 / 01:13