[Script] Connaître la taille de l'écran

Zach -  
mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour à tous,

J'ai écrit un petit script, appelé tile_windows.sh, qui permet de positionner une fenêtre sur 1/2 ou 1/4 d'écran suivant l'argument en entrée (entier entre 1 et 8).

Par exemple si j'exécute "tile_windows.sh 1", la fenêtre qui a le focus va occuper la moitié gauche de l'écran.

Pour pouvoir faire cela, j'ai besoin de la taille de l'écran. Je la récupère pour l'instant de la manière suivante :
WIDTH='xdpyinfo | grep 'dimensions:' | cut -f 2 -d ':' | cut -f 1 -d 'x'' 
HEIGHT='xdpyinfo | grep 'dimensions:' | cut -f 2 -d 'x' | cut -f 1 -d ' ''


Mon problème est que les dimensions que j'obtiens correspondent aux dimensions totales de l'écran et pas aux dimensions "effectives" du bureau. J'appel dimension effective, la taille que peux prendre une fenêtre lorsqu'elle est maximisée sur le bureau. J'ai donc un problème quand il y a présence de barre d'outils sur les cotés de l'écran.

Petit exemple pour illustrer mes propos. Si j'ai 1600 pixels de largeur, la commande ci-dessus me donnera une largeur de 1600 (jusque là tout va bien). Supposons que j'ai une barre d'outils sur le coté gauche de l'écran qui fait 40 pixels. Je ne peux en fait placer mes fenêtres que sur une largeur de 1600 - 40 = 1560 pixels et pas 1600. Comme dans mon script, je suppose avoir 1600 pixels de largeur, mes fenêtres se chevaucheront sur 40 pixels.

Pour un bureau donné, il serait facile de compenser à la main en diminuant la largeur et la hauteur par la taille des barres d'outils. Cependant, je souhaiterais ne pas avoir à modifier mon script à chaque changement de la taille ou de la position des barres d'outils.

Savez-vous s'il existe une commande permettant d'obtenir la taille "effective" du bureau que l'on peut utiliser ?

Merci d'avance !
A voir également:

1 réponse

mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   7 879
 
À mon avis ce qu'il te faut c'est xwinfo
https://linux.die.net/man/1/xwininfo

Exemple : ici ma fenêtre est maximisée, j'ai une barre au bas de mon écran (1280x1024) :

(mando@aldur) (~) $ xwininfo

xwininfo: Please select the window about which you
          would like information by clicking the
          mouse in that window.

xwininfo: Window id: 0x4000072 "[Script] Connaître la taille de l'écran | CommentCaMarche - Chromium"

  Absolute upper-left X:  0
  Absolute upper-left Y:  0
  Relative upper-left X:  0
  Relative upper-left Y:  0
  Width: 1280
  Height: 974
  Depth: 24
  Visual: 0x21
  Visual Class: TrueColor
  Border width: 0
  Class: InputOutput
  Colormap: 0x20 (installed)
  Bit Gravity State: NorthWestGravity
  Window Gravity State: NorthWestGravity
  Backing Store State: NotUseful
  Save Under State: no
  Map State: IsViewable
  Override Redirect State: no
  Corners:  +0+0  -0+0  -0-50  +0-50
  -geometry 1280x974+0+0


On retrouve ici que ma barre est en bas de l'écran et fait 50px de haut.
Maintenant ma fenêtre est à peu près centrée sur mon bureau et n'en touche pas les bords.

(mando@aldur) (~) $ xwininfo

xwininfo: Please select the window about which you
          would like information by clicking the
          mouse in that window.

xwininfo: Window id: 0x4000072 "[Script] Connaître la taille de l'écran | CommentCaMarche - Chromium"

  Absolute upper-left X:  81
  Absolute upper-left Y:  47
  Relative upper-left X:  0
  Relative upper-left Y:  0
  Width: 1054
  Height: 838
  Depth: 24
  Visual: 0x21
  Visual Class: TrueColor
  Border width: 0
  Class: InputOutput
  Colormap: 0x20 (installed)
  Bit Gravity State: NorthWestGravity
  Window Gravity State: NorthWestGravity
  Backing Store State: NotUseful
  Save Under State: no
  Map State: IsViewable
  Override Redirect State: no
  Corners:  +81+47  -145+47  -145-139  +81-139
  -geometry 1054x838+81+47


xprop permet de récupérer l'id de la fenêtre courante et de le passer à xwininfo.
https://www.ruby-forum.com/t/title-from-current-active-window/148609

Bonne chance
0