Я заметил, что иногда содержимое буфера обмена становится недоступным, если исходное приложение (откуда контент был скопирован) закрыто.
Это заставляет меня задуматься, возможно ли узнать, что такое исходное приложение (например, по PID).
Почему? Если исходное приложение является терминалом, я хотел бы найти рабочий каталог терминала, если копируемое содержимое является относительным путем, чтобы создать полный путь к файлу.
К вашему сведению, в настоящее время я использую xclip для определения содержимого буфера обмена, например
xclip -selection primary -t STRING -o 2> /dev/null
XGetSelectionOwner(3)
получает идентификатор окна владельца выбора. Из которого вы можете пройти вверх по дереву окон, чтобы попытаться найти окно со свойством _NET_WM_PID, например, сxprop
(при условии, что это окно исходит от локального клиента, который устанавливает это свойство).xwininfo -root -tree | less +/0x<that-id>
может быть достаточно для идентификации приложения.Ответы:
Я написал инструмент, который возвращает простое имя приложения (например, «Terminal», «gedit» или «SmartGit», которые я тестировал). Большая часть кода бесстыдно украдена у @Harvey здесь .
источник
gnome-terminal
запускают только один экземпляр приложения на сеанс, а не один экземпляр на окно терминала, как, например, venerablexterm
. Может быть, поэтому вы видите один и тот же PID во всех них? Для неgnome-terminal
вы использовали , чтобы иметь возможность отключить эту ошибочную особенность с--disable-factory
(нечетным названием опции) , но , по- видимому , что , возможно , больше не будет возможным . В любом случае звучит так, будто вам нужен pwd одного из процессов, работающих внутри терминала, а не самого себя.