xdotool le permite buscar ventanas usando su subcomando de búsqueda. Necesito ubicar una ventana que tenga la clase 'gvim' y el título que contenga la palabra 'TODO'. ¿Cómo hago esto?
Lo que he intentado:
- Puede hacerlo
xdotool search --name --class
, pero solo aceptaría un patrón para el nombre y el título. - xdotool admite el encadenamiento de comandos, pero no pude encontrar una manera de encadenar dos llamadas de búsqueda: la segunda simplemente anula la primera.
xdotool
apesta ... esta es una operación tan simple y no hay forma de hacerlo con elegancia.Respuestas:
Mi ayuda de xdotool me informa que sus dos interruptores son iguales (xdotool versión 3.20150503.1),
y como tal no hace nada. Mi xdotool hace lo mismo que el tuyo al reemplazar la pila de la ventana, así que lo hice con un script de shell. A continuación se entrega un script de shell que hace lo que desea:
Los asteriscos en la instrucción if están ahí para hacer una coincidencia de subcadena para
TODO
que pueda aparecer en cualquier parte del título.fuente
Pude identificar una solución corta y unix:
fuente
¡Aquí hay otra solución que se adhiere a la forma UNIX!
A primera vista, no es tan hermoso como el tuyo, @ t7ko:
Pero ten paciencia conmigo! Hay algo de belleza oculta en ella.
En resumen,
(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 (
|
):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) comox,y
, como42,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:
Ahora, comienza a ser legible:
El
xdotool
comandosearch
se utiliza para buscar ventanas con la " clase "gvim
, dejando de lado algunas ventanas "internas". El resultado se enumera comoPID
's (identificadores de proceso).Para cada uno
PID
,xargs
ejecuta otroxdotool search
, verificando el "nombre" para nuestro patrón de ejemploTODO
, después de verificar elPID
.(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:
La parte restante enumera algunos detalles sobre la ventana, incluida la posición. El
sed
comando coincide y devuelve solo elx,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:*) Descargo de responsabilidad: prefiero el código de @ t7ko. ¡Mucho!
fuente
--onlyvisible
es bueno. Me ayudó con un problema similar. Thunderbird puede comenzar con 14 ventanas y solo una o dos están en el escritorio. No tengo idea para qué son los otros. Por cierto, solo se pueden mostrar los medios visibles, no solo se muestran inmediatamente en el escritorio actual.Respuesta corta y elegante (que usa
wmctrl
):El ID de la ventana resultante está en hexadecimal, por lo que debe convertirlo a decimal (utilizado por
xdotool
):Entonces puedes hacer lo que sea con
xdotool
.fuente
wmctrl
el manual dice que-l
no imprime la clase de ventana, solo el título; así que su fragmento de código no resuelve mi problema "buscar por título Y clase".wmctrl -lx
proporciona la clase