Если бы мне нужно было перехватить функцию или программу, которая должна выполняться при изменении содержимого системного буфера обмена, тогда какой файл я должен продолжать проверять или какое событие запускается и как перехватить это событие языком программирования? Или команда, которая может выводить содержимое буфера обмена в терминал, чтобы я мог продолжать выполнение команды через короткие промежутки времени и посмотреть, изменился ли контент.
Благодаря
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
Существует несколько платформ, которые поддерживают буферы обмена и такое поведение.
Например, существует 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
В этом есть только один недостаток хотя он работает только с основным буфером обмена, но не с основным выбором (выбор содержимого с помощью мыши).