Come posso trovare la posizione (sul desktop) di una finestra sulla riga di comando?


19

Sto cercando di scrivere un piccolo script per aiutare a gestire le mie finestre tramite le scorciatoie da tastiera.

Per fare ciò che voglio, devo essere in grado di trovare la posizione e le dimensioni correnti della finestra "attiva" (focalizzata). Per posizione, intendo le coordinate X, Y della finestra sul desktop e per dimensione intendo l'altezza e la larghezza della finestra.

Esiste un'utilità della riga di comando in grado di recuperare queste informazioni?

Risposte:


22

Puoi ottenere tutte le informazioni per la finestra attiva corrente usando questo comando:

xwininfo -id $(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}')

o

xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)

Basta analizzare l'output per le coordinate necessarie. Ecco alcuni comandi utili quando si interagisce con Windows:

  • xwininfo ti darà la geometria relativa e assoluta.
  • xprop ti dirà molte informazioni, incluso se la finestra è attiva, ma non è la geometria
  • xdpyinfo ti fornirà anche l'ID della finestra attiva, ma nessuna informazione aggiuntiva.
  • wmctrl ti mostrerà un elenco di informazioni su Windows e ti consentirà di selezionare la finestra attiva per la modifica, ma non le informazioni.

Ad esempio, per cambiare il titolo della finestra attiva in "Nuovo nome":

wmctrl -r :ACTIVE: -N "New Name"

Oppure per modificare la posizione della finestra attiva:

wmctrl -r :ACTIVE: -e 0,20,20,200,400

Considera wmctrlse devi semplicemente cambiare qualcosa di semplice, come la geometria della finestra. Prendi in considerazione l'uso degli altri script sopra menzionati solo se vuoi fare altre cose più complesse.


1
Vorrei solo notare che ottengo risultati diversi quando eseguo il secondo comando. Il primo funziona come mi aspettavo.
TM.

1
Uso Arch ma potrebbe aiutare qualcuno qui in futuro. Il primo non ha funzionato per me, il secondo non ha fornito le dimensioni corrette forse a causa del WM. Ma la combinazione dei due ha funzionato. xwininfo -id $(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | grep -Eo "0x[0-9a-f]{2,}")
Sev

Grazie! Ma sono d'accordo con i primi due commenti. Il secondo comando, xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)mi mostra una finestra figlio (senza nome) del mio Terminale. Quando ho appena xdpyinfo | grep focusricevuto focus: window 0x435b877, revert to Parent, e 0x435b877 è l'id della finestra restituita dal primo comando (che funziona per me). Questo è su Trusty 14.04.1 LTS
nealmcb,

8

Con "xdotool" puoi interagire facilmente con Windows usando gli eventi della tastiera o del mouse.

Esempio di invio di una CtrlCsequenza alla finestra attiva:

xdotool getwindowfocus key ctrl+c # Sends CTRL+C to the current window.

Se hai davvero bisogno della posizione della finestra:

eval $(xdotool getmouselocation --shell); echo $X $Y

Per ulteriori azioni / opzioni, consultare la pagina man .


Interessante, ma ho appena capito Error: Invalid key sequence 'ctrl-c'.
l0b0
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.