Alternativ Fënsterverwaltung am Linux

Ech sinn ee vun deenen, déi Caps Lock setzen fir Layout ze wiesselen, well ech ze faul sinn fir 2 Schlësselen ze drécken wann ech een drécke kann. Ech wéilt souguer 2 onnéideg Schlësselen: Ech géif een benotzen fir den englesche Layout z'aktivéieren, an déi zweet fir Russesch. Awer déi zweet onnéideg Schlëssel ass de Kontextmenü opzeruffen, wat sou onnéideg ass datt et vu ville Laptophersteller ausgeschnidden ass. Also musst Dir zefridde sinn mat deem wat Dir hutt.

An ech wëll och net fir hir Ikonen op der Taskbar kucken wann Dir Fënstere wiesselt, oder d'Nimm opfänken wann Dir duerch scrollt Alt + Tab, Scroll duerch Desktops, etc.. Ech wëll eng Tastekombinatioun drécken (am Idealfall just eng, awer et gi keng gratis onnéideg Schlësselen méi) an direkt op d'Fënster kommen, déi ech brauch. Zum Beispill esou:

  • Alt+F: Firefox
  • Alt+D: Firefox (Privat Surfen)
  • Alt+T: Terminal
  • Alt+M: Rechner
  • Alt+E: IntelliJ Idea
  • etc.

Ausserdeem, andeems Dir zum Beispill op dréckt Alt+M Ech wëll de Rechner gesinn, egal ob dëse Programm am Moment leeft. Wann et leeft, da muss seng Fënster fokusséiert ginn, a wann net, lafen de gewënschte Programm an transferéiert de Fokus wann et lued.

Fir Fäll, déi net vum fréiere Skript ofgedeckt sinn, wëll ech universell Tastekombinatiounen hunn, déi einfach un eng vun den oppene Fënstere zougewisen kënne ginn. Zum Beispill, ech hunn 10 Kombinatioune zougewisen aus Alt + 1 ze Alt + 0, déi net un all Programmer gebonne sinn. Ech kann einfach klickt Alt + 1 an d'Fënster déi am Moment am Fokus ass, kritt de Fokus wann Dir klickt Alt + 1.

Ënnert dem Schnëtt gëtt et eng Beschreiwung vun e puer méi Features an eng Äntwert op wéi dëst ka gemaach ginn. Awer ech wäert Iech direkt warnen datt esou Personnalisatioun "fir Iech selwer" schwéier Sucht a souguer Réckzuch verursaache kann, wann Dir Windows, Mac OS oder souguer en aneren Computer mat Linux benotze musst.

Tatsächlech, wann Dir driwwer denkt, benotze mir net sou vill Programmer all Dag. E Browser, en Terminal, eng IDE, eng Zort Messenger, e Dateiemanager, e Rechner a vläicht dat ass bal alles. Et ginn net vill Tastekombinatiounen néideg fir 95% vun alldeeglechen Aufgaben ze decken.

Fir Programmer déi e puer Fënsteren opmaachen, kann ee vun hinnen als Haapt bezeechent ginn. Zum Beispill, hutt Dir e puer IntelliJ Idea Fënsteren oppen an zougewisen Alt + E. Ënner normale Konditiounen, wann Dir Press Alt + E eng Fënster vun dësem Programm wäert opmaachen, héchstwahrscheinlech déi, déi als éischt opgemaach gouf. Allerdéngs, wann Dir op klickt Alt + E wann ee vun de Fënstere vun dësem Programm scho am Fokus ass, da gëtt dës speziell Fënster als Haaptfenster zougewisen an et wäert dee fokusséieren wann déi spéider Kombinatioune gedréckt ginn.

D'Haaptrei Fënster kann reassigned ginn. Fir dëst ze maachen, musst Dir als éischt d'Kombinatioun zrécksetzen, an dann eng aner Fënster als Haaptfenster zouginn. Fir eng Kombinatioun zréckzesetzen, musst Dir d'Kombinatioun selwer drécken, an dann eng speziell Resetkombinatioun, ech hunn et zougewisen Alt + Backspace. Dëst wäert e Skript nennen deen d'Haaptfenster fir déi viregt Kombinatioun unzedeelen. An da kënnt Dir eng nei Haaptrei Fënster zougewisen wéi am virdrun Paragraph beschriwwen. Eng verlinkt Fënster op universell Kombinatiounen zrécksetzen geschitt op déiselwecht Manéier.

