Enlightenment. Il dispose d'un shell (eesh) qui permet de passer n'importe quelle commande à n'importe quelle fenêtre (ainsi que des commandes globales style définitions de bindings ou d'actions, de déplacement dans les desktops virtuels, d'actions sur le curseur, de configurer les parametres de E, etc). Ça à l'air de ressembler à du dcop, sauf que ça ne gère pas les communications entres applis X, mais les communications WM <-> fenêtres, et donc marche pour toutes les fenêtres, pas seulement gêrant dcop (je ne connais pas trop dcop, ça fait longtemps que je suis passé à un bureau E only, donc désolé si ce que je dit à son propos est inexact).
En l'occurence, il suffit de récupérer le nom interne de la fenêtre voulue. 'eesh -ewait wl' donne la liste des fenêtres disponibles sous la forme '[num_window] : [name_window]'. Il suffit de parser la liste pour récupérer le bon numéro en fonction du nom de la fenêtre. Si il y a des risques de confusion entre différentes applis avec seulement le nom, il y a moyen d'être plus fin en listant les propriétés de la fenêtre avec 'eesh -ewait wi [num_window]'. En parsant le texte qui est craché, il y a moyen de trouver ce que l'on cherche. Par exemple, 'eesh -ewait wl' me donne :
Ce qui me permet (a moi ou a mon script) de récupérer le nom de ma fenètre (ici, pager du bureau virtuel 0 par exemple, donc 0x800259). Pour être sur que c'est ce que je cherche, 'eesh -ewait wi 0x800259' me donne
WM_NAME 0
WM_ICON_NAME -NONE-
WM_CLASS name.class 0.Enlightenment_Pager
WM_WINDOW_ROLE -NONE-
WM_COMMAND -NONE-
WM_CLIENT_MACHINE -NONE-
Client window 0x800259 x,y 107, 9 wxh 192x 144
Container window 0x800265
Frame window 0x800264 x,y 105, 0 wxh 196x 9
Border UPPAGER lrtb 2,2,9,3
Icon window, pixmap, mask 0, 0, 0
Is group leader 0 Window group leader 0 Client leader 0
Has transients 0 Transient type 0 Transient for 0
No resize H/V 0/0 Shaped 0
Base, min, max, inc w/h 0x0, 30x24, 960x720 12x24
Aspect min, max 1.33333, 1.33333
Struts lrtb 0,0,0,0
MWM border 1 resizeh 1 title 1 menu 1 minimize 1 maximize 1
NeedsInput 1 TakeFocus 0 FocusNever 1 FocusClick 0
NeverUseArea 0 FixedPos 0
Desktop 0 Layer 4(40)
Iconified 0 Sticky 1 Shaded 2 Docked 0
State 4 Shown 1 Active 0 Floating 0
Member of groups 0
Opacity -1
Je sais donc tout de l'état de ma fenêtre, et je sais qu'il s'agit bien de ce que je cherche ('WM_CLASS name.class 0.Enlightenment_Pager'). A noter au passage (idée qui me vient sur le moment, tiens) qu'il devrait être assez facile de faire un wrapper python (par exemple) pour récupérer des objets décrivant les fenêtres, et faire de eesh un shell X orienté objet. Il me semble qu'on avait discuter d'untruc dans le style sur linuxfr il y a quelques temps à propos de je sais plus quoi (mode disgression=off)
Je peux ainsi passer la commande eesh -ewait "wop 0x800259 shade" et mon pager se déroule. La même commande la ré-enroule.
Cet exemple détaillé ici est en fait déjà écrit et disponible dans "/usr/share/doc/e16/examples/shade-pagers.pl" (ici pour shader en une commande tous les pagers). A noter cependant que eesh est en train de subir un grand nettoyage depuis le passage à E16.8, et que les shells donnés en exemple ne fonctionne qu'avec les anciennes versions (mais devrait être facilement adaptables).
PS: il est utile de noter que lorsque eesh est utilisé en mode direct, tout ce que vous lui donnez est interprété directement. Il est plus sur d'utiliser "eesh -ewait [command]" si on ne veut pas faire de catastrophe du style taper "q" pour sortir de eesh alors que cette commande demande à _E_ de quitter (sans confirmation) et donc de fermer votre session X avec votre fenêtre firefox avec le joli-commentaire-non-enregistré-que-vous-êtes-en-train-de-taper... (arggh)...
[^] # Re: plusieurs consoles
Posté par THE_ALF_ . En réponse au journal un meilleur logiciel que Kuake (console linux comme celle de quake) ?. Évalué à 3.
En l'occurence, il suffit de récupérer le nom interne de la fenêtre voulue. 'eesh -ewait wl' donne la liste des fenêtres disponibles sous la forme '[num_window] : [name_window]'. Il suffit de parser la liste pour récupérer le bon numéro en fonction du nom de la fenêtre. Si il y a des risques de confusion entre différentes applis avec seulement le nom, il y a moyen d'être plus fin en listant les propriétés de la fenêtre avec 'eesh -ewait wi [num_window]'. En parsant le texte qui est craché, il y a moyen de trouver ce que l'on cherche. Par exemple, 'eesh -ewait wl' me donne :
Ce qui me permet (a moi ou a mon script) de récupérer le nom de ma fenètre (ici, pager du bureau virtuel 0 par exemple, donc 0x800259). Pour être sur que c'est ce que je cherche, 'eesh -ewait wi 0x800259' me donne
Je sais donc tout de l'état de ma fenêtre, et je sais qu'il s'agit bien de ce que je cherche ('WM_CLASS name.class 0.Enlightenment_Pager'). A noter au passage (idée qui me vient sur le moment, tiens) qu'il devrait être assez facile de faire un wrapper python (par exemple) pour récupérer des objets décrivant les fenêtres, et faire de eesh un shell X orienté objet. Il me semble qu'on avait discuter d'untruc dans le style sur linuxfr il y a quelques temps à propos de je sais plus quoi (mode disgression=off)
Je peux ainsi passer la commande eesh -ewait "wop 0x800259 shade" et mon pager se déroule. La même commande la ré-enroule.
Cet exemple détaillé ici est en fait déjà écrit et disponible dans "/usr/share/doc/e16/examples/shade-pagers.pl" (ici pour shader en une commande tous les pagers). A noter cependant que eesh est en train de subir un grand nettoyage depuis le passage à E16.8, et que les shells donnés en exemple ne fonctionne qu'avec les anciennes versions (mais devrait être facilement adaptables).
PS: il est utile de noter que lorsque eesh est utilisé en mode direct, tout ce que vous lui donnez est interprété directement. Il est plus sur d'utiliser "eesh -ewait [command]" si on ne veut pas faire de catastrophe du style taper "q" pour sortir de eesh alors que cette commande demande à _E_ de quitter (sans confirmation) et donc de fermer votre session X avec votre fenêtre firefox avec le joli-commentaire-non-enregistré-que-vous-êtes-en-train-de-taper... (arggh)...