Configurando o GNU Screen para enviar códigos de escape para o terminal externo na TI

0

Estou usando o GNU Screen dentro do mintty. Para fazer com que a roda de rolagem funcionasse, tive que mudar o modo de roda de rolagem com um código de escape ( ^[[?7787h ). Isso faz com que a roda de rolagem não funcione mais em less . Para corrigir isso, eu precisaria que less enviasse os códigos de escape apropriados para o terminal externo no início e na saída.

Eu encontrei o código de escape ^[P que pode ser usado para enviar códigos de escape para a tela de execução do terminal. Então, eu queria adicionar ^[P^[[?7787l ao ti termcap dentro da tela. Para conseguir isso, adicionei essa linha ao meu .screenrc :

termcapinfo * "" "\EP\E[?7787l\E[?1049h"

Mas isso não afetou less . Eu sei que ^[P^[[?7787l funciona - se eu apenas ecoar, está tudo bem. Eu poderia apenas escrever um less wrapper que lida com isso, mas eu preferiria ser capaz de fazer isso via termcap, como seria então funcionar em todas as aplicações, não apenas em menos.

Então, minha pergunta é: Como posso alterar quais códigos de escape less envia ao terminal quando ele alterna para a tela alternativa?

    
por Chronial 03.05.2013 / 22:19

1 resposta

1

Este comando deve funcionar:

termcapinfo * "" "ti=\EP\E[?7787l\E\\E[?1049h:te=\EP\E[?7787h\E\\E[?1049l"

(Substituir * por um nome mais específico para o seu tipo de terminal seria ainda melhor, mas eu não sei qual TERM value é definido por mintty.)

Diferenças importantes da sua versão:

  1. O segundo e terceiro parâmetros do comando termcapinfo devem conter termcap define ( name=value ) separados por : , não apenas uma seqüência de escape simples.

  2. A sequência de escape ^[P deve ser terminada por ^[\ , caso contrário, uma saída muito maior vai para o terminal diretamente sem o processamento adequado pela Tela (há alguma salvaguarda para evitar bloquear completamente a Tela se a sequência de terminação é esquecido, mas a exibição ainda será confusa).

  3. Você deve alterar ti e te , para que sair de less (ou qualquer outro programa em tela cheia) restaure o estado anterior corretamente.

Claro, se você invocar less com a opção -X , a roda do mouse não funcionará corretamente, porque com esta opção less não envia as sequências ti e te para o terminal. Lembre-se de que essa opção pode ser especificada não diretamente na linha de comandos less , mas também através da variável de ambiente LESS .

No entanto, se less for compilado para usar terminfo em vez de termcap , o terceiro parâmetro do comando termcapinfo não alterará o comportamento de less , pois ele influencia apenas o conteúdo da% variável de ambienteTERMCAP exportada por screen para seus subprocessos, e o conteúdo do banco de dados terminfo não pode ser alterado dinamicamente. Nesse caso, você precisará usar utilitários como infocmp e tic para criar uma entrada de origem terminfo que contenha smcup e rmcup valores com suas modificações e, em seguida, compile a entrada para o formato binário; então use term <your-entry-name> em .screenrc para usar esta entrada.

    
por 06.05.2013 / 16:10