Je fais partie de ceux qui configurent Caps Lock pour changer de mise en page parce que je suis trop paresseux pour appuyer sur 2 touches alors que je peux en appuyer une. J'aimerais mĂȘme 2 touches inutiles : j'en utiliserais une pour activer la mise en page anglaise, et la seconde pour le russe. Mais la deuxiĂšme touche inutile consiste Ă appeler le menu contextuel, qui est tellement inutile qu'il est supprimĂ© par de nombreux fabricants d'ordinateurs portables. Il faut donc se contenter de ce que lâon a.
Et je ne veux pas non plus chercher leurs icĂŽnes dans la barre des tĂąches lorsque je change de fenĂȘtre, ni attraper leurs noms lors du dĂ©filement. Alt + Tab, faire dĂ©filer les bureaux, etc. Je souhaite appuyer sur une combinaison de touches (idĂ©alement une seule, mais il n'y a plus de touches inutiles gratuites) et accĂ©der immĂ©diatement Ă la fenĂȘtre dont j'ai besoin. Par exemple comme ceci :
- Alt+F : Firefox
- Alt+D : Firefox (navigation privée)
- Alt+T : Terminal
- Alt+M : Calculatrice
- Alt+E : idée IntelliJ
- etc.
De plus, en appuyant par exemple sur Alt + M Je veux voir la calculatrice, que ce programme soit actuellement en cours d'exĂ©cution ou non. S'il est en cours d'exĂ©cution, sa fenĂȘtre doit recevoir le focus, et sinon, exĂ©cutez le programme souhaitĂ© et transfĂ©rez le focus lors de son chargement.
Pour les cas qui ne sont pas couverts par le script prĂ©cĂ©dent, je souhaite disposer de combinaisons de touches universelles pouvant ĂȘtre facilement attribuĂ©es Ă n'importe quelle fenĂȘtre ouverte. Par exemple, j'ai 10 combinaisons attribuĂ©es par Alt + 1 Ă Alt + 0, qui ne sont liĂ©s Ă aucun programme. je peux juste cliquer Alt + 1 et la fenĂȘtre actuellement active obtiendra le focus lorsque vous cliquerez dessus Alt + 1.
Vous trouverez ci-dessous la description de quelques fonctionnalitĂ©s supplĂ©mentaires et la rĂ©ponse Ă la question : comment procĂ©der ? Attention cependant : ce type de personnalisation peut crĂ©er une forte dĂ©pendance et mĂȘme entraĂźner des symptĂŽmes de sevrage si vous y avez recours. Windows, Mac OS ou mĂȘme l'ordinateur de quelqu'un d'autre avec Linux.
En fait, si vous y rĂ©flĂ©chissez, nous nâutilisons pas beaucoup de programmes quotidiennement. Un navigateur, un terminal, un IDE, une sorte de messager, un gestionnaire de fichiers, une calculatrice et peut-ĂȘtre c'est presque tout. Il n'y a pas beaucoup de combinaisons de touches nĂ©cessaires pour couvrir 95 % des tĂąches quotidiennes.
Pour les programmes qui ont plusieurs fenĂȘtres ouvertes, l'une d'entre elles peut ĂȘtre dĂ©signĂ©e comme principale. Par exemple, plusieurs fenĂȘtres IntelliJ Idea sont ouvertes et affectĂ©es Ă Alt + E. Dans des conditions normales, lorsque vous appuyez sur Alt + E une fenĂȘtre de ce programme s'ouvrira, probablement celle qui a Ă©tĂ© ouverte en premier. Cependant, si vous cliquez sur Alt + E lorsque l'une des fenĂȘtres de ce programme est dĂ©jĂ active, alors cette fenĂȘtre particuliĂšre sera dĂ©signĂ©e comme la fenĂȘtre principale et ce sera celle qui recevra le focus lorsque les combinaisons suivantes seront enfoncĂ©es.
La fenĂȘtre principale peut ĂȘtre rĂ©affectĂ©e. Pour ce faire, vous devez d'abord rĂ©initialiser la combinaison, puis lui attribuer une autre fenĂȘtre comme fenĂȘtre principale. Pour rĂ©initialiser une combinaison, vous devez appuyer sur la combinaison elle-mĂȘme, puis sur une combinaison spĂ©ciale de rĂ©initialisation, je l'ai attribuĂ©e Ă Alt+Retour arriĂšre. Cela appellera un script qui annulera l'attribution de la fenĂȘtre principale pour la combinaison prĂ©cĂ©dente. Et puis vous pouvez attribuer une nouvelle fenĂȘtre principale comme dĂ©crit dans le paragraphe prĂ©cĂ©dent. La rĂ©initialisation d'une fenĂȘtre liĂ©e aux combinaisons universelles s'effectue de la mĂȘme maniĂšre.
L'introduction s'est avérée longue, mais je voulais d'abord expliquer ce que nous allons faire, puis expliquer comment le faire.
Pour ceux qui en ont marre de lire
Bref, le lien vers les scripts se trouve en fin d'article.
Mais vous ne pourrez toujours pas lâinstaller et lâutiliser immĂ©diatement. Vous devrez d'abord comprendre comment le script trouve la fenĂȘtre souhaitĂ©e. Sans cela, il ne sera pas possible d'indiquer au script oĂč exactement le focus doit ĂȘtre transfĂ©rĂ©. Et vous devez comprendre quoi faire si soudainement une fenĂȘtre appropriĂ©e n'est pas trouvĂ©e.
Et je ne me concentrerai pas sur la façon de configurer l'exĂ©cution des scripts en appuyant sur des combinaisons de touches. Par exemple, dans KDE, c'est dans ParamĂštres systĂšme â Raccourcis â Raccourcis personnalisĂ©s. Cela devrait Ă©galement ĂȘtre le cas dans d'autres gestionnaires de fenĂȘtres.
Présentation de wmctrl
WmctrlComment â utilitaire de console pour interagir avec X Window Manager. C'est le programme clĂ© du script. Jetons un coup d'Ćil rapide Ă la façon dont vous pouvez l'utiliser.
Tout d'abord, affichons une liste des fenĂȘtres ouvertes :
$ wmctrl -lx
0x01e0000e -1 plasmashell.plasmashell N/A Desktop â Plasma
0x01e0001e -1 plasmashell.plasmashell N/A Plasma
0x03a00001 0 skype.Skype N/A Skype
0x04400003 0 Navigator.Firefox N/A Google ĐĐ”ŃĐ”ĐČĐŸĐŽŃĐžĐș - Mozilla Firefox
0x04400218 0 Navigator.Firefox N/A ĐŃŃŃОД ĐżŃблОĐșаŃОО за ŃŃŃĐșĐž / Đ„Đ°Đ±Ń - Mozilla Firefox (Private Browsing)
...Option -l affiche une liste de toutes les fenĂȘtres ouvertes, et -X ajoute le nom de la classe Ă la sortie (skype.Skype, Navigateur.Firefox etc). Ici, nous avons besoin de l'identifiant de la fenĂȘtre (colonne 1), du nom de la classe (colonne 3) et du nom de la fenĂȘtre (derniĂšre colonne).
Vous pouvez essayer d'activer une fenĂȘtre en utilisant l'option -a:
$ wmctrl -a skype.Skype -xSi tout s'est dĂ©roulĂ© comme prĂ©vu, la fenĂȘtre Skype devrait apparaĂźtre Ă l'Ă©cran. Si au lieu de l'option -x utiliser l'option -i, alors au lieu du nom de la classe, vous pouvez spĂ©cifier l'identifiant de la fenĂȘtre. Le problĂšme avec l'identifiant est que l'identifiant de la fenĂȘtre change Ă chaque lancement de l'application et nous ne pouvons pas le savoir Ă l'avance. En revanche, cet attribut identifie de maniĂšre unique une fenĂȘtre, ce qui peut ĂȘtre important lorsqu'une application ouvre plusieurs fenĂȘtres. Nous en parlerons un peu plus loin.
Ă ce stade, nous devons nous rappeler que nous rechercherons la fenĂȘtre souhaitĂ©e en utilisant l'expression rĂ©guliĂšre par sortie wmctrl -lx. Mais cela ne veut pas dire que nous devons utiliser quelque chose de compliquĂ©. Habituellement, le nom de la classe ou le nom de la fenĂȘtre suffit.
Au fond, lâidĂ©e principale devrait dĂ©jĂ ĂȘtre claire. Dans les paramĂštres globaux de raccourcis clavier/raccourcis de votre gestionnaire de fenĂȘtres, configurez la combinaison requise pour exĂ©cuter le script.
Comment utiliser les scripts
Vous devez d'abord installer les utilitaires de la console wmctrl Đž xdotool:
$ sudo apt-get install wmctrl xdotoolEnsuite, vous devez télécharger les scripts et les ajouter à $ CHEMIN. Je les mets habituellement dedans ~/bac:
$ cd ~/bin
$ git clone https://github.com/masyamandev/Showwin-script.git
$ ln -s ./Showwin-script/showwin showwin
$ ln -s ./Showwin-script/showwinDetach showwinDetachSi le rĂ©pertoire ~/bac n'Ă©tait pas lĂ , alors vous devez le crĂ©er et redĂ©marrer (ou vous reconnecter), sinon ~/bac ne frappera pas $ CHEMIN. Si tout est fait correctement, alors les scripts devraient ĂȘtre accessibles depuis la console et la complĂ©tion par onglets devrait fonctionner.
Script principal showwin prend 2 paramĂštres : le premier est une regex, par laquelle nous rechercherons la fenĂȘtre requise, et le deuxiĂšme paramĂštre est une commande qui doit ĂȘtre exĂ©cutĂ©e si la fenĂȘtre requise n'est pas trouvĂ©e.
Vous pouvez essayer d'exécuter un script, par exemple :
$ showwin "Mozilla Firefox$" firefoxSi Firefox est installĂ©, sa fenĂȘtre doit avoir le focus. MĂȘme si Firefox ne fonctionnait pas, il aurait dĂ» dĂ©marrer.
Si cela fonctionne, vous pouvez essayer de configurer l'exécution des commandes sur les combinaisons. Dans les paramÚtres globaux des raccourcis clavier/raccourcis, ajoutez :
- Alt+F : showwin « Mozilla Firefox$ » Firefox
- Alt+D : showwin "Mozilla Firefox (navigation privée)$" "firefox -private-window"
- Alt+C : showwin "chromium-browser.Chromium-browser N*" navigateur-chrome
- Alt+X : showwin "chromium-browser.Chromium-browser I*" "chromium-browser -incognito"
- Alt+S : showwin « skype.Skype » skypeforlinux
- Alt+E : showwin « jetbrains-idea » idea.sh
Etc. Chacun peut configurer les combinaisons de touches et les logiciels comme bon lui semble.
Si tout s'est bien passĂ©, en utilisant les combinaisons ci-dessus, nous pourrons basculer entre les fenĂȘtres en appuyant simplement sur les touches.
Je vais dĂ©cevoir les amateurs de chrome : il peut distinguer incognito une fenĂȘtre ordinaire par sa sortie wmctrl Vous ne pouvez pas, ils ont les mĂȘmes noms de classe et titres de fenĂȘtres. Dans l'expression rĂ©guliĂšre proposĂ©e, les caractĂšres N* et I* sont nĂ©cessaires uniquement pour que ces expressions rĂ©guliĂšres diffĂšrent les unes des autres et qu'elles puissent ĂȘtre affectĂ©es comme fenĂȘtres principales.
Pour rĂ©initialiser la fenĂȘtre principale de la combinaison prĂ©cĂ©dente (en fait pour les regex, qui showwin appelĂ© la derniĂšre fois), vous devez appeler le script showwinDĂ©tacher. J'ai ce script attribuĂ© Ă une combinaison de touches Alt+Retour arriĂšre.
Au scĂ©nario showwin il y a une autre fonction. Lorsqu'il est appelĂ© avec un paramĂštre (dans ce cas, le paramĂštre est juste un identifiant), il ne vĂ©rifie pas du tout l'expression rĂ©guliĂšre, mais considĂšre que toutes les fenĂȘtres sont appropriĂ©es. En soi, cela semble inutile, mais de cette façon, nous pouvons dĂ©signer n'importe quelle fenĂȘtre comme fenĂȘtre principale et passer rapidement Ă cette fenĂȘtre particuliĂšre.
J'ai configuré les combinaisons suivantes :
- Alt+1 : showwin "CustomKey1"
- Alt+2 : showwin "CustomKey2"
- ...
- Alt+0 : showwin "CustomKey0"
- Alt+Retour arriĂšre : showwinDetach
De cette façon, je peux lier n'importe quelle fenĂȘtre Ă des combinaisons Alt + 1...Alt + 0. Juste en cliquant Alt + 1 Je lie la fenĂȘtre actuelle Ă cette combinaison. Je peux annuler la liaison en cliquant Alt + 1et ensuite Alt+Retour arriĂšre. Ou fermez la fenĂȘtre, ça marche aussi.
Ensuite, je vais vous donner quelques dĂ©tails techniques. Vous nâĂȘtes pas obligĂ© de les lire, mais essayez simplement de les configurer et de voir. Mais je recommanderais quand mĂȘme de comprendre les scripts des autres avant de les exĂ©cuter sur votre ordinateur :).
Comment distinguer les diffĂ©rentes fenĂȘtres d'une mĂȘme application
En principe, le tout premier exemple « wmctrl -a skype.Skype -x » fonctionnait et peut ĂȘtre utilisĂ©. Mais reprenons l'exemple avec Firefox, dans lequel 2 fenĂȘtres sont ouvertes :
0x04400003 0 Navigator.Firefox N/A Google ĐĐ”ŃĐ”ĐČĐŸĐŽŃĐžĐș - Mozilla Firefox
0x04400218 0 Navigator.Firefox N/A ĐŃŃŃОД ĐżŃблОĐșаŃОО за ŃŃŃĐșĐž / Đ„Đ°Đ±Ń - Mozilla Firefox (Private Browsing)La premiĂšre fenĂȘtre est en mode normal et la seconde est la navigation privĂ©e. Je voudrais considĂ©rer ces fenĂȘtres comme des applications diffĂ©rentes et y accĂ©der en utilisant diffĂ©rentes combinaisons de touches.
Il est nĂ©cessaire de compliquer le script qui change de fenĂȘtre. J'ai utilisĂ© cette solution : afficher une liste de toutes les fenĂȘtres, faites grep par regex, prenez la premiĂšre ligne avec front, rĂ©cupĂ©rez la premiĂšre colonne (ce sera l'identifiant de la fenĂȘtre) en utilisant cut, passez Ă la fenĂȘtre par identifiant.
Il devrait y avoir une blague sur les expressions réguliÚres et deux problÚmes, mais en fait je n'utilise rien de compliqué. J'ai besoin d'expressions réguliÚres pour pouvoir indiquer la fin de la ligne (le symbole « $ ») et distinguer « Mozilla Firefox$ » de « Mozilla Firefox (navigation privée)$ ».
La commande ressemble Ă ceci :
$ wmctrl -i -a `wmctrl -lx | grep -i "Mozilla Firefox$" | head -1 | cut -d" " -f1`Ici, vous pouvez dĂ©jĂ deviner la deuxiĂšme fonctionnalitĂ© du script : si grep ne renvoie rien, alors l'application souhaitĂ©e n'est pas ouverte et vous devez la dĂ©marrer en exĂ©cutant la commande Ă partir du deuxiĂšme paramĂštre. Et puis vĂ©rifiez pĂ©riodiquement si la fenĂȘtre requise s'est ouverte afin d'y transfĂ©rer le focus. Je ne mâattarderai pas lĂ -dessus ; quiconque en aura besoin consultera les sources.
Lorsque les fenĂȘtres d'application ne sont pas distinguables
Nous avons donc appris Ă transfĂ©rer le focus sur la fenĂȘtre de l'application souhaitĂ©e. Mais que se passe-t-il si une application a plusieurs fenĂȘtres ouvertes ? Sur lequel dois-je me concentrer ? Le script ci-dessus sera trĂšs probablement transfĂ©rĂ© vers la premiĂšre fenĂȘtre ouverte. Cependant, nous souhaiterions plus de flexibilitĂ©. J'aimerais pouvoir me souvenir de quelle fenĂȘtre nous avons besoin et passer Ă cette fenĂȘtre particuliĂšre.
L'idĂ©e Ă©tait la suivante : si nous voulons mĂ©moriser une fenĂȘtre spĂ©cifique pour une combinaison de touches, nous devons alors appuyer sur cette combinaison lorsque la fenĂȘtre souhaitĂ©e est sĂ©lectionnĂ©e. Ă l'avenir, lorsque vous appuierez sur cette combinaison, le focus sera donnĂ© Ă cette fenĂȘtre. Jusqu'Ă ce que la fenĂȘtre se ferme ou que nous effectuions une rĂ©initialisation pour cette combinaison de scripts showwinDĂ©tacher.
Algorithme de script showwin quelque chose comme ça:
- VĂ©rifiez si nous avons dĂ©jĂ mĂ©morisĂ© l'identifiant de la fenĂȘtre vers laquelle le focus doit ĂȘtre transfĂ©rĂ©.
Si vous vous en souvenez et qu'une telle fenĂȘtre existe toujours, nous y transfĂ©rons le focus et quittons. - Nous regardons quelle fenĂȘtre est actuellement active, et si elle correspond Ă notre demande, mĂ©morisons son identifiant pour y accĂ©der Ă l'avenir et quitter.
- Nous allons au moins dans une fenĂȘtre appropriĂ©e si elle existe ou ouvrons l'application souhaitĂ©e.
Vous pouvez savoir quelle fenĂȘtre est actuellement active Ă l'aide de l'utilitaire de console xdotool en convertissant sa sortie au format hexadĂ©cimal :
$ printf "0x%08x" `xdotool getwindowfocus`La méthode la plus simple pour mémoriser quelque chose en Bash consiste à créer des fichiers dans un systÚme de fichiers virtuel situé en mémoire. Ubuntu Ceci est connecté par défaut dans /dev/shm/. Je ne peux rien dire sur les autres distributions, j'espÚre qu'il y a aussi quelque chose de similaire. Vous pouvez regarder avec la commande :
$ mount -l | grep tmpfsLe script crĂ©era des rĂ©pertoires vides dans ce dossier, comme ceci : /dev/shm/$USER/showwin/$SEARCH_REGEX/$WINDOW_ID. De plus, chaque fois qu'il est appelĂ©, il crĂ©era un lien symbolique /dev/shm/$USER/showwin/showwin_last sur /dev/shm/$USER/showwin/$SEARCH_REGEX. Cela sera nĂ©cessaire pour, si nĂ©cessaire, supprimer l'identifiant de la fenĂȘtre pour une certaine combinaison Ă l'aide d'un script showwinDĂ©tacher.
Ce qui peut ĂȘtre amĂ©liorĂ©
Tout d'abord, les scripts doivent ĂȘtre configurĂ©s manuellement. SĂ»rement, en raison de la nĂ©cessitĂ© d'approfondir et de faire beaucoup de choses avec vos mains, beaucoup d'entre vous n'essaieront mĂȘme pas de configurer le systĂšme. S'il Ă©tait possible d'installer simplement le package et de tout configurer plus facilement, il gagnerait peut-ĂȘtre en popularitĂ©. Et puis regardez, lâapplication serait publiĂ©e dans des distributions standard.
Et peut-ĂȘtre que cela peut ĂȘtre fait plus facilement. Si par l'identifiant d'une fenĂȘtre vous pouvez trouver l'identifiant du processus qui l'a créé, et par l'identifiant du processus vous pouvez dĂ©couvrir quelle commande l'a créé, alors il serait possible d'automatiser la configuration. En fait, je nâai pas compris si ce que jâĂ©crivais dans ce paragraphe Ă©tait possible. Le fait est que je suis personnellement satisfait de la maniĂšre dont cela fonctionne actuellement. Mais si quelqu'un d'autre que moi trouve l'approche globale pratique et que quelqu'un l'amĂ©liore, alors je serai heureux d'utiliser une meilleure solution.
Un autre problĂšme, comme je l'ai dĂ©jĂ Ă©crit, est que dans certains cas, les fenĂȘtres ne peuvent pas ĂȘtre distinguĂ©es les unes des autres. Jusqu'Ă prĂ©sent, je n'ai observĂ© cela qu'avec incognito dans chrome/chromium, mais il y a peut-ĂȘtre quelque chose de similaire ailleurs. En dernier recours, il existe toujours la possibilitĂ© de combinaisons universelles. Alt + 1...Alt + 0. Encore une fois, j'utilise Firefox et pour moi personnellement, ce problĂšme n'est pas grave.
Mais le problĂšme le plus important pour moi est que jâutilise Mac OS pour mon travail et que je ne peux rien configurer de tel lĂ -bas. utilitaire wmctrl Je pense avoir pu l'installer, mais cela ne fonctionne pas vraiment sous Mac OS. Quelque chose peut ĂȘtre fait avec l'application Automator, mais il est si lent qu'il n'est pas pratique Ă utiliser mĂȘme lorsqu'il fonctionne. Je ne pouvais pas non plus configurer les combinaisons de touches pour qu'elles fonctionnent dans tous les programmes. Si quelquâun trouve soudainement une solution, je serai heureux de lâutiliser.
Au lieu d'une conclusion
Il sâest avĂ©rĂ© quâil sâagissait dâun nombre Ă©tonnamment Ă©levĂ© de mots pour une fonctionnalitĂ© aussi simple en apparence. Je voulais transmettre lâidĂ©e et ne pas surcharger le texte, mais je nâai pas encore trouvĂ© comment la raconter plus simplement. Ce serait peut-ĂȘtre mieux au format vidĂ©o, mais les gens nâaiment pas ça ici.
J'ai parlĂ© un peu de ce qu'il y a sous le capot du script et de la façon de le configurer. Je ne suis pas entrĂ© dans les dĂ©tails du script lui-mĂȘme, mais il ne fait que 50 lignes, donc ce nâest pas difficile Ă comprendre.
J'espĂšre que quelqu'un d'autre essaiera cette idĂ©e et peut-ĂȘtre mĂȘme l'apprĂ©ciera. Je peux dire de moi que le scĂ©nario a Ă©tĂ© Ă©crit il y a environ 3 ans et qu'il me convient TRĂS. Si pratique qu'il provoque un sĂ©rieux inconfort lorsque l'on travaille avec les ordinateurs d'autres personnes. Et avec un MacBook fonctionnel.
Source: habr.com