D'Aféierung huet sech laang erausgestallt, awer ech wollt fir d'éischt soen wat mir wäerte maachen, an dann erkläre wéi et ze maachen.

Fir déi, déi midd sinn ze liesen

Kuerz gesot, de Link op d'Skripte ass um Enn vum Artikel.

Awer Dir kënnt nach ëmmer net direkt installéieren a benotzen. Dir musst als éischt erausfannen wéi de Skript déi gewënscht Fënster fënnt. Ouni dëst ass et net méiglech dem Skript ze soen wou genau de Fokus muss transferéiert ginn. An Dir musst verstoen wat ze maachen wann op eemol eng passend Fënster net fonnt gëtt.

An ech konzentréieren mech net op wéi d'Ausféierung vu Skripte konfiguréiert gëtt andeems Dir Tastekombinatiounen dréckt. Zum Beispill, an KDE ass et an System Astellungen → Ofkiirzungen → Benotzerdefinéiert Ofkiirzungen. Dëst sollt och an anere Fënstermanager de Fall sinn.

Aféierung wmctrl

Wmctrl - Konsol Utility fir mat X Window Manager ze interagéieren. Dëst ass de Schlësselprogramm fir de Skript. Loosst eis séier kucken wéi Dir et benotze kënnt.

Als éischt, loosst eis eng Lëscht vun oppene Fënstere weisen:

$ 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)
...

Optioun -l weist eng Lëscht vun all oppene Fënsteren, an -NS fügt de Klassennumm un den Ausgang (Skype.Skype, Navigator.Firefox etc). Hei brauche mir d'Fënster ID (Kolonn 1), Klass Numm (Kolonn 3) a Fënster Numm (lescht Kolonn).

Dir kënnt probéieren eng Fënster mat der Optioun ze aktivéieren -a:

$ wmctrl -a skype.Skype -x

Wann alles no Plang gaang ass, sollt d'Skype-Fenster um Bildschierm erscheinen. Wann amplaz vun der Optioun -x benotzen Optioun -i, da kënnt Dir amplaz vum Klassennumm d'Fënster-ID uginn. De Problem mat ID ass datt d'Fënster ID ännert all Kéier wann d'Applikatioun lancéiert gëtt a mir kënnen et net am Viraus wëssen. Op der anerer Säit identifizéiert dësen Attribut eenzegaarteg eng Fënster, wat wichteg ka sinn wann eng Applikatioun méi wéi eng Fënster opmaacht. Méi iwwer dëst e bësse méi wäit.

Op dëser Etapp musse mir drun erënneren datt mir no der gewënschter Fënster sichen mat Regex duerch Ausgang wmctrl -lx. Awer dat heescht net datt mir eppes komplizéiert musse benotzen. Normalerweis ass de Klass Numm oder Fënster Numm genuch.

Am Fong soll d'Haaptidee scho kloer sinn. An de globale Hotkeys / Ofkiirzungen Astellunge fir Äre Fënstermanager, konfiguréieren déi néideg Kombinatioun fir de Skript auszeféieren.

Wéi Scripten ze benotzen

Als éischt musst Dir Konsol Utilities installéieren wmctrl и xdotool:

$ sudo apt-get install wmctrl xdotool

Als nächst musst Dir d'Skripte eroflueden an se derbäi addéieren $ PATH. Ech setzen se normalerweis an ~/eng:

$ cd ~/bin
$ git clone https://github.com/masyamandev/Showwin-script.git
$ ln -s ./Showwin-script/showwin showwin
$ ln -s ./Showwin-script/showwinDetach showwinDetach

Wann de Verzeechnes ~/eng war net do, da musst Dir et erstellen an nei starten (oder nei aloggen), soss ~/eng wäert net schloen $ PATH. Wann alles richteg gemaach gëtt, da sollten d'Skripte vun der Konsole zougänglech sinn an d'Tab fäerdeg soll funktionnéieren.

