J'ai remarqué que le contenu du presse-papiers devient parfois indisponible si l'application source (d'où le contenu a été copié) est fermée.
Cela m'amène à me demander s'il est possible de savoir quelle est l'application source (par exemple peut-être par PID).
Pourquoi? Si l'application source est un terminal, j'aimerais trouver le répertoire de travail du terminal, au cas où le contenu copié est un chemin relatif, pour construire un chemin complet vers un fichier.
Pour info, j'utilise actuellement xclip pour déterminer le contenu du presse-papiers, par exemple
xclip -selection primary -t STRING -o 2> /dev/null
XGetSelectionOwner(3)
vous donne l'ID de fenêtre du propriétaire de la sélection. À partir de laquelle vous pouvez parcourir l'arborescence de la fenêtre pour essayer de trouver une fenêtre avec une propriété _NET_WM_PID par exemple avecxprop
(en supposant que la fenêtre provient d'un client local qui définit cette propriété).xwininfo -root -tree | less +/0x<that-id>
peut être suffisant pour identifier l'application.Réponses:
J'ai écrit un outil qui renvoie le nom simple de l'application (par exemple 'Terminal', 'gedit' ou 'SmartGit' qui sont ceux que j'ai testés). La plupart du code est volé sans vergogne à @Harvey ici .
la source
gnome-terminal
démarrer une seule fois l'instance de l'application par session au lieu d'une instance par fenêtre de terminal comme venerablexterm
. C'est peut-être pourquoi vous voyez le même PID dans chacun d'eux? Cargnome-terminal
vous pouviez auparavant désactiver cette erreur avec--disable-factory
(nom impair pour une option) mais apparemment, cela pourrait ne plus être possible . Quoi qu'il en soit, il semble que vous ayez besoin de la puissance d'un des processus en cours d'exécution à l'intérieur du terminal, pas de lui-même.