Какой файл изменяется или запускается событие, когда что-то копируется в буфер обмена (Ctrl + C)?

Если бы мне нужно было перехватить функцию или программу, которая должна выполняться при изменении содержимого системного буфера обмена, тогда какой файл я должен продолжать проверять или какое событие запускается и как перехватить это событие языком программирования? Или команда, которая может выводить содержимое буфера обмена в терминал, чтобы я мог продолжать выполнение команды через короткие промежутки времени и посмотреть, изменился ли контент.

Благодаря

2
задан 18 November 2013 в 21:21

2 ответа

xclip твой друг. Посмотрите man-страницу для получения дополнительной информации, но если вы хотите установить буфер обмена (не выделенный текст), вы можете использовать xclip -sel clip, а затем направить его в стандартный ввод, чтобы установить буфер обмена.

Есть параметр -i filename для чтения из файла. -sel выбирает буфер буфера обмена, который вы хотите использовать. Есть p (первичный, если вы выбираете что-то. Это то, что вставляет средний клик), clip, который используется с CTRL-C и CTRL-V во всех современных средах рабочего стола (QT2 и Emacs 20 используют основной буфер обмена для по какой-то причине).

Чтобы получить содержимое буфера обмена, xclip -sel clip -o (печатает в стандартный вывод). Если вы хотите поместить его в файл, есть необязательный параметр -o, чтобы указать файл для отправки.

Я полагаю, что на странице руководства есть некоторая информация, чтобы дождаться, когда изменится буфер обмена. Я просто не мог расшифровать это.

Информация здесь: http://standards.freedesktop.org/clipboards-spec/clipboards-latest.txt

0
ответ дан 18 November 2013 в 21:21

Существует несколько платформ, которые поддерживают буферы обмена и такое поведение.

Например, существует GTK , который предоставляет Gdk Event GtkClipboard-owner-change , который всегда запускается при изменении содержимого в буфере обмена. Приложение может быть написано на языке программирования, который поддерживает GTK, например C, Python или Vala .

В Vala следующий фрагмент может, например, использоваться для печати на стандартный вывод при изменении содержимого буфера обмена.

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;
    }
}

Этот фрагмент кода может быть сохранен в текстовом файле, например. clipboard-change.vala и скомпилироваться с помощью valac с помощью следующей команды

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

Конечно, чтобы это работало, необходимо установить valac

sudo apt-get install valac

В этом есть только один недостаток хотя он работает только с основным буфером обмена, но не с основным выбором (выбор содержимого с помощью мыши).

0
ответ дан 18 November 2013 в 21:21