Main Schrëft showwin hëlt 2 Parameteren: deen éischten ass e Regex, duerch dee mir no der erfuerderter Fënster sichen, an den zweeten Parameter ass e Kommando dee muss ausgefouert ginn wann déi erfuerderlech Fënster net fonnt gëtt.

Dir kënnt probéieren e Skript auszeféieren, zum Beispill:

$ showwin "Mozilla Firefox$" firefox

Wann Firefox installéiert ass, soll seng Fënster fokusséiert ginn. Och wann de Firefox net leeft, sollt et ugefaang hunn.

Wann et funktionnéiert, da kënnt Dir probéieren d'Ausféierung vun Kommandoen op Kombinatiounen ze konfiguréieren. An de globale Hotkeys / Ofkiirzungen Astellunge addéieren:

  • Alt+F: showwin "Mozilla Firefox$" firefox
  • Alt+D: showwin "Mozilla Firefox (Privat Surfen)$" "firefox -private-window"
  • Alt+C: showwin "chromium-browser.Chromium-browser N*" chromium-browser
  • 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.. Jiddereen kann Tastekombinatiounen a Software konfiguréieren wéi se passend gesinn.
Wann alles richteg geklappt huet, da benotze mir déi uewe genannte Kombinatioune kënne mir tëscht Fënsteren wiesselen andeems Dir einfach Schlësselen dréckt.

Ech wäert Chromliebhaber enttäuschen: et kann inkognito eng regulär Fënster duerch seng Ausgang ënnerscheeden wmctrl Dir kënnt net, si hunn déi selwecht Klass Nimm an Fënster Titelen. Am proposéierte Regex sinn d'Charaktere N * an I * nëmme gebraucht fir datt dës regulär Ausdréck vuneneen ënnerscheeden a si kënnen als Haaptfenster zougewisen ginn.

Fir d'Haaptfenster vun der viregter Kombinatioun zréckzesetzen (tatsächlech fir Regex, déi showwin d'lescht Kéier genannt) musst Dir de Skript ruffen showwinDetach. Ech hunn dëst Skript zu enger Tastekombinatioun zougewisen Alt + Backspace.

Am Skript showwin et gëtt nach eng Funktioun. Wann et mat engem Parameter genannt gëtt (an dësem Fall ass de Parameter just en Identifizéierer), kontrolléiert et guer net de Regex, awer betruecht all Fënsteren als gëeegent. U sech schéngt dat nëtzlos, awer op dës Manéier kënne mir all Fënster als Haaptfënster designéieren a séier op déi speziell Fënster wiesselen.

Ech hunn déi folgend Kombinatioune konfiguréiert:

  • Alt+1: showwin "CustomKey1"
  • Alt+2: showwin "CustomKey2"
  • ...
  • Alt+0: showwin "CustomKey0"
  • Alt+Backspace: showwinDetach

Sou kann ech all Fënsteren u Kombinatioune binden Alt + 1...Alt + 0. Einfach duerch Klick Alt + 1 Ech bindelen déi aktuell Fënster un dës Kombinatioun. Ech kann d'Verbindung annuléieren andeems Dir klickt Alt + 1, an dann Alt + Backspace. Oder d'Fënster zoumaachen, dat funktionnéiert och.

Als nächst wäert ech Iech e puer technesch Detailer soen. Dir musst se net liesen, awer probéiert se just opzestellen a kucken. Awer ech géif nach ëmmer recommandéieren aner Leit hir Scripten ze verstoen ier se op Ärem Computer lafen :).

Wéi z'ënnerscheeden tëscht verschiddene Fënstere vun der selwechter Applikatioun

Am Prinzip war dat éischt Beispill "wmctrl -a skype.Skype -x" funktionnéiert a ka benotzt ginn. Awer loosst eis nach eng Kéier d'Beispill mam Firefox kucken, an deem 2 Fënsteren op sinn:

0x04400003  0 Navigator.Firefox                   N/A Google Переводчик - Mozilla Firefox
0x04400218  0 Navigator.Firefox                   N/A Лучшие публикации за сутки / Хабр - Mozilla Firefox (Private Browsing)

