Processando o texto da área de transferência através de um script entre copiar e colar

5

Eu quero interceptar o evento paste e executar qualquer texto pelo meu script. O caso de uso é assim (suponha que eu tenha um script em algum lugar que aceite texto em stdin e transforme 'world' em 'potato', escrevendo em stdout).

  1. Realce algum texto "olá mundo!" com o cursor
  2. Clique com o botão do meio do mouse para colar no buffer de seleção e 'olá batata!' aparece

Não deve haver uma etapa manual entre 1 e 2 , ou seja, eu quero um gancho no evento paste (ou talvez no evento copy) para que o texto seja processado automaticamente. Eu não tenho nada malicioso em mente; é apenas sobre a formatação automática de algum código-fonte ao copiar / colar de / para a Web.

Minha pergunta diz respeito ao buffer de seleção (área de transferência do meio do mouse), mas acho que a questão se aplica também a outros textos da área de transferência em geral.

    
por wim 03.01.2014 / 18:18

1 resposta

2

Você pode usar a seguinte função Bash. Copie-o para o seu ~/.bashrc e forneça-o como . ~/.bashrc de um terminal.

cngstr(){
    echo 'xclip -o' | sed -e "s#$1#$2#g" | xclip
}

Uso

  • Realce qualquer texto selecionando-o com o mouse. Como de costume, o texto selecionado pode ser colado usando o clique do meio do mouse.
  • Executar no terminal:

    $ cngstr "string" "replacement"
    
  • Em seguida, quando você colar usando o clique do meio do mouse, a palavra "string" na sua seleção será substituída por "replacement".

Exemplo

Diga que sua seleção é "hello world!" Em seguida você corre no terminal,

cngstr world potato

Use "" para uma string que consiste em mais de uma palavra . Em seguida, quando você colar usando o clipe do meio do mouse, "oi batata!" vai aparecer. Veja as capturas de tela.

Comofunciona

  1. xclip-oimprimeaseleçãoparaasaídapadrãoqueestásendocanalizadaparasedaqui.
  2. Próximosedestásubstituindoassequênciasquerecebementradadousuário.
  3. Finalmente,oconteúdomodificadoestásendopassadoparaxclip,queocolocana seleção principal e fica disponível para colar por um clique do meio do mouse.

Eu acho que xclip vem com a distribuição padrão do Ubuntu. Caso contrário, instale-o em apt-get :

sudo apt-get install xclip

Informações extras

Disponibilize o conteúdo modificado para a área de transferência

Se você quiser que o conteúdo modificado também esteja disponível para a área de transferência para que Ctrl + V também funcione, adicione a seguinte linha no script acima.

echo 'xclip -o' | xclip -selection c

A linha acima irá passar o conteúdo da seleção principal para a área de transferência. A função modificada será semelhante a:

cngstr(){
    echo 'xclip -o' | sed -e "s#$1#$2#g" | xclip
    echo 'xclip -o' | xclip -selection c
}

Uma função Bash que pode modificar o conteúdo da área de transferência (isto é, copiada usando Ctrl + C ou do menu do botão direito) e Disponibilize a string modificada para a seleção principal e para a área de transferência.

cngstr1(){
    echo 'xclip -o -selection c' | sed -e "s#$1#$2#g" | xclip
    echo 'xclip -o' | xclip -selection c
}

xclip -o imprime o conteúdo da seleção principal por padrão. Use -selection c para imprimir o conteúdo da área de transferência. Consulte man xclip para saber mais.

Você pode combinar essas duas funções em um script usando um switch case,

#!/bin/sh
string="$2"
replacement="$3"

cngstr(){
    echo 'xclip -o' | sed -e "s#$1#$2#g" | xclip
    echo 'xclip -o' | xclip -selection c
}

cngstr1(){
    echo 'xclip -o -selection c' | sed -e "s#$1#$2#g" | xclip
    echo 'xclip -o' | xclip -selection c
}

if [ $# -lt 2 ]
then
    echo "Usage : $0 [c|p] \"string\" \"replacement\" "
    exit
fi

case "$1" in

    c)  cngstr1 "$string" "$replacement"
        ;;
    p)  cngstr "$string" "$replacement"
        ;;
    *) echo "Usage : $0 [c|p] \"string\" \"replacement\" "
        ;;
esac

Uso

./script.sh [c|p] "string" "replacement"
  • Use a opção c para alterar o conteúdo copiado usando a área de transferência, isto é, o conteúdo copiado usando Ctrl + C ou do menu do botão direito.

  • Use a opção p para alterar o conteúdo copiado usando a seleção principal.

por souravc 16.03.2014 / 17:37