Como segmentar várias seleções com o xclip

11

Ao copiar texto para a área de transferência, o xclip fornece vários destinos de seleção:

 -selection
    specify which X selection to use, options are:
    "primary" to use XA_PRIMARY (default), 
    "secondary" for XA_SECONDARY 
    "clipboard" for XA_CLIPBOARD

Existe uma maneira de segmentar várias seleções?

Eu tentei as seguintes opções

  1. echo "Hello world" | xclip -i -selection primary -selection clipboard
  2. echo "Hello world" | xclip -i selection primary | xclip -i selection clipboard
  3. echo "Hello world" | xclip -i selection primary,clipboard

mas nenhum deles funcionou.

Amelio Vazquez-Reina
fonte

Respostas:

16

Eu tentei as seguintes opções

echo "Hello world" | xclip -i selection primary | xclip -i selection clipboard  

Você estava muito perto ...
Se você usar -fo primeiro xclipcomando, ele imprimirá o texto de volta ao stdout e poderá direcioná-lo para o segundo xclipcomando:

echo "Hello World" | xclip -i -sel p -f | xclip -i -sel c

De man xclip:

-f, -filter
            when xclip is invoked in the in mode with output level set to
            silent (the defaults), the filter option will cause xclip to print
            the text piped to standard in back to standard out unmodified
don_crissti
fonte
Obrigado! Estou aceitando esta solução porque: 1) Informa sobre um recurso interessante do xclip. 2) Ele me permite tubos xclipcomandos que é bastante conveniente e 3) Por alguma estranha razão, é a única resposta tão longe que dá uma solução de trabalho em minhas experiências para a ligação copy-pipeem tmux(isso é o que levou a esta pergunta)
Amelio Vazquez-Reina
2
Se sua distribuição fornecer xseluma alternativa para xclip, você pode usá-lo echo 'Hello World' | xsel -i -p && xsel -o -p | xsel -i -b. É um pouco diferente e menos eficiente do que xclipdevido à xselfalta de uma opção de filtro. Mas se você estiver preso xsel, essa é uma maneira de resolver o problema.
starfry
5

Eu não uso xclip, então pode haver uma maneira de fazer isso de forma nativa, da qual não estou ciente. De qualquer forma, isso deve funcionar assumindo que seu shell seja bash:

echo "Hello world" | tee >(xclip -i -selection primary) >(xclip -i -selection clipboard) >/dev/null

>()é uma forma de substituição de processo. bashsubstitui cada um pelo caminho para um descritor de arquivo conectado à entrada padrão do programa entre parênteses.

Chris Down
fonte
Obrigado! Você sabe se essa sintaxe também é compatível zsh?
Amelio Vazquez-Reina
@ user815423426 Até onde eu sei, sim.
Chris Baixo
Eu testei aqui no meu zsh e funciona como um encanto!
SergioAraujo 22/08/19