Déi éischt Fënster ass normal Modus, an déi zweet ass Private Browsing. Ech wéilt dës Fënsteren als verschidden Uwendungen betruechten an op se mat verschiddene Tastekombinatiounen wiesselen.

Et ass néideg de Skript ze komplizéieren deen Windows wiesselt. Ech hunn dës Léisung benotzt: eng Lëscht vun alle Fënstere weisen, maachen grep vun regex, huelen déi éischt Linn mat Kapp, kritt déi éischt Kolonn (dëst wäert d'Fënster-ID sinn) benotzt Géigewier, Wiesselt op Fënster duerch ID.

Et soll e Witz iwwer regulär Ausdrock ginn an zwee Problemer, mee eigentlech benotzen ech näischt komplizéiert. Ech brauch reegelméisseg Ausdréck fir datt ech d'Enn vun der Linn (d'Symbol "$") uginn an "Mozilla Firefox$" vun "Mozilla Firefox (Privat Surfen)$" z'ënnerscheeden.

De Kommando gesäit sou eppes aus:

$ wmctrl -i -a `wmctrl -lx | grep -i "Mozilla Firefox$" | head -1 | cut -d" " -f1`

Hei kënnt Dir schonn iwwer déi zweet Feature vum Skript roden: wann grep näischt zréckkënnt, ass déi gewënschte Applikatioun net op an Dir musst et starten andeems Dir de Kommando aus dem zweete Parameter ausféiert. An da kontrolléiert periodesch ob déi erfuerderlech Fënster opgemaach ass fir de Fokus dorop ze transferéieren. Ech konzentréieren mech net op dëst; Jiddereen deen et brauch wäert d'Quelle kucken.

Wann Applikatiounsfenster net z'ënnerscheeden

Also hu mir geléiert wéi Dir de Fokus op d'Fënster vun der gewënschter Applikatioun transferéiert. Awer wat wann eng Applikatioun méi wéi eng Fënster op huet? Wéi eng soll ech fokusséieren? De Skript uewendriwwer wäert héchstwahrscheinlech op déi éischt oppe Fënster transferéieren. Mir wëllen awer méi Flexibilitéit. Ech wéilt gären erënnere wéi eng Fënster mir brauchen an op déi speziell Fënster wiesselen.

D'Iddi war dëst: Wa mir eng spezifesch Fënster fir eng Tastekombinatioun erënnere wëllen, da musse mir dës Kombinatioun drécken wann déi gewënscht Fënster am Fokus ass. An Zukunft, wann Dir dës Kombinatioun dréckt, gëtt de Fokus op dës Fënster gegeben. Bis d'Fënster zou ass oder mir e Reset fir dës Skriptkombinatioun maachen showwinDetach.

Skript Algorithmus showwin eppes wéi dat:

  • Kuckt ob mir virdru un d'Id vun der Fënster erënnert hunn, op déi de Fokus soll transferéiert ginn.
    Wann Dir Iech drun erënnert an esou eng Fënster nach ëmmer existéiert, da transferéiere mir de Fokus op et a gitt eraus.
  • Mir kucken op wéi eng Fënster am Moment am Fokus ass, a wann et eis Ufro entsprécht, erënnert dann un seng ID fir an Zukunft dohinner ze goen an ze verloossen.
  • Mir ginn op d'mannst eng gëeegent Fënster wann et existéiert oder déi gewënschte Applikatioun opmaachen.

Dir kënnt erausfannen wéi eng Fënster am Moment am Fokus ass mat der xdotool Konsol Utility andeems Dir säin Output an hexadezimal Format konvertéiert:

$ printf "0x%08x" `xdotool getwindowfocus`

Deen einfachste Wee fir eppes am Bash ze erënneren ass Dateien an engem virtuelle Dateiesystem an der Erënnerung ze kreéieren. An Ubuntu ass dëst als Standard aktivéiert an /dev/shm/. Ech kann näischt iwwer aner Distributiounen soen, ech hoffen, datt et och eppes ähnlech ass. Dir kënnt mam Kommando kucken:

$ mount -l | grep tmpfs

