¡Aquí hay otra solución que se adhiere a la forma UNIX!
A primera vista, no es tan hermoso como el tuyo, @ t7ko:
xdotool search --onlyvisible --class 'gvim' getwindowpid %@ | xargs -I{} xdotool search --all --pid {} --name 'TODO' getwindowgeometry | sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
Pero ten paciencia conmigo! Hay algo de belleza oculta en ella.
En resumen,
- tiene una estructura lineal , en lugar de una estructura de árbol, como una en lugar de dos dimensiones
- utiliza una sintaxis de shell más conocida .
- en realidad responde a su pregunta: localiza la ventana.
(Si estos puntos son ventajas depende del contexto, ignoremos este aspecto * ).
Mostraré el mismo código en un diseño más estructurado a continuación, para que sea más fácil de entender paso a paso.
Pero tenga en cuenta que la sangría es para explicar el comando: no indica anidamiento, todo sigue siendo una tubería lineal de UNIX.
El mismo comando, solo dividido después de las tuberías ( |
):
xdotool search --onlyvisible --class 'gvim' getwindowpid %@ |
xargs -I{} xdotool search --all --pid {} --name 'TODO' getwindowgeometry |
sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
El comando completo, como se muestra arriba, proporciona la ubicación de píxeles de la gvim
ventana, devolviendo las coordenadas de píxeles en relación con la esquina superior izquierda de la pantalla actual (posiblemente virtual) como x,y
, como 42,433
, o tal vez -5375,-3809
cuando está en la primera de cuatro por cuatro pantallas virtuales , y el actual está en algún lugar del lado derecho.
Por ahora, acortaré el comando para encontrar solo una ID de ventana X11; tal vez eso es todo lo que realmente necesitaba el OP, no estoy seguro:
La tubería de comando acortada, un comando de shell separado en cada línea:
xdotool search --onlyvisible --class 'gvim' getwindowpid %@ |
xargs -I{} xdotool search --all --pid {} --name 'TODO'
Ahora, comienza a ser legible:
xdotool \
search --onlyvisible --class 'gvim' \
getwindowpid %@ |
xargs -I{} \
xdotool search --all --pid {} --name 'TODO'
El xdotool
comando search
se utiliza para buscar ventanas con la " clase " gvim
, dejando de lado algunas ventanas "internas". El resultado se enumera como PID
's (identificadores de proceso).
Para cada uno PID
, xargs
ejecuta otro xdotool search
, verificando el "nombre" para nuestro patrón de ejemplo TODO
, después de verificar el PID
.
(Por si acaso: las líneas que terminan en \
- llamadas líneas de continuación - deben terminar realmente con \
y sin espacios en blanco antes de la nueva línea).
Ahora de vuelta al comando original:
xdotool \
search --onlyvisible --class 'gvim' \
getwindowpid %@ |
xargs -I{} \
xdotool \
search --all --pid {} --name 'TODO' \
getwindowgeometry |
sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
La parte restante enumera algunos detalles sobre la ventana, incluida la posición. El sed
comando coincide y devuelve solo el x,y
valor de posición.
Como ejemplo, ejecutar el comando en la parte superior de mi 16ª pantalla virtual (de 4 por 4), con un "TODO" gvim
en la pantalla 1:
$ xdotool search --onlyvisible --class 'gvim' getwindowpid %@ | xargs -I{} xdotool search --all --pid {} --name 'TODO' getwindowgeometry | sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
-7653,-4732
*) Descargo de responsabilidad: prefiero el código de @ t7ko. ¡Mucho!
xdotool
apesta ... esta es una operación tan simple y no hay forma de hacerlo con elegancia.