Como sobrescrever o comportamento do modo de cópia das teclas Home e End no GNU Screen?

2

Eu uso screen uma quantia justa e gostaria que as chaves Home e End simplesmente fossem para o começo ou fim da linha atual, ao invés do padrão , que é ir para o início global ou final global do histórico da tela para a janela atual.

Fazer bindkey -m -k "kh" stuff 0 e bindkey -m -k "kH" stuff $ tem o efeito desejado no modo de cópia, mas como -m de ligações também afetam o modo de entrada de comando, isso efetivamente desabilita o uso de Início e End enquanto digita comandos, pois faz com que literal '0' e '$' sejam inseridos enquanto o cursor estiver na barra de comandos.

Existe uma maneira de domar essas chaves sem quebrá-las simultaneamente para a entrada de comandos?

    
por koyae 28.08.2018 / 20:34

1 resposta

3

Sim, existe. Embora não haja (atualmente) um sinalizador bindkey que afete o modo de cópia somente (não o modo de comando também), ainda há uma maneira de obter resultados semelhantes, embora significa aprender uma nova sintaxe para isso.

A correção

O comando markkeys afeta apenas o modo de cópia, e não afetará os comportamentos do modo de comando. É mais exigente sobre os personagens que aceitará, mas é melhor do que nada e conclui o trabalho nesta situação:

markkeys "$=5"
markkeys "\^=1"

O acima diz screen para alias o início-de-linha e fim-de-linha e sinais (que são enviados por Home e End ) para o ^ e $ teclas de movimento respectivamente. ^ está escrito com escape como \^ na string porque é normalmente usado para definir seqüências de escape, mas queremos dizer o literal.

Note que se você preferir que Home vá até o início / esquerda em vez de apenas até o primeiro caractere visível, então substitua markkeys "\^=1" por markkeys "0=1" .

Note também que você ainda pode usar g e G para chegar ao início global ou ao final do histórico de uma janela enquanto estiver no modo de cópia.

Como encontrei a correção

Embora eu ainda não saiba de uma referência completa que expõe todos os hex-escapes úteis para tais coisas, eu consegui encontrar os dois relevantes executando bindkey -m dentro da tela e então substituindo os mapeamentos lá até que eu quebrei o comportamento que me interessava. As linhas relevantes eram:

kh          -> stuff 1
kH          -> stuff 5

Com a ajuda do pessoal do irc: //irc.freenode.net/screen, aprendi que os códigos da esquerda podem ser consultados a partir do shell via man terminfo , o que os relaciona na coluna Tcap como

Variable        Capname       TCap Code          Description
string
---------------------------------------------------------------------------
key_home        khome         kh                 home key
...
key_ll          kll           kH                 lower-left key (home down)

Colocar dois e dois juntos e fazer um pouco de adivinhação para obter a ligação correta leva à correção acima.

    
por 28.08.2018 / 20:34