De Skript erstellt eidel Verzeichnisser an dësem Dossier, sou: /dev/shm/$USER/showwin/$SEARCH_REGEX/$WINDOW_ID. Zousätzlech, all Kéier wann et genannt gëtt, erstellt et e Symlink /dev/shm/$USER/showwin/showwin_last op /dev/shm/$USER/showwin/$SEARCH_REGEX. Dëst wäert gebraucht ginn fir, wann néideg, d'Fënster-ID fir eng bestëmmte Kombinatioun mat engem Skript ze läschen showwinDetach.

Wat ka verbessert ginn

Als éischt mussen d'Skripte manuell konfiguréiert ginn. Sécherlech, wéinst der Bedierfnes fir ze verdéiwen a vill mat Ären Hänn ze maachen, wäerte vill vun Iech net emol probéieren de System ze konfiguréieren. Wann et méiglech wier de Package einfach z'installéieren an alles méi einfach ze konfiguréieren, da géif et vläicht e bësse Popularitéit gewannen. An da kuckt, d'Applikatioun géif a Standardverdeelunge verëffentlecht ginn.

A vläicht kann et méi einfach gemaach ginn. Wann Dir duerch d'Id vun enger Fënster d'Id vum Prozess erausfannen, deen et erstallt huet, an duerch d'Id vum Prozess kënnt Dir erausfannen, wéi ee Kommando et erstallt huet, da wier et méiglech de Setup ze automatiséieren. Tatsächlech hunn ech net verstanen ob dat wat ech an dësem Paragraf geschriwwen hunn méiglech war. D'Tatsaach ass datt ech perséinlech zefridde sinn mat der Aart a Weis wéi et elo funktionnéiert. Awer wann een anere wéi ech déi ganz Approche bequem fënnt an een et verbessert, da wäert ech frou eng besser Léisung ze benotzen.

En anere Problem, wéi ech scho geschriwwen hunn, ass datt an e puer Fäll d'Fënster net vuneneen z'ënnerscheeden. Bis elo hunn ech dat just mat Inkognito am Chrom / Chrom observéiert, awer vläicht gëtt et iergendwou ähnlech. Als leschten Auswee gëtt et ëmmer d'Optioun vun universelle Kombinatiounen Alt + 1...Alt + 0. Erëm, ech benotzen Firefox a fir mech perséinlech ass dëse Problem net bedeitend.

Awer de bedeitende Problem fir mech ass datt ech Mac OS fir Aarbecht benotzen an ech konnt näischt esou do konfiguréieren. Utility wmctrl Ech mengen ech konnt et installéieren, awer et funktionnéiert net wierklech op Mac OS. Eppes kann mat der Applikatioun gemaach ginn Automator, awer et ass sou lues datt et net bequem ass ze benotzen och wann et funktionnéiert. Ech konnt och keng Tastekombinatiounen opsetzen, sou datt se an all Programmer funktionnéieren. Wann een op eemol mat enger Léisung kënnt, wäert ech frou se ze benotzen.

Amplaz vun enger Konklusioun

Et huet sech als onerwaart grouss Zuel vu Wierder fir sou eng scheinbar einfach Funktionalitéit erausgestallt. Ech wollt d'Iddi vermëttelen an den Text net iwwerlaascht, awer ech hunn nach net erausfonnt wéi ech et méi einfach soen. Vläicht wier et besser am Videoformat, awer d'Leit hunn et net esou gär hei.

Ech hunn e bësse geschwat iwwer wat ënner der Hood vum Skript ass a wéi et konfiguréiert gëtt. Ech sinn net an Detailer vum Skript selwer gaang, awer et ass nëmmen 50 Zeilen, also ass et net schwéier ze verstoen.

Ech hoffen, datt een aneren dës Iddi probéieren a vläicht souguer appreciéieren. Ech kann iwwer mech soen datt de Skript virun ongeféier 3 Joer geschriwwe gouf an et ass ganz bequem fir mech. Sou bequem datt et sérieux Unerkennung verursaacht wann Dir mat anere Leit hir Computeren schafft. A mat engem schaffende MacBook.

Link op Scripten

Source: will.com

Setzt e Commentaire