{"id":55206,"date":"2020-01-15T00:00:00","date_gmt":"2020-01-14T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/alternativnoe-upravlenie-oknami-v-linux"},"modified":"2020-02-18T14:03:18","modified_gmt":"2020-02-18T11:03:18","slug":"alternativnoe-upravlenie-oknami-v-linux","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","title":{"rendered":"Contr\u00f4le alternatif des fen\u00eatres sous Linux","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Je fais partie de ceux qui utilisent la touche Caps Lock pour changer de disposition parce que c'est trop fatiguant d'appuyer sur deux touches quand on peut en appuyer sur une. J'aimerais m\u00eame avoir deux touches inutiles : l'une pour passer \u00e0 la disposition anglaise et l'autre pour la russe. Mais la seconde touche inutile est celle qui ouvre le menu contextuel, qui est tellement inutile que beaucoup de fabricants de portables l'\u00e9liminent. Donc, je dois me contenter de ce que j'ai. <\/p>\n<p><\/p>\n<p>Et je ne veux pas chercher les ic\u00f4nes de mes fen\u00eatres sur la barre des t\u00e2ches en changeant de fen\u00eatre, ni me concentrer sur les noms en faisant d\u00e9filer \u00e0 travers <em>Alt+Tab<\/em>, faire d\u00e9filer les bureaux, etc. Je veux appuyer sur une combinaison de touches (id\u00e9alement juste une, mais il n'y a plus de touches inutiles libres) et acc\u00e9der directement \u00e0 la fen\u00eatre dont j'ai besoin. Par exemple comme ceci :<\/p>\n<p><\/p>\n<ul>\n<li>Alt+F : Firefox<\/li>\n<li>Alt+D : Firefox (Navigation priv\u00e9e)<\/li>\n<li>Alt+T : Terminal<\/li>\n<li>Alt+M : Calculatrice<\/li>\n<li>Alt+E : IntelliJ Idea<\/li>\n<li>et cetera.<\/li>\n<\/ul>\n<p><\/p>\n<p>D'ailleurs, quand je presse, par exemple, sur <em>Alt+M<\/em> , je veux voir la calculatrice ind\u00e9pendamment du fait que ce programme soit ouvert ou non. Si c'est le cas, la fen\u00eatre doit prendre le focus, sinon, il faut lancer le programme souhait\u00e9 et lui donner le focus lorsqu'il est charg\u00e9.<\/p>\n<p><\/p>\n<p>Pour les situations qui ne sont pas couvertes par le sc\u00e9nario pr\u00e9c\u00e9dent, je veux avoir des combinaisons de touches universelles sur lesquelles je peux facilement assigner n'importe quelle fen\u00eatre ouverte. Par exemple, j'ai attribu\u00e9 10 combinaisons allant de <em>Alt+1<\/em> \u00e0 <em>Alt+0<\/em>, qui ne sont li\u00e9es \u00e0 aucun programme. Je peux tout simplement appuyer sur <em>Alt+1<\/em> et la fen\u00eatre qui est actuellement au premier plan prendra le focus quand je presse <em>Alt+1<\/em>.<\/p>\n<p><\/p>\n<p>Sous le post, une description de quelques autres fonctionnalit\u00e9s et une r\u00e9ponse sur la fa\u00e7on de proc\u00e9der. Mais je pr\u00e9viens tout de suite que ce type de personnalisation peut cr\u00e9er une forte d\u00e9pendance et m\u00eame un manque lorsque l'on doit utiliser Windows, Mac OS ou m\u00eame un autre ordinateur avec Linux.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>En r\u00e9alit\u00e9, si l'on r\u00e9fl\u00e9chit, nous n'utilisons pas tant de programmes au quotidien. Un navigateur, un terminal, un IDE, un messager, un gestionnaire de fichiers, une calculatrice et, c'est \u00e0 peu pr\u00e8s tout. Il ne faut pas tant de combinaisons de touches pour couvrir 95% des t\u00e2ches quotidiennes.<\/p>\n<p><\/p>\n<p>Pour les programmes qui ont plusieurs fen\u00eatres ouvertes, l'une d'entre elles peut \u00eatre d\u00e9finie comme principale. Par exemple, plusieurs fen\u00eatres d'IntelliJ Idea ouvertes et assign\u00e9es \u00e0 <em>Alt+E.<\/em>Dans des conditions normales, lorsque l'on appuie sur <em>Alt+E.<\/em> , une des fen\u00eatres de ce programme s'ouvrira, probablement celle qui \u00e9tait ouverte en premier. Cependant, si l'on appuie sur <em>Alt+E.<\/em> Lorsque l'une des fen\u00eatres de ce programme est d\u00e9j\u00e0 au premier plan, c'est cette fen\u00eatre qui sera d\u00e9finie comme principale et c'est elle qui recevra le focus lors des pressions suivantes de la combinaison. <\/p>\n<p><\/p>\n<p>La fen\u00eatre principale peut \u00eatre r\u00e9assign\u00e9e. Pour cela, il faut d'abord r\u00e9initialiser la combinaison, puis attribuer une autre fen\u00eatre comme principale. Pour r\u00e9initialiser la combinaison, il faut appuyer sur la combinaison elle-m\u00eame, puis sur la combinaison sp\u00e9ciale de r\u00e9initialisation, que j'ai assign\u00e9e \u00e0 <em>Alt+Backspace<\/em>. Cela d\u00e9clenchera un script qui annulera la d\u00e9signation de la fen\u00eatre principale pour la combinaison pr\u00e9c\u00e9dente. Ensuite, il sera possible de d\u00e9signer une nouvelle fen\u00eatre principale comme cela a \u00e9t\u00e9 d\u00e9crit dans le paragraphe pr\u00e9c\u00e9dent. La r\u00e9initialisation de la fen\u00eatre attach\u00e9e aux combinaisons universelles se fait de fa\u00e7on similaire.<\/p>\n<p><\/p>\n<p>L'introduction a \u00e9t\u00e9 longue, mais je voulais d'abord expliquer ce que nous allons faire, puis d\u00e9crire comment le faire.<\/p>\n<p><\/p>\n<h2 id=\"dlya-teh-komu-nadoelo-chitat\">Pour ceux qui en ont assez de lire<\/h2>\n<p><\/p>\n<p>En r\u00e9sum\u00e9, le lien vers les scripts se trouve \u00e0 la fin de l'article.<\/p>\n<p><\/p>\n<p>Mais il n'est toujours pas possible de l'installer et de l'utiliser imm\u00e9diatement. Il faudra d'abord comprendre comment le script trouve la fen\u00eatre n\u00e9cessaire. Sans cela, il ne sera pas possible d'indiquer au script o\u00f9 exactement transmettre le focus. Et il faut conna\u00eetre la marche \u00e0 suivre si jamais la fen\u00eatre appropri\u00e9e n'est pas trouv\u00e9e.<\/p>\n<p><\/p>\n<p>Je ne vais pas non plus me concentrer sur la fa\u00e7on de configurer l'ex\u00e9cution des scripts en appuyant sur des combinaisons de touches. Par exemple, dans KDE, cela se trouve dans les Param\u00e8tres syst\u00e8me \u2192 Raccourcis \u2192 Raccourcis personnalis\u00e9s. D'autres gestionnaires de fen\u00eatres devraient \u00e9galement avoir quelque chose de similaire.<\/p>\n<p><\/p>\n<h2 id=\"znakomstvo-s-wmctrl\">Pr\u00e9sentation de wmctrl<\/h2>\n<p><\/p>\n<p><em>Wmctrl<\/em> est un outil en ligne de commande pour interagir avec le gestionnaire de fen\u00eatres X. C'est le programme cl\u00e9 pour le script. Voyons rapidement comment il peut \u00eatre utilis\u00e9.<\/p>\n<p><\/p>\n<p>Pour commencer, affichons la liste des fen\u00eatres ouvertes :<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ wmctrl -lx\n0x01e0000e -1 plasmashell.plasmashell             N\/A Bureau \u2014 Plasma\n0x01e0001e -1 plasmashell.plasmashell             N\/A Plasma\n0x03a00001  0 skype.Skype                         N\/A Skype\n0x04400003  0 Navigator.Firefox                   N\/A Google Traduction - Mozilla Firefox\n0x04400218  0 Navigator.Firefox                   N\/A Meilleures publications du jour \/ Habr - Mozilla Firefox (Navigation priv\u00e9e)\n...<\/code><\/pre>\n<p><\/p>\n<p>L'option <em>-l<\/em> affiche la liste de toutes les fen\u00eatres ouvertes, et <em>-x<\/em> ajoute \u00e0 la sortie le nom de la classe (<em>skype.Skype<\/em>, <em>Navigator.Firefox<\/em> etc.). Nous aurons besoin ici de l'ID de la fen\u00eatre (colonne 1), du nom de la classe (colonne 3) et du titre de la fen\u00eatre (derni\u00e8re colonne).<\/p>\n<p><\/p>\n<p>On peut essayer d'activer une fen\u00eatre avec l'option <em>-a<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ wmctrl -a skype.Skype -x<\/code><\/pre>\n<p><\/p>\n<p>Si tout s'est bien pass\u00e9, une fen\u00eatre Skype devrait appara\u00eetre \u00e0 l'\u00e9cran. Si \u00e0 la place de l'option <em>-x<\/em> utilisez l'option <em>-i<\/em>, donc au lieu du nom de la classe, il sera possible d'indiquer l'ID de la fen\u00eatre. Le probl\u00e8me avec l'ID est qu'il change \u00e0 chaque lancement de l'application et nous ne pouvons pas le conna\u00eetre \u00e0 l'avance. D'un autre c\u00f4t\u00e9, cet attribut d\u00e9signe sans ambigu\u00eft\u00e9 la fen\u00eatre, ce qui peut \u00eatre important lorsque l'application ouvre plus d'une fen\u00eatre. Nous en parlerons un peu plus loin.<\/p>\n<p><\/p>\n<p>\u00c0 ce stade, nous devons nous souvenir que nous chercherons la fen\u00eatre souhait\u00e9e \u00e0 l'aide d'une regex dans la sortie. <em>wmctrl -lx<\/em>. Mais cela ne signifie pas que nous devons n\u00e9cessairement utiliser quelque chose de complexe. En g\u00e9n\u00e9ral, le nom de la classe ou du titre de la fen\u00eatre suffit. <\/p>\n<p><\/p>\n<p>En principe, l'id\u00e9e principale devrait d\u00e9j\u00e0 \u00eatre claire. Dans les param\u00e8tres des raccourcis clavier\/shortcuts de votre gestionnaire de fen\u00eatres, nous configurons la combinaison souhait\u00e9e pour ex\u00e9cuter le script.<\/p>\n<p><\/p>\n<h2 id=\"kak-polzovatsya-skriptami\">Comment utiliser des scripts<\/h2>\n<p><\/p>\n<p>Tout d'abord, il faut installer des utilitaires en ligne de commande. <em>wmctrl<\/em> et <em>xdotool<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ sudo apt-get install wmctrl xdotool<\/code><\/pre>\n<p><\/p>\n<p>Ensuite, il faut t\u00e9l\u00e9charger les scripts et les ajouter dans <em>$PATH<\/em>. Je les place g\u00e9n\u00e9ralement dans <em>~\/bin<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cd ~\/bin\n$ git clone https:\/\/github.com\/masyamandev\/Showwin-script.git\n$ ln -s .\/Showwin-script\/showwin showwin\n$ ln -s .\/Showwin-script\/showwinDetach showwinDetach<\/code><\/pre>\n<p><\/p>\n<p>Si le r\u00e9pertoire <em>~\/bin<\/em> n'existait pas, il faut le cr\u00e9er et red\u00e9marrer (ou se reconnecter), sinon <em>~\/bin<\/em> ne sera pas accessible dans <em>$PATH<\/em>. Si tout est fait correctement, les scripts devraient \u00eatre accessibles depuis la console et l'auto-compl\u00e9tion devrait fonctionner avec la touche Tab.<\/p>\n<p><\/p>\n<p>Le script principal <strong>showwin<\/strong> prend 2 param\u00e8tres : le premier est la regex selon laquelle nous allons chercher la fen\u00eatre souhait\u00e9e, et le deuxi\u00e8me param\u00e8tre est la commande \u00e0 ex\u00e9cuter si la fen\u00eatre souhait\u00e9e n'est pas trouv\u00e9e. <\/p>\n<p><\/p>\n<p>Vous pouvez essayer d'ex\u00e9cuter le script, par exemple :<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ showwin \"Mozilla Firefox$\" firefox<\/code><\/pre>\n<p><\/p>\n<p>Si Firefox est install\u00e9, la fen\u00eatre doit recevoir le focus. M\u00eame si Firefox n'a pas \u00e9t\u00e9 lanc\u00e9, il devrait d\u00e9marrer.<\/p>\n<p><\/p>\n<p>Si cela a fonctionn\u00e9, vous pouvez essayer de configurer l'ex\u00e9cution de commandes sur des combinaisons. Dans les param\u00e8tres des raccourcis clavier\/shortcuts, ajoutez :<\/p>\n<p><\/p>\n<ul>\n<li>Alt+F: showwin \u00abMozilla Firefox$\u00bb firefox<\/li>\n<li>Alt+D: showwin \u00abMozilla Firefox (Navigation priv\u00e9e)$\u00bb \u00abfirefox -private-window\u00bb<\/li>\n<li>Alt+C: showwin \u00abchromium-browser.Chromium-browser N*\u00bb chromium-browser<\/li>\n<li>Alt+X: showwin \u00abchromium-browser.Chromium-browser I*\u00bb \u00abchromium-browser -incognito\u00bb<\/li>\n<li>Alt+S: showwin \u00abskype.Skype\u00bb skypeforlinux<\/li>\n<li>Alt+E: showwin \u00abjetbrains-idea\u00bb idea.sh<\/li>\n<\/ul>\n<p><\/p>\n<p>Et cetera. Chaque personne peut configurer des combinaisons de touches et de logiciels comme elle le souhaite.<br \/>\nSi tout a \u00e9t\u00e9 fait correctement, nous devrions pouvoir passer d'une fen\u00eatre \u00e0 l'autre simplement en appuyant sur les touches sp\u00e9cifi\u00e9es ci-dessus.<\/p>\n<p><\/p>\n<p>Je vais d\u00e9cevoir les amateurs de Chrome : il est impossible de distinguer une fen\u00eatre normale d'une fen\u00eatre incognito par la sortie. <em>wmctrl<\/em> Il est impossible de les distinguer, car ils ont les m\u00eames noms de classes et les titres de fen\u00eatre. Dans les regex propos\u00e9s, les symboles N* et I* sont n\u00e9cessaires uniquement pour diff\u00e9rencier ces expressions r\u00e9guli\u00e8res, afin de pouvoir assigner des fen\u00eatres principales diff\u00e9rentes.<\/p>\n<p><\/p>\n<p>Pour r\u00e9initialiser la fen\u00eatre principale de la combinaison pr\u00e9c\u00e9dente (en fait pour les regex qui <strong>showwin<\/strong> ont \u00e9t\u00e9 appel\u00e9es pour la derni\u00e8re fois), il faut ex\u00e9cuter le script <strong>showwinDetach<\/strong>. J'ai assign\u00e9 ce script \u00e0 une combinaison de touches <em>Alt+Backspace<\/em>. <\/p>\n<p><\/p>\n<p>Le script <strong>showwin<\/strong> a encore une autre fonction. Lorsqu'il est appel\u00e9 avec un seul param\u00e8tre (dans ce cas, le param\u00e8tre est simplement un identifiant), il ne v\u00e9rifie pas du tout les regex et consid\u00e8re toutes les fen\u00eatres comme adapt\u00e9es. Cela peut sembler inutile en soi, mais cela nous permet de d\u00e9finir n'importe quelle fen\u00eatre comme principale et de basculer rapidement vers cette fen\u00eatre.<\/p>\n<p><\/p>\n<p>J'ai configur\u00e9 les combinaisons suivantes :<\/p>\n<p><\/p>\n<ul>\n<li>Alt+1: showwin \u00abCustomKey1\u00bb<\/li>\n<li>Alt+2: showwin \u00abCustomKey2\u00bb<\/li>\n<li>\u2026<\/li>\n<li>Alt+0: showwin \u00abCustomKey0\u00bb<\/li>\n<li>Alt+Backspace : showwinDetach<\/li>\n<\/ul>\n<p><\/p>\n<p>Ainsi, je peux lier n'importe quelle fen\u00eatre \u00e0 des combinaisons <em>Alt+1<\/em>\u2026<em>Alt+0<\/em>. Il suffit d'appuyer sur <em>Alt+1<\/em> pour lier la fen\u00eatre actuelle \u00e0 cette combinaison. Je peux annuler le lien en appuyant sur <em>Alt+1<\/em>, et ensuite <em>Alt+Backspace<\/em>. Ou fermer la fen\u00eatre, cela fonctionne aussi.<\/p>\n<p><\/p>\n<p>Ensuite, je vais vous parler de quelques d\u00e9tails techniques. Vous pouvez les ignorer et simplement essayer de configurer et voir. Mais je recommanderais tout de m\u00eame de comprendre les scripts d'autres personnes avant de les ex\u00e9cuter sur votre ordinateur :).<\/p>\n<p><\/p>\n<h2 id=\"kak-razlichat-raznye-okna-odnogo-prilozheniya\">Comment distinguer les diff\u00e9rentes fen\u00eatres d'une application<\/h2>\n<p><\/p>\n<p>En principe, le tout premier exemple \u00abwmctrl -a skype.Skype -x\u00bb fonctionnait et peut \u00eatre utilis\u00e9. Mais regardons encore une fois l'exemple avec Firefox, o\u00f9 deux fen\u00eatres sont ouvertes :<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">0x04400003  0 Navigator.Firefox                   N\/A Google Translate - Mozilla Firefox\n0x04400218  0 Navigator.Firefox                   N\/A Meilleures publications de la journ\u00e9e \/ Habr - Mozilla Firefox (Navigation priv\u00e9e)<\/code><\/pre>\n<p><\/p>\n<p>La premi\u00e8re fen\u00eatre est en mode normal, tandis que la seconde est en navigation priv\u00e9e. Ces fen\u00eatres devraient \u00eatre consid\u00e9r\u00e9es comme des applications diff\u00e9rentes et on devrait pouvoir basculer entre elles avec diff\u00e9rentes combinaisons de touches. <\/p>\n<p><\/p>\n<p>Il faut complexifier le script qui change les fen\u00eatres. J'ai utilis\u00e9 la solution suivante : afficher la liste de toutes les fen\u00eatres, faire <em>grep<\/em> en utilisant une regex, prendre la premi\u00e8re ligne avec <em>head<\/em>, extraire la premi\u00e8re colonne (ce sera l'ID de la fen\u00eatre) avec <em>cut<\/em>, et basculer vers la fen\u00eatre par ID.<\/p>\n<p><\/p>\n<p>Il devrait y avoir une blague sur les expressions r\u00e9guli\u00e8res et deux probl\u00e8mes, mais en r\u00e9alit\u00e9, je n'utilise rien de compliqu\u00e9. Les regex me sont n\u00e9cessaires pour sp\u00e9cifier la fin de ligne (le symbole \u00ab$\u00bb) et distinguer \u00abMozilla Firefox$\u00bb de \u00abMozilla Firefox (Navigation priv\u00e9e)$\u00bb.<\/p>\n<p><\/p>\n<p>L'\u00e9quipe est \u00e0 peu pr\u00e8s comme suit :<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ wmctrl -i -a `wmctrl -lx | grep -i \"Mozilla Firefox$\" | head -1 | cut -d\" \" -f1`<\/code><\/pre>\n<p><\/p>\n<p>On peut d\u00e9j\u00e0 deviner la deuxi\u00e8me caract\u00e9ristique du script : si grep ne renvoie rien, cela signifie que l'application d\u00e9sir\u00e9e n'est pas ouverte, et il faut la lancer en ex\u00e9cutant la commande du deuxi\u00e8me param\u00e8tre. Ensuite, il faut v\u00e9rifier r\u00e9guli\u00e8rement si la fen\u00eatre souhait\u00e9e s'est ouverte, afin de lui donner le focus. Je ne vais pas trop insister l\u00e0-dessus, ceux que cela int\u00e9resse peuvent consulter le code source.<\/p>\n<p><\/p>\n<h2 id=\"kogda-okna-prilozheniya-ne-razlichimy\">Quand les fen\u00eatres de l'application ne sont pas discernables<\/h2>\n<p><\/p>\n<p>Donc, nous avons appris \u00e0 passer le focus \u00e0 la fen\u00eatre de l'application d\u00e9sir\u00e9e. Mais que faire si plusieurs fen\u00eatres de l'application sont ouvertes ? \u00c0 laquelle d'entre elles doit-on donner le focus ? Le script ci-dessus donnera probablement le focus \u00e0 la premi\u00e8re fen\u00eatre ouverte. Cependant, nous souhaiterions plus de flexibilit\u00e9. Nous aimerions pouvoir m\u00e9moriser quelle fen\u00eatre nous devons cibler et pouvoir nous y d\u00e9placer pr\u00e9cis\u00e9ment.<\/p>\n<p><\/p>\n<p>L'id\u00e9e \u00e9tait la suivante : si nous voulons m\u00e9moriser un certain fen\u00eatre pour une combinaison de touches, nous devons appuyer sur cette combinaison lorsque la fen\u00eatre d\u00e9sir\u00e9e est au premier plan. Par la suite, lorsque nous appuierons sur cette combinaison, le focus sera donn\u00e9 \u00e0 cette fen\u00eatre. Tant que la fen\u00eatre n'est pas ferm\u00e9e ou que nous ne r\u00e9initialisons pas cette combinaison dans le script. <strong>showwinDetach<\/strong>.<\/p>\n<p><\/p>\n<p>L'algorithme du script <strong>showwin<\/strong> est \u00e0 peu pr\u00e8s le suivant :<\/p>\n<p><\/p>\n<ul>\n<li>V\u00e9rifiez si nous avons d\u00e9j\u00e0 m\u00e9moris\u00e9 l'ID de la fen\u00eatre \u00e0 laquelle nous devons donner le focus.<br \/>\nSi nous l'avons m\u00e9moris\u00e9 et que cette fen\u00eatre existe toujours, nous lui donnons le focus et sortons. <\/li>\n<li>Nous examinons quelle fen\u00eatre est actuellement au premier plan, et si elle correspond \u00e0 notre requ\u00eate, nous m\u00e9morisons son ID pour y revenir plus tard et nous sortons.<\/li>\n<li>Nous passons \u00e0 une fen\u00eatre appropri\u00e9e si elle existe, ou nous ouvrons l'application n\u00e9cessaire.<\/li>\n<\/ul>\n<p><\/p>\n<p>Pour savoir quelle fen\u00eatre est actuellement au premier plan, nous pouvons utiliser l'outil en ligne de commande xdotool, en convertissant sa sortie en format hexad\u00e9cimal :<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ printf \"0xx\" `xdotool getwindowfocus`<\/code><\/pre>\n<p><\/p>\n<p>Il est plus simple de m\u00e9moriser des choses dans bash en cr\u00e9ant des fichiers dans un syst\u00e8me de fichiers virtuel situ\u00e9 en m\u00e9moire. Dans Ubuntu, cela est mont\u00e9 par d\u00e9faut dans <em>\/dev\/shm\/<\/em>. Je ne peux rien dire sur d'autres distributions, j'esp\u00e8re que quelque chose de similaire existe aussi. On peut v\u00e9rifier avec la commande :<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ mount -l | grep tmpfs<\/code><\/pre>\n<p><\/p>\n<p>Le script cr\u00e9era des r\u00e9pertoires vides dans ce dossier, comme ceux-ci : <em>\/dev\/shm\/$USER\/showwin\/$SEARCH_REGEX\/$WINDOW_ID<\/em>. De plus, \u00e0 chaque appel, il cr\u00e9era un symlink <em>\/dev\/shm\/$USER\/showwin\/showwin_last<\/em> sur <em>\/dev\/shm\/$USER\/showwin\/$SEARCH_REGEX<\/em>. Cela sera n\u00e9cessaire pour pouvoir supprimer l'ID de la fen\u00eatre pour une combinaison donn\u00e9e \u00e0 l'aide du script. <strong>showwinDetach<\/strong>.<\/p>\n<p><\/p>\n<h2 id=\"chto-mozhno-uluchshit\">Qu'est-ce qui peut \u00eatre am\u00e9lior\u00e9<\/h2>\n<p><\/p>\n<p>Tout d'abord, les scripts doivent \u00eatre configur\u00e9s manuellement. \u00c9tant donn\u00e9 la n\u00e9cessit\u00e9 de s'impliquer et de faire beaucoup soi-m\u00eame, beaucoup d'entre vous n'essaieront m\u00eame pas de configurer le syst\u00e8me. S'il \u00e9tait possible d'installer simplement un paquet et de configurer tout plus facilement, cela pourrait peut-\u00eatre gagner en popularit\u00e9. Peut-\u00eatre qu'un jour, m\u00eame l'application serait int\u00e9gr\u00e9e dans les distributions standards.<\/p>\n<p><\/p>\n<p>Et il serait peut-\u00eatre possible de simplifier les choses. Si, par l'ID de la fen\u00eatre, on peut savoir quel ID de processus l'a cr\u00e9\u00e9e, et qu'avec l'ID du processus, on peut conna\u00eetre la commande qui l'a g\u00e9n\u00e9r\u00e9e, alors il serait possible d'automatiser la configuration. En r\u00e9alit\u00e9, je ne me suis pas pench\u00e9 sur la question de savoir si ce que j'ai \u00e9crit dans ce paragraphe est possible. Personnellement, cela me convient comme cela fonctionne actuellement. Mais si quelqu'un d'autre que moi trouve cette approche pratique et l'am\u00e9liore, je serai ravi d'utiliser une meilleure solution.<\/p>\n<p><\/p>\n<p>Un autre probl\u00e8me, comme je l'ai d\u00e9j\u00e0 mentionn\u00e9, est que dans certains cas, il est impossible de distinguer une fen\u00eatre d'une autre. Je n'ai observ\u00e9 cela jusqu'\u00e0 pr\u00e9sent qu'avec le mode incognito dans Chrome\/Chromium, mais il est possible qu'il y ait d'autres cas similaires. En dernier recours, il y a toujours des combinaisons universelles. <em>Alt+1<\/em>\u2026<em>Alt+0<\/em>. Encore une fois, j'utilise Firefox et, pour moi, ce probl\u00e8me n'est pas significatif.<\/p>\n<p><\/p>\n<p>Cependant, un probl\u00e8me qui m'affecte vraiment est que je travaille sur Mac OS et que je n'ai pas pu configurer quelque chose de similaire l\u00e0-bas. L'utilitaire <em>wmctrl<\/em> semble pouvoir \u00eatre install\u00e9, mais il ne fonctionne pas bien sur Mac OS. On peut faire quelque chose avec l'application <em>Automator<\/em>, mais elle est si lente qu'il est inconfortable de l'utiliser m\u00eame lorsqu'elle fonctionne. Je n'ai pas r\u00e9ussi \u00e0 configurer les combinaisons de touches pour qu'elles fonctionnent dans tous les programmes non plus. Si quelqu'un trouve une solution, je serais heureux de l'utiliser.<\/p>\n<p><\/p>\n<h2 id=\"vmesto-zaklyucheniya\">En conclusion<\/h2>\n<p><\/p>\n<p>Il s'est av\u00e9r\u00e9 qu'il y avait beaucoup plus \u00e0 dire pour une fonctionnalit\u00e9 qui semblait si simple. Je voulais transmettre l'id\u00e9e et ne pas surcharger le texte, mais je n'ai pas encore trouv\u00e9 comment l'expliquer simplement. Peut-\u00eatre qu'un format vid\u00e9o serait mieux, mais ici, ce n'est pas tr\u00e8s appr\u00e9ci\u00e9.<\/p>\n<p><\/p>\n<p>J'ai bri\u00e8vement parl\u00e9 de ce qu'il y a sous le capot du script et de la fa\u00e7on de le configurer. Je ne suis pas entr\u00e9 dans les d\u00e9tails du script lui-m\u00eame, mais il ne fait que 50 lignes, il n'est pas difficile de le comprendre. <\/p>\n<p><\/p>\n<p>J'esp\u00e8re que quelqu'un d'autre essaiera cette id\u00e9e et l'appr\u00e9ciera peut-\u00eatre m\u00eame. Pour ma part, je peux dire que le script a \u00e9t\u00e9 \u00e9crit il y a environ 3 ans et qu'il m'est TR\u00c8S pratique. Tellement pratique que cela me cause un s\u00e9rieux inconfort lorsque je travaille sur d'autres ordinateurs. Et avec mon MacBook professionnel. <\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/masyamandev\/Showwin-script\">Lien vers les scripts<\/a><\/noindex><\/p>\n<p>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483846\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042f \u0438\u0437 \u0442\u0435\u0445, \u043a\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0430 Caps Lock \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043b\u0435\u043d\u044c \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c 2 \u043a\u043b\u0430\u0432\u0438\u0448\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u043e\u0434\u043d\u0443. \u042f \u0431\u044b \u0434\u0430\u0436\u0435 \u0445\u043e\u0442\u0435\u043b 2 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438: \u043e\u0434\u043d\u0443 \u0431\u044b \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u0439 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438, \u0430 \u0432\u0442\u043e\u0440\u0443\u044e \u0434\u043b\u044f \u0440\u0443\u0441\u0441\u043a\u043e\u0439. \u041d\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0430 \u2014 \u044d\u0442\u043e \u0432\u044b\u0437\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043d\u0443\u0436\u043d\u0430\u044f, \u0447\u0442\u043e \u0432\u044b\u043f\u0438\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f\u043c\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-55206","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042f \u0438\u0437 \u0442\u0435\u0445, \u043a\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0430 Caps Lock \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043b\u0435\u043d\u044c \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c 2 \u043a\u043b\u0430\u0432\u0438\u0448\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u043e\u0434\u043d\u0443.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043a\u043d\u0430\u043c\u0438 \u0432 Linux | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042f \u0438\u0437 \u0442\u0435\u0445, \u043a\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0430 Caps Lock \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043b\u0435\u043d\u044c \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c 2 \u043a\u043b\u0430\u0432\u0438\u0448\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u043e\u0434\u043d\u0443.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-01-14T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:03:18+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Contr\u00f4le alternatif des fen\u00eatres sous Linux | ProHoster","description":"Je fais partie de ceux qui mettent la permutation de la disposition sur Caps Lock parce que j'ai la flemme d'appuyer sur 2 touches quand je peux en appuyer sur une.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043a\u043d\u0430\u043c\u0438 \u0432 Linux | ProHoster","og:description":"\u042f \u0438\u0437 \u0442\u0435\u0445, \u043a\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0430 Caps Lock \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043b\u0435\u043d\u044c \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c 2 \u043a\u043b\u0430\u0432\u0438\u0448\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u043e\u0434\u043d\u0443.","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-01-14T21:00:00+00:00","article:modified_time":"2020-02-18T11:03:18+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55206","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:48:29","updated":"2022-09-30 14:18:59","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/55206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=55206"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/55206\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=55206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=55206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=55206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}