Jag Àr en av dem som stÀller in Caps Lock för att byta layout eftersom jag Àr för lat för att trycka pÄ tvÄ tangenter nÀr jag kan trycka pÄ en. Jag skulle till och med vilja ha tvÄ onödiga nycklar: jag skulle anvÀnda en för att aktivera den engelska layouten och den andra för ryska. Men den andra onödiga nyckeln Àr att ta fram snabbmenyn, som Àr sÄ onödig att den klipps bort av mÄnga bÀrbara tillverkare. SÄ man fÄr nöja sig med det man har.
Och jag vill inte heller leta efter deras ikoner i aktivitetsfÀltet nÀr jag byter fönster, eller fÄnga namnen nÀr jag blÀddrar igenom Alt + Tab, blÀddra igenom skrivbord, etc. Jag vill trycka pÄ en tangentkombination (helst bara en, men det finns inga lediga onödiga nycklar lÀngre) och omedelbart komma till fönstret jag behöver. Till exempel sÄ hÀr:
- Alt+F: Firefox
- Alt+D: Firefox (privat surfning)
- Alt+T: Terminal
- Alt+M: Kalkylator
- Alt+E: IntelliJ-idé
- etc.
Dessutom genom att trycka pÄ till exempel pÄ Alt+M Jag vill se kalkylatorn oavsett om det hÀr programmet körs för nÀrvarande. Om det körs mÄste dess fönster ges fokus, och om inte, kör önskat program och överför fokus nÀr det laddas.
För fall som inte tĂ€cks av det tidigare skriptet vill jag ha universella tangentkombinationer som enkelt kan tilldelas till vilket som helst av de öppna fönstren. Till exempel har jag 10 kombinationer tilldelade frĂ„n Alt + 1 ĐŽĐŸ Alt + 0, som inte Ă€r knutna till nĂ„gra program. Jag kan bara klicka Alt + 1 och fönstret som för nĂ€rvarande Ă€r i fokus kommer att fĂ„ fokus nĂ€r det klickas Alt + 1.
Nedanför snittet finns beskrivningar av ett par fler funktioner och ett svar pÄ hur detta kan göras. Men jag mÄste varna dig direkt för att sÄdan anpassning kan vara mycket beroendeframkallande och till och med orsaka abstinensbesvÀr om du behöver anvÀnda den. Windows, Mac OS eller till och med nÄgon annans dator med Linux.
Faktum Àr att om du tÀnker efter sÄ anvÀnder vi inte sÄ mÄnga program dagligen. En webblÀsare, en terminal, en IDE, nÄgon slags budbÀrare, en filhanterare, en kalkylator och kanske det Àr nÀstan allt. Det behövs inte mÄnga tangentkombinationer för att tÀcka 95 % av vardagliga uppgifter.
För program som har flera fönster öppna kan ett av dem anges som det huvudsakliga. Till exempel har du flera IntelliJ Idea-fönster öppna och tilldelade till Alt + E. Under normala förhÄllanden, nÀr du trycker Alt + E nÄgot fönster i detta program kommer att öppnas, troligen det som öppnades först. Men om du klickar pÄ Alt + E nÀr ett av fönstren i det hÀr programmet redan Àr i fokus, kommer just detta fönster att tilldelas som huvudfönstret och det kommer att ges fokus nÀr efterföljande kombinationer trycks ned.
Huvudfönstret kan tilldelas om. För att göra detta mÄste du först ÄterstÀlla kombinationen och sedan tilldela ett annat fönster som huvudfönster. För att ÄterstÀlla en kombination mÄste du trycka pÄ sjÀlva kombinationen och sedan en speciell ÄterstÀllningskombination, jag har den tilldelad Alt + Backspace. Detta kommer att anropa ett skript som tar bort tilldelningen av huvudfönstret för den tidigare kombinationen. Och sedan kan du tilldela ett nytt huvudfönster enligt beskrivningen i föregÄende stycke. à terstÀllning av ett lÀnkat fönster till universella kombinationer sker pÄ samma sÀtt.
Inledningen blev lÄng, men jag ville först berÀtta vad vi ska göra och sedan förklara hur man gör.
För dig som Àr trött pÄ att lÀsa
Kort sagt, lÀnken till skripten finns i slutet av artikeln.
Men du kommer fortfarande inte att kunna installera och anvÀnda den direkt. Du mÄste först ta reda pÄ hur skriptet hittar det önskade fönstret. Utan detta kommer det inte att vara möjligt att berÀtta för manuset var exakt fokus behöver flyttas. Och du mÄste förstÄ vad du ska göra om ett lÀmpligt fönster plötsligt inte hittas.
Och jag kommer inte att fokusera pĂ„ hur man konfigurerar körningen av skript genom att trycka pĂ„ tangentkombinationer. Till exempel, i KDE Ă€r det i SysteminstĂ€llningar â GenvĂ€gar â Anpassade genvĂ€gar. Detta bör Ă€ven vara fallet i andra fönsterhanterare.
Vi presenterar wmctrl
Wmctrl â konsolverktyg för interaktion med X Window Manager. Detta Ă€r nyckelprogrammet för skriptet. LĂ„t oss ta en snabb titt pĂ„ hur du kan anvĂ€nda den.
LÄt oss först visa en lista över öppna fönster:
$ 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)
...alternativ -l visar en lista över alla öppna fönster, och -X lÀgger till klassnamnet till utdata (skype.Skype, Navigator.Firefox etc). HÀr behöver vi fönster-id (kolumn 1), klassnamn (kolumn 3) och fönsternamn (sista kolumn).
Du kan försöka aktivera nÄgot fönster med alternativet -a:
$ wmctrl -a skype.Skype -xOm allt gick enligt plan bör Skype-fönstret visas pÄ skÀrmen. Om istÀllet för alternativet -x anvÀnda alternativet -i, dÄ kan du istÀllet för klassnamnet ange fönster-id. Problemet med id Àr att fönster-id Àndras varje gÄng programmet startas och vi kan inte veta det i förvÀg. à andra sidan identifierar detta attribut unikt ett fönster, vilket kan vara viktigt nÀr ett program öppnar mer Àn ett fönster. Mer om detta lite lÀngre.
I detta skede mÄste vi komma ihÄg att vi kommer att söka efter det önskade fönstret med hjÀlp av regex genom utdata wmctrl -lx. Men det betyder inte att vi mÄste anvÀnda nÄgot komplicerat. Vanligtvis Àr klassnamnet eller fönsternamnet tillrÀckligt.
I grund och botten borde huvudtanken redan vara klar. I de globala instÀllningarna för snabbtangenter/genvÀgar för din fönsterhanterare, konfigurera den nödvÀndiga kombinationen för att köra skriptet.
Hur man anvÀnder skript
Först mÄste du installera konsolverktyg wmctrl О xdotool:
$ sudo apt-get install wmctrl xdotoolDÀrefter mÄste du ladda ner skripten och lÀgga till dem $ PATH. Jag brukar lÀgga in dem ~/bin:
$ cd ~/bin
$ git clone https://github.com/masyamandev/Showwin-script.git
$ ln -s ./Showwin-script/showwin showwin
$ ln -s ./Showwin-script/showwinDetach showwinDetachOm katalogen ~/bin inte fanns dÀr, dÄ mÄste du skapa den och starta om (eller logga in igen), annars ~/bin kommer inte att trÀffa $ PATH. Om allt Àr gjort pÄ rÀtt sÀtt bör skripten vara tillgÀngliga frÄn konsolen och flikkomplettering ska fungera.
Huvudmanus showwin tar 2 parametrar: den första Àr ett regex, genom vilket vi kommer att söka efter det önskade fönstret, och den andra parametern Àr ett kommando som mÄste köras om det önskade fönstret inte hittas.
Du kan prova att köra ett skript, till exempel:
$ showwin "Mozilla Firefox$" firefoxOm Firefox Ă€r installerat bör dess fönster ges fokus. Ăven om Firefox inte kördes borde den ha startat.
Om det fungerar kan du försöka konfigurera exekveringen av kommandon pÄ kombinationer. I de globala instÀllningarna för snabbtangenter/genvÀgar lÀgg till:
- Alt+F: showwin "Mozilla Firefox$" firefox
- Alt+D: showwin "Mozilla Firefox (privat surfning)$" "firefox -privat-fönster"
- 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. Alla kan konfigurera tangentkombinationer och programvara som de vill.
Om allt fungerade korrekt, kommer vi att med ovanstÄende kombinationer kunna vÀxla mellan fönster genom att helt enkelt trycka pÄ tangenterna.
Jag kommer att göra kromÀlskare besvikna: det kan inkognito sÀrskilja ett vanligt fönster genom sin produktion wmctrl Det kan du inte, de har samma klassnamn och fönstertitlar. I det föreslagna regexet behövs tecknen N* och I* endast sÄ att dessa reguljÀra uttryck skiljer sig frÄn varandra och de kan tilldelas som huvudfönster.
För att ÄterstÀlla huvudfönstret för den tidigare kombinationen (faktiskt för regex, som showwin ringde förra gÄngen) mÄste du ringa skriptet visawinKoppla av. Jag har det hÀr skriptet tilldelat en tangentkombination Alt + Backspace.
Vid manuset showwin det finns en funktion till. NÀr den anropas med en parameter (i detta fall Àr parametern bara en identifierare) kontrollerar den inte regexet alls, utan anser att alla fönster Àr lÀmpliga. I och för sig verkar detta vÀrdelöst, men pÄ sÄ sÀtt kan vi utse vilket fönster som helst som huvudfönster och snabbt byta till just det fönstret.
Jag har följande kombinationer konfigurerade:
- Alt+1: showwin "CustomKey1"
- Alt+2: showwin "CustomKey2"
- .
- Alt+0: showwin "CustomKey0"
- Alt+Backsteg: showwinDetach
PÄ sÄ sÀtt kan jag binda alla fönster till kombinationer Alt + 1.Alt + 0. Bara genom att klicka Alt + 1 Jag binder det aktuella fönstret till denna kombination. Jag kan avbryta bindningen genom att klicka Alt + 1och dÄ Alt + Backspace. Eller stÀng fönstret, det fungerar ocksÄ.
HÀrnÀst kommer jag att berÀtta nÄgra tekniska detaljer. Du behöver inte lÀsa dem, utan försök bara stÀlla in dem och se. Men jag skulle ÀndÄ rekommendera att du förstÄr andras skript innan du kör dem pÄ din dator :).
Hur man skiljer mellan olika fönster i samma applikation
I princip fungerade det allra första exemplet "wmctrl -a skype.Skype -x" och kan anvÀndas. Men lÄt oss titta igen pÄ exemplet med Firefox, dÀr tvÄ fönster Àr öppna:
0x04400003 0 Navigator.Firefox N/A Google ĐĐ”ŃĐ”ĐČĐŸĐŽŃĐžĐș - Mozilla Firefox
0x04400218 0 Navigator.Firefox N/A ĐŃŃŃОД ĐżŃблОĐșаŃОО за ŃŃŃĐșĐž / Đ„Đ°Đ±Ń - Mozilla Firefox (Private Browsing)Det första fönstret Ă€r normalt lĂ€ge och det andra Ă€r Privat surfning. Jag skulle vilja betrakta dessa fönster som olika applikationer och byta till dem med olika tangentkombinationer.
Det Àr nödvÀndigt att komplicera skriptet som byter fönster. Jag anvÀnde den hÀr lösningen: visa en lista över alla fönster, gör grep genom regex, ta första raden med huvud, hÀmta den första kolumnen (detta kommer att vara fönster-id) med klippa, vÀxla till fönster efter id.
Det borde finnas ett skÀmt om reguljÀra uttryck och tvÄ problem, men jag anvÀnder faktiskt inget komplicerat. Jag behöver reguljÀra uttryck sÄ att jag kan ange slutet av raden (symbolen "$") och skilja "Mozilla Firefox$" frÄn "Mozilla Firefox (Privat surfning)$".
Kommandot ser ut ungefÀr sÄ hÀr:
$ wmctrl -i -a `wmctrl -lx | grep -i "Mozilla Firefox$" | head -1 | cut -d" " -f1`HÀr kan du redan gissa om den andra funktionen i skriptet: om grep inte returnerar nÄgot, Àr den önskade applikationen inte öppen och du mÄste starta den genom att utföra kommandot frÄn den andra parametern. Och kontrollera sedan med jÀmna mellanrum om det önskade fönstret har öppnats för att överföra fokus till det. Jag kommer inte att fokusera pÄ detta; alla som behöver det kommer att titta pÄ kÀllorna.
NÀr programfönster inte gÄr att sÀrskilja
SÄ vi har lÀrt oss hur man överför fokus till fönstret för den önskade applikationen. Men vad hÀnder om ett program har mer Àn ett fönster öppet? Vilken ska jag fokusera pÄ? Skriptet ovan kommer med största sannolikhet att överföras till det första öppna fönstret. Men vi skulle vilja ha mer flexibilitet. Jag skulle vilja kunna komma ihÄg vilket fönster vi behöver och byta till just det fönstret.
Tanken var denna: Om vi ââvill komma ihĂ„g ett specifikt fönster för en tangentkombination, mĂ„ste vi trycka pĂ„ denna kombination nĂ€r det önskade fönstret Ă€r i fokus. I framtiden, nĂ€r du trycker pĂ„ den hĂ€r kombinationen, kommer fokus att ges till detta fönster. Tills fönstret stĂ€ngs eller vi gör en Ă„terstĂ€llning för denna skriptkombination visawinKoppla av.
Skriptalgoritm showwin nÄgot som det hÀr:
- Kontrollera om vi tidigare har kommit ihÄg id för fönstret som fokus ska överföras till.
Om du kommer ihÄg och ett sÄdant fönster fortfarande finns, sÄ överför vi fokus till det och avslutar. - Vi tittar pÄ vilket fönster som för nÀrvarande Àr i fokus, och om det matchar vÄr begÀran, kom ihÄg dess ID för att gÄ till det i framtiden och avsluta.
- Vi gÄr till Ätminstone nÄgot lÀmpligt fönster om det finns eller öppnar önskat program.
Du kan ta reda pÄ vilket fönster som för nÀrvarande Àr i fokus med hjÀlp av xdotool-konsolverktyget genom att konvertera dess utdata till hexadecimalt format:
$ printf "0x%08x" `xdotool getwindowfocus`Det enklaste sÀttet att komma ihÄg nÄgot i bash Àr att skapa filer i ett virtuellt filsystem som finns i minnet. Ubuntu Detta Àr som standard anslutet i /dev/shm/. Jag kan inte sÀga nÄgot om andra distributioner, jag hoppas att det finns nÄgot liknande ocksÄ. Du kan titta med kommandot:
$ mount -l | grep tmpfsSkriptet kommer att skapa tomma kataloger i den hÀr mappen, sÄ hÀr: /dev/shm/$USER/showwin/$SEARCH_REGEX/$WINDOW_ID. Varje gÄng den kallas kommer den dessutom att skapa en symbollÀnk /dev/shm/$USER/showwin/showwin_last pÄ /dev/shm/$USER/showwin/$SEARCH_REGEX. Detta kommer att behövas för att vid behov ta bort fönster-id för en viss kombination med hjÀlp av ett skript visawinKoppla av.
Vad kan förbÀttras
För det första mÄste skripten konfigureras manuellt. SÀkert, pÄ grund av behovet av att fördjupa sig i och göra mycket med hÀnderna, kommer mÄnga av er inte ens försöka konfigurera systemet. Om det var möjligt att helt enkelt installera paketet och konfigurera allt enklare, kanske det skulle vinna lite popularitet. Och titta sedan, applikationen skulle slÀppas i standarddistributioner.
Och kanske kan det göras lÀttare. Om du genom ID för ett fönster kan ta reda pÄ ID för processen som skapade det, och genom ID för processen kan du ta reda pÄ vilket kommando som skapade det, dÄ skulle det vara möjligt att automatisera installationen. Jag förstod faktiskt inte om det jag skrev i det hÀr stycket var möjligt. Faktum Àr att jag personligen Àr nöjd med hur det fungerar nu. Men om nÄgon annan Àn jag tycker att hela tillvÀgagÄngssÀttet Àr bekvÀmt och nÄgon förbÀttrar det, sÄ anvÀnder jag gÀrna en bÀttre lösning.
Ett annat problem, som jag redan skrivit, Àr att fönstren i vissa fall inte kan skiljas frÄn varandra. Hittills har jag bara observerat detta med inkognito i krom/krom, men kanske finns det nÄgot liknande nÄgon annanstans. Som en sista utvÀg finns det alltid möjlighet till universella kombinationer Alt + 1.Alt + 0. à terigen anvÀnder jag Firefox och för mig personligen Àr detta problem inte betydande.
Men det stora problemet för mig Àr att jag anvÀnder Mac OS för jobbet och jag kunde inte konfigurera nÄgot sÄdant dÀr. verktyg wmctrl Jag tror att jag kunde installera det, men det fungerar inte riktigt pÄ Mac OS. NÄgot kan göras med applikationen Automator, men den Àr sÄ lÄngsam att den inte Àr bekvÀm att anvÀnda Àven nÀr den fungerar. Jag kunde inte heller stÀlla in tangentkombinationer sÄ att de fungerade i alla program. Om nÄgon plötsligt kommer pÄ en lösning, anvÀnder jag den gÀrna.
I stÀllet för en slutsats
Det visade sig vara ett ovÀntat stort antal ord för en sÄ till synes enkel funktionalitet. Jag ville förmedla idén och inte överbelasta texten, men jag har Ànnu inte kommit pÄ hur jag ska berÀtta det enklare. Kanske skulle det vara bÀttre i videoformat, men folk gillar det inte pÄ det sÀttet hÀr.
Jag pratade lite om vad som finns under huven pÄ skriptet och hur man konfigurerar det. Jag gick inte in pÄ detaljer om sjÀlva manuset, men det Àr bara 50 rader, sÄ det Àr inte svÄrt att förstÄ.
Jag hoppas att nÄgon annan kommer att prova denna idé och kanske till och med uppskattar den. Jag kan sÀga om mig sjÀlv att manuset skrevs för ca 3 Är sedan och det Àr MYCKET bekvÀmt för mig. SÄ bekvÀmt att det orsakar allvarliga obehag nÀr man arbetar med andras datorer. Och med en fungerande MacBook.
KĂ€lla: will.com
