Que arquivo foi alterado ou o evento foi disparado quando algo é copiado para a área de transferência (Ctrl + C)?

2

Se eu tivesse que ligar uma função ou um programa que deve ser executado quando o conteúdo da área de transferência do sistema é alterado, então de qual arquivo devo verificar ou qual evento é acionado e como capturar esse evento por uma linguagem de programação? Ou um comando que pode enviar conteúdo da área de transferência para o terminal para que eu possa continuar executando o comando após intervalos curtos e ver se o conteúdo foi alterado ou não.

Obrigado

    
por Omar Tariq 18.11.2013 / 18:21

2 respostas

1

Existem vários frameworks disponíveis que suportam pranchetas e tal comportamento.

Existe, por exemplo, o GTK , que fornece um evento Gdk GtkClipboard-owner-change que sempre é acionado quando o conteúdo da área de transferência é alterado. Um aplicativo pode ser escrito em uma linguagem de programação que suporte GTK, como C, Python ou Vala .

No Vala, o snippet a seguir pode, por exemplo, ser usado para imprimir no stdout quando um conteúdo da área de transferência é alterado

namespace ClipboardChanged
{
    public static int main (string[] args)
    {
        Gtk.init (ref args);

        Gtk.Clipboard clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD);
        clipboard.owner_change.connect(() => {
            stdout.printf("Clipboard has changed\n");
        });

        Gtk.main();

        return 0;
    }
}

Este snippet de código pode ser salvo em um arquivo de texto, por exemplo clipboard-changed.vala e ser compilado com valac com o seguinte comando

valac --pkg=gtk+-3.0 clipboard-changed.vala

Claro que para isso funcionar, o valac precisa ser instalado

sudo apt-get install valac

Há apenas uma lacuna nisso, embora só funcione com a área de transferência principal, mas não com a seleção principal (seleção de conteúdo com o mouse).

    
por Oliver Sauder 20.11.2013 / 15:07
1

xclip é seu amigo. Olhe para a página do manual para obter mais informações, mas se você quiser definir a área de transferência (não o texto selecionado), você pode usar xclip -sel clip , em seguida, canalizar para seu stdin para definir a área de transferência.

Há um parâmetro -i filename para ler em um arquivo. -sel seleciona o buffer da área de transferência que você deseja usar. Há p (primário, se você selecionar algo. É o que cola middleclick), clip , que é o usado com CTRL-C e CTRL-V em todos os ambientes de desktop modernos (QT2 e Emacs 20 usam a área de transferência primária para alguma razão).

Para obter o conteúdo da área de transferência, xclip -sel clip -o (imprime para stdout). Se você quiser colocá-lo em um arquivo, há um parâmetro opcional de -o para especificar um arquivo para enviá-lo.

Eu acredito que há algumas informações na página do manual para esperar quando a área de transferência é alterada. Eu simplesmente não consegui decifrá-lo.

Infos aqui: link

    
por Yet Another User 18.11.2013 / 18:38