Me di cuenta de que a veces el contenido del portapapeles no está disponible si la aplicación de origen (de donde se copió el contenido) está cerrada.
Esto me lleva a preguntarme si es posible saber cuál es la aplicación de origen (por ejemplo, tal vez por PID).
¿Por qué? Si la aplicación de origen es una terminal, me gustaría encontrar el directorio de trabajo de la terminal, en caso de que el contenido copiado sea una ruta relativa, para construir una ruta completa a un archivo.
FYI, actualmente estoy usando xclip para determinar el contenido del portapapeles, por ejemplo
xclip -selection primary -t STRING -o 2> /dev/null
XGetSelectionOwner(3)
le proporciona la identificación de la ventana del propietario de la selección. Desde el cual puede subir el árbol de la ventana para tratar de encontrar una ventana con una propiedad _NET_WM_PID conxprop
(suponiendo que esa ventana proviene de un cliente local que establece esa propiedad).xwininfo -root -tree | less +/0x<that-id>
puede ser suficiente para identificar la aplicación.Respuestas:
Escribí una herramienta que devuelve el nombre de la aplicación simple (por ejemplo, 'Terminal', 'gedit' o 'SmartGit', que son los que probé). La mayor parte del código es robado descaradamente de @Harvey aquí .
fuente
gnome-terminal
iniciar solo una vez la instancia de la aplicación por sesión en lugar de una instancia por ventana de terminal como venerablexterm
. ¿Quizás por eso estás viendo el mismo PID en todos ellos? Porquegnome-terminal
solía deshabilitar esa característica errónea con--disable-factory
(nombre extraño para una opción) pero aparentemente eso ya no sería posible . De todos modos, parece que necesita la contraseña de uno de los procesos que se ejecutan dentro del terminal, no de sí mismo.