Introdução
Sempre tive a curiosidade de saber se existia algum modo de interagir com o clipboard do X. Navegando pela net encontrei o comando xclip. Esse pequeno programa tem acesso de leitura e gravação ao clipboard de seu servidor X de maneira simples e fácil.
Em um outro tutorial encontrei o programa xsel que faz exatamente a mesma coisa que o xclip só que ele tem mais opções e creio que já vem instalado por padrão em muitas distribuições linux (veio no meu Fedora 14). Então por que o xclip? Eu uso mais o Slackware e nele nenhum desses dois programas veio instalado. Como achei o xclip primeiro na minha pesquisa, resolvi fazer um tutorialzinho sobre ele. Talvez em outra oportunidade falo sobre o xsel.
O clipboard do X
Com o xclip iremos trabalhar com dois buffers do X. Usando o xclip podemos acessar e enviar dados para os buffers com extrema facilidade. O detalhe é que mesmo sem conhecer esses buffers, nós os já acessamos desde a primeira vez em que usamos o nosso querido sistema linux. Os buffers são:
- Buffer de seleção: Esse buffer guarda todo pedaço de texto que é selecionado pelo usuário. Essa seleção pode ocorrer pelo uso do mouse ou pelo teclado mesmo (ex: Ctrl+a ou Shift+seta de direção).
- Buffer de cópia: Já esse buffer armazena todo pedaço de texto que foi selecionado e que posteriormente o comando copiar foi acionado. Para acionar esse “comando de copiar” basta pressionar as teclas Ctrl+c ou no menu Editar->Copiar de um editor de texto qualquer.
Ok! Aprendemos a enviar dados para os buffers, mas como obter esses dados? Isso você também já sabe. Para recuperar os dados do buffer de cópia, utilize a sequência Ctrl+v. Fácil. Você também pode obter esses dados pelo menu Editar->Colar de qualquer editor de texto. O que não pode ser trivial para alguns é obter os dados do buffer de seleção. Eu mesmo não sabia que esse buffer existia, só aprendi quando um amigo meu copiava e colava coisas no terminal usando somente o mouse. Bem, para recuperar os dados desse buffer é só utilizar o botão do meio do mouse. Como hoje em dia a maioria dos mouses tem 3 botões (já existe mouse com 18), praticamente qualquer usuário pode usufruir dessa técnica ninja.
Para quem não conhecia essa funcionalidade, faça o teste agora mesmo. Selecione algo com o mouse e depois vá para um editor de texto por exemplo, e pressione o botão do meio do mouse. Veja que o texto selecionado foi inserido exatamente na posição onde foi feito o clique do botão central do mouse.
Instalação do xclip
Como disse, aqui no meu Slackinho o xclip não veio instalado. Por sorte minha a instalação foi tranquila e sem aquela chatice de dependências. Verifique se há como instalar o xclip em sua distribuição pelo gerenciador de pacote porque eu compilei na unha mesmo.
Baixe o xclip aqui: http://sourceforge.net/projects/xclip/
Descompacte e instale:
$ tar -zxvf xclip-X.XX.tar.gz $ cd xclip-X.XX $ make # make install
Faça o teste e veja se o programa foi corretamente instalado:
$ xclip -h
O xclip
Pelo help do programa você vê que ele não possui muitas opções, por isso gostei desse programa. Simples e rápido. O xclip sempre considera por padrão a opção -i. Isso implica que ele irá esperar dados de stdin e quando esses dados chegarem, ele irá gravá-los no buffer. Mas qual buffer? O buffer de seleção é usado como padrão.
As opções -i (input/entrada) e -o (output/saída) controlam o comportamento do xclip. A opção -selection indica em qual buffer o xclip deve trabalhar. Os argumentos para -selection que utilizaremos serão: primary (= buffer de seleção) e clipboard (= buffer de cópia).
Note que as opções -i e -o não devem aparecer juntas na linha de comando do xclip. Caso apareçam, a opção -o sobrescreve o comportamento da opção -i. Isso implica para nós que para trocar o conteúdo dos buffers, como alguns leitores já devem ter imaginado, é necessário invocar o xclip novamente através de um pipe.
Exemplos de uso
Ufa! Finalmente exemplos. Vejamos alguns:
1) Enviar dados para os buffers
$ echo daemonio | xclip
“Aham.. e agora?” – Agora a string daemonio está no buffer de seleção, com isso podemos obter essa string apenas apertando o botão do meio do mouse.
$ cat /etc/password | xclip
Desse jeito enviamos o conteúdo do arquivo passwd para o buffer primário. Vá para um editor de texto e aperte o botão do meio do mouse para colar o conteúdo desse arquivo.
$ xclip /etc/passwd
Faz a mesma coisa que o comando acima. Isso se deve pelo fato que o xclip aceita como último argumento o nome de um arquivo.
$ xclip -selection clipboard /etc/passwd
Envia o arquivo passwd para o buffer de cópia. Para recuperar o conteúdo do passwd, aperte Ctrl+v em um editor de texto qualquer.
2) Recuperar dados dos buffers
$ xclip -o
Manda pra stdout o conteúdo do buffer de seleção.
$ xclip -o -selection clipboard
Manda pra stdout o conteúdo do buffer de cópia.
Observe aqui que os dados vão para stdout. O que isso significa? Pipes & Redirecionamentos.
$ xclip -o > daemonio_xclip.txt
Antes de tudo mande um ctrl+a nessa página que você está lendo. Agora vá para o terminal mais próximo e digite o comando acima. Pronto. Você acabou de salvar nesse txt o conteúdo dessa página.
$ xclip -o -selection clipboard | sed 's/uva/abacaxi/g'
Esse comando substitui todas as ocorrências de uva por abacaxi no buffer de cópia. Note que esse buffer não foi modificado. Para fazer isso temos que redirecionar a saída de tudo para um novo xclip. Veja:
$ xclip -o -selection clipboard | sed 's/uva/abacaxi/g' | xclip -selection clipboard
Agora mande um ctrl+v e veja o conteúdo modificado.
E para copiar o conteúdo de um buffer para outro? Agora ficou fácil:
$ xclip -o | xclip -selection clipboard
Copia o buffer primário no buffer de cópia. Só que, se o objetivo for trocar o conteúdo dos buffers, teremos que invocar mais de um comando no shell e salvar o conteúdo do buffer que será sobrescrito primeiro:
$ CLIPBOARD=$(xclip -o -selection clipboard) $ xclip -o | xclip -selection c $ xclip <<< "$CLIPBOARD"
Eu frequentemente baixo músicas e filmes LEGAIS (¬¬”) nesses sites de armazenamento de arquivos como megaupload e rapidshare. Os sites que fornecem as URL’s ultimamente estão utilizando o tal protetor de links. O bom que a maioria “protege” seus links somente os invertendo. Numa máquina com comandos padrões do linux e com a ajuda do xclip, é possível obter a URL correta de uma maneira extremamente fácil. Primeiramente, selecione a url invertida e logo em seguida vá para um terminal e faça:
$ xclip -o | rev | xclip
Vá para seu navegador e aperte o botão do meio do mouse, depois carregue a página e baixe seu arquivo normalmente. Pronto!
É, acho que é isso. O melhor jeito para aprender é brincar um pouco com ele. Crie scripts, copie, cole, selecione, e comente. Até.
Links & Referências
- http://www.vivaolinux.com.br/dica/Terminal-um-jeito-inteligente-de-copiar-e-colar
- http://linuxtidbits.wordpress.com/2008/02/22/command-line-to-clipboard/
- http://elcasey.wordpress.com/2008/02/12/xclip-use-the-clipboard-from-the-command-line/
http://www.vivaolinux.com.br/dica/Terminal-um-jeito-inteligente-de-copiar-e-colar
Pingback: Acessar Clipboard Do X Pelo Terminal Com O xsel | Daemonio Labs
Fiz um post falando do xsel que é um programa semelhante ao xclip:
Daemonio
Muito bom e completo.