Tela GNU - colando da área de transferência do sistema

3

Estou usando a tela no OS X. Eu tenho dois comandos de vinculação:

bind ( eval "writebuf" "exec sh -c 'pbcopy < /tmp/screen-exchange'" 
bind ) eval "exec sh -c 'pbpaste > /tmp/screen-exchange'" "readbuf" 

O primeiro pega o que está no buffer de cópia e o envia para pbcopy. pbcopy é um programa que recebe uma entrada e grava no área de transferência do sistema. Este comando funciona.

O segundo é suposto escrever pasta (do sistema clipboard) para o arquivo de troca de tela e, em seguida, leia isso com readbuf. Este comando não funciona. Eu tenho que digitar a chave encadernada, ctrl-a), duas vezes para que funcione. Eu presumo que estou sentindo falta de algo simples. Qualquer ajuda seria ótimo.

Nota: se eu fizer apenas o pbpaste > /tmp/screen-exchange e, em seguida, tela do ctrl-a < , funciona. Então eu acho que o comando pbpaste é correto, há apenas algo que estou faltando no bind. Qualquer ajuda seria ótimo.

EDIT: Ainda estou procurando uma solução completa para que isso seja vinculado a uma chave. Enquanto isso, posso usar os seguintes traços de ligação e chave:

bind ) eval "exec sh -c 'pbpaste > /tmp/screen-exchange'" 

Em seguida, use

ctrl-a )
ctrl-a <

O que está acontecendo é que estou escrevendo meu pbpaste no arquivo de troca de tela e, em seguida, executando manualmente o comando readbuf. Como eu disse, ainda gostaria de uma maneira de fazer isso em um comando. Qualquer ajuda seria ótima.

    
por Brian 31.08.2010 / 17:55

3 respostas

1

Minha solução é fazer com que comandos sejam comandos shell e sequenciá-los com && ao invés de torná-los comandos de tela e sequenciamento com eval . Como Manwe apontou, eval não funciona muito bem porque não espera que um comando termine antes de iniciar o próximo. O comando de tela readbuf se torna o comando shell screen -X readbuf .

Então, para o seu mac, eu tentaria o seguinte:

bind ) exec sh -c "pbpaste > /tmp/screen-exchange && screen -X readbuf"

Eu não testei o acima, mas a versão de trabalho para xwindows no meu .screenrc é a seguinte:

bind < exec sh -c "xsel -nbo > /tmp/screen-exchange && screen -X readbuf"
    
por 24.01.2015 / 02:03
0

Você pode querer adicionar as seguintes linhas no seu arquivo .screenrc. Se você não tiver um arquivo .screenrc, poderá criar um no seu diretório pessoal.

Adicione o seguinte ao seu arquivo .screenrc

shell - $ SHELL

Isso pode ajudar você a ter problemas. Eu tive um problema semelhante em que meu alias do meu .bash_profile não estava funcionando na tela e isso resolveu isso. Espero que ajude!

Além disso, você pode querer adicionar startup_message no arquivo enquanto estiver nele. :)

    
por 09.11.2011 / 12:42
0

Esse problema me irritou. Eu simplesmente não consigo encontrar uma solução real de trabalho. Então, aqui está o que está acontecendo para os futuros solucionadores de problemas e um hack para fazê-lo funcionar com um comando de tela.

O problema está em que, aparentemente, a tela eval não espera que o processo exec termine antes de executar o resto das opções eval. A mesma coisa acontece se você for rápido o suficiente com o teclado (por exemplo, ao usar registradores).

Então aqui está meu hack.

setenv varfile "exec sh -c 'pbpaste > /tmp/screen-exchange'"
register r "^a:eval \$varfile^M^a:readbuf"
bind ) process r

Então, o que acontece é que ele processa $ varfile env e espera que o usuário pressione enter para executar o readbuf. Portanto, contanto que você "espere" o tempo suficiente para que o pbpasto termine antes de pressionar enter. Você vai conseguir o que quiser.

Env varfile é apenas para legibilidade.

    
por 17.01.2012 / 17:00