Ma olen neist, kes seadistavad Caps Lock'i keelevahetuseks, sest ei viitsi vajutada kahte klahvi, kui saab vajutada ĂŒht. Tahaksin isegi kahte tarbetut klahvi: ĂŒhte ingliskeelse keelevahetuseks ja teist venekeelse jaoks. Kuid see teine tarbetu klahv, mis avab kontekstimenĂŒĂŒ, on nii tarbetu, et selle on paljud sĂŒlearvutite tootjad vĂ€lja lĂ”iganud. Nii et tuleb leppida sellega, mis on.
Ja ma ei soovi, et aknaid vahetades peaksin otsima nende ikoone ĂŒles ĂŒlesannepaneelilt, lugema pealkirju, kui lehitseme lĂ€bi Alt+Tab, vahetama töölauad jne. Ma tahan vajutada klahvikombinatsiooni (ideaalis isegi ĂŒhte, aga vabade tarbetute klahvidega ei ole enam) ja kohe sattuda vajalikku aknasse. NĂ€iteks nii:
- Alt+F: Firefox
- Alt+D: Firefox (privaatne sirvimine)
- Alt+T: Terminal
- Alt+M: Kalkulaator
- Alt+E: IntelliJ Idea
- jne.
Ja kui ma vajutan nĂ€iteks Alt+M , tahan nĂ€ha kalkulaatorit sĂ”ltumata sellest, kas see programm on hetkel avatud. Kui see on avatud, siis peab fookus liikuma sellele aknale, ja kui ei ole â kĂ€ivitama vajaliku programmi ja edastama fookuse, kui see on laaditud.
Juhtudel, mida eelmine stsenaarium ei kata, soovin, et mul oleks universaalsed klahvikombinatsioonid, millele saab hĂ”lpsasti mÀÀrata kĂ”ik avatud aknad. NĂ€iteks on mul mÀÀratud 10 kombinatsiooni alates Alt+1 kuni Alt+0, mis ei ole seotud ĂŒkski programmiga. Ma vĂ”in lihtsalt vajutada Alt+1 ja aken, mis on praegu fookuses, saab fookuse, kui vajutada Alt+1.
Allpool on kirjeldus veel mĂ”nest funktsioonist ja vastus sellele, kuidas seda teha. Kuid hoiatuseks ĂŒtlen, et selline isikupĂ€rastamine vĂ”ib tekitada tugevat sĂ”ltuvust ja isegi vÔÔrutusnĂ€hte, kui peate kasutama Windowsi, Mac OS-i vĂ”i isegi kellegi teise arvutit Linuxiga.
Tegelikult, kui mĂ”elda, ei kasuta me igapĂ€evaselt nii palju programme. Brauser, terminal, IDE, mĂ”ni sĂ”numside rakendus, failihaldur, kalkulaator ja tĂ”enĂ€oliselt see on peaaegu kĂ”ik. Pole nii palju klahvikombinatsioone, et katta 95% igapĂ€evastest ĂŒlesannetest.
Programmide puhul, millel on avatud mitu akent, saab ĂŒhe neist mÀÀrata peamiseks. NĂ€iteks on avatud mitu IntelliJ Idea akent, mis on mÀÀratud Alt+E. Tavalistes oludes, kui vajutada Alt+E avatakse mĂ”ni selle programmi aken, tĂ”enĂ€oliselt see, mis avati esimesena. Kuid, kui klĂ”psata Alt+E kui ĂŒks selle programmi akendest on juba fookuses, siis saab sellest aknast peamine ja just sellele aknale antakse fookus jĂ€rgnevate klahvikombinatsioonide korral.
Peamist akent saab ĂŒmber mÀÀrata. Selleks tuleb kombinatsioon esmalt nullida ja seejĂ€rel mÀÀrata see peamiseks mĂ”nele muule aknale. Kombinatsiooni nullimiseks tuleb vajutada ise kombinatsiooni ja seejĂ€rel spetsiaalset nullimiskombinatsiooni, mis on mul mÀÀratud Alt+Backspace. See kutsub esile skripti, mis tĂŒhistab eelneva kombinatsiooni peamise akna mÀÀramise. SeejĂ€rel saab mÀÀrata uue pĂ”hjakna nagu eelnevas lĂ”igus kirjeldatud. Seonduva akna nullimine universaalsete kombinatsioonide jaoks toimub sarnaselt.
Sissejuhatus sai pikk, kuid tahtsin alguses rÀÀkida, mida me teeme, ja seejÀrel selgitada, kuidas seda teha.
Neile, kellele lugemine on juba tĂŒĂŒtuks lĂ€inud
LĂŒhidalt, skriptide link on artikli lĂ”pus.
Kuid siiski ei Ônnestu seda kohe paigaldada ja kasutada. Enne tuleb aru saada, kuidas skript leiab vajalikud aknad. Ilma selleta ei saa skripti suunata, kuhu tÀpselt keskendumine toimetada. Samuti tuleb mÔista, mida teha, kui sobivat akent ei leitakse.
Ja ma ei kavatseda rĂ”hutada, kuidas seadistada skriptide kĂ€ivitamist klahvikombinatsioonide abil. NĂ€iteks KDE-s on see System Settings â Shortcuts â Custom Shortcuts. Teistes aknahaldurites peaks samuti olema midagi sarnast.
Tutvumine wmctrl-iga
Wmctrl on kÀsurea utiliit, mis vÔimaldab suhelda X Window Manageriga. See on skripti jaoks peamine programm. Vaatame kiiresti, kuidas seda kasutada.
Alustuseks toome vÀlja avatud akende nimekirja:
$ 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 Translate - Mozilla Firefox
0x04400218 0 Navigator.Firefox N/A Parimad postitused viimase 24 tunni jooksul / Habr - Mozilla Firefox (Privaatses Sirvimises)
...Valik -l vÀljastab nimekirja kÔikidest avatud akendest, ja -x lisab vÀljundile klassi nime (skype.Skype, Navigator.Firefox ja ja. Siin on vajalik akna ID (1. veerg), klassinimi (3. veerg) ja akna nimi (viimane veerg).
VÔite proovida aktiveerida mingit akent valikuga -a:
$ wmctrl -a skype.Skype -xKui kĂ”ik lĂ€heb plaanipĂ€raselt, peaks ekraanile ilmuma Skype'i aken. Kui valiku asemel -x kasutada valikut -i, siis klassinime asemel saab kasutada akna ID-d. ID probleem on see, et akna ID muutub iga kord, kui rakendus kĂ€ivitatakse, ja me ei saa seda ette teada. Teisalt nĂ€itab see atribuut akent ĂŒhemĂ”tteliselt, mis vĂ”ib olla oluline, kui rakendus avab rohkem kui ĂŒhe akna. RÀÀgime sellest natuke hiljem.
Selles etapis peame meelde jÀtma, et otsime vajalikku akent regex'i abil vÀljundi pÔhjal wmctrl -lx. Kuid see ei tÀhenda, et me peame midagi keerulist kasutama. Tavaliselt piisab akna klassinimest vÔi nimest.
PÔhimÔtteliselt peaks peamine idee olema juba selge. Teie aknahalduri globaalsete kiirklahvide/otseteede seadetes seadke vajalik kombinatsioon skripti tÀitmiseks.
Kuidas skripte kasutada
Esmalt peate installima konsooli utiliidid wmctrl ja xdotool:
$ sudo apt-get install wmctrl xdotoolJĂ€rgmine samm on skriptide allalaadimine ja nende lisamine $PATH. Mina paigaldan need tavaliselt ~/bin:
$ cd ~/bin
$ git clone https://github.com/masyamandev/Showwin-script.git
$ ln -s ./Showwin-script/showwin showwin
$ ln -s ./Showwin-script/showwinDetach showwinDetachKui katalooge ~/bin ei olnud, tuleb see luua ja sĂŒsteem uuesti kĂ€ivitada (vĂ”i uuesti sisse logida), vastasel juhul ~/bin ei pÀÀse $PATHkontrollide juurde. Kui kĂ”ik on Ă”igesti tehtud, siis peaks skriptide kasutamine olema vĂ”imalik terminalis ning Tab'iga automaatne tĂ€iendamine peaks töötama.
Peamine skript showwin vÔtab 2 parameetrit: esimene on regex, mille alusel me vajaliku akna otsime, ja teine parameeter on kÀsk, mida tuleb tÀita, kui vajalikku akent ei leita.
Skripti tÀitmist vÔib proovida nÀiteks jÀrgmisega:
$ showwin "Mozilla Firefox$" firefoxKui Firefox on paigaldatud, siis peaks selle aknale fookus olema antud. Isegi kui Firefox ei olnud avatud, peaks see kÀivituma.
Kui kÔik Ônnestus, siis vÔib proovida kÀskude seadistamiseks kombinatsioone. Globaalsete hotkey'de/otsete seadetes lisame:
- Alt+F: showwin «Mozilla Firefox$» firefox
- Alt+D: showwin «Mozilla Firefox (Private Browsing)$» «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
Ja klaviatuuri ja tarkvara kombinatsioone saab igaĂŒks seada endale sobivaks.
Kui kĂ”ik on Ă”igesti tehtud, siis nende ĂŒlaltoodud kombinatsioonide abil saame akende vahel vahetada lihtsalt klahvikombinatsiooniga.
Pettun Chrome'i armastajaid: tavalist akent inkognito reĆŸiimist ei saa eristada vĂ€ljundi pĂ”hjal. wmctrl neid ei saa eristada, kuna neil on samad klasside nimed ja akna pealkirjad. Pakutud regex-sĂŒmbolid N* ja I* on vajalikud vaid selleks, et need regulaaravaldised eristuksid ja neile saaks mÀÀrata erinevad peamised aknad.
Eelmise kombinatsiooni (praktikas regex, millega viimane kord kutsuti vÀlja) pÔhja akna lÀhtestamiseks tuleb kÀivitada skript showwin showwinDetach. Minu jaoks on see skript mÀÀratud klahvikombinatsioonile.Skriptil Alt+Backspace.
on veel ĂŒks funktsioon. Kui see kutsutakse vĂ€lja ĂŒhe parameetriga (antud juhul on parameeter lihtsalt identifikaator), ei kontrollita regex'i ĂŒldse ja kĂ”ik aknad loetakse sobivateks. See nĂ€ib iseenesest olevat mĂ”ttetu, kuid sel viisil saame mÀÀrata mistahes akna peamiseks ja kiiresti sellele aknale vahetada. showwin Minu jaoks on seadistatud sellised kombinatsioonid:
Alt+1: showwin «CustomKey1»
- Alt+2: showwin «CustomKey2»
- Alt+0: showwin «CustomKey0»
- âŠ
- Alt+0: showwin «CustomKey0»
- Alt+Backspace: showwinDetach
Nii voin kinnitada kĂ”iki aknaid kombinatsioonide kĂŒlge. Alt+1âŠAlt+0. Lihtsalt vajutades Alt+1 kinnitan praeguse akna sellele kombinatsioonile. TĂŒhistada kinnitamine on vĂ”imalik vajutades Alt+1, ja siis Alt+Backspace. VĂ”i sulgeda aken, see töötab ka.
Edasi rÀÀgin natuke tehnilisi detaile. Neid ei pruugi lugeda, piisab lihtsalt proovimisest ja vaatamisest. Kuid soovitaksin ikkagi ennem otsida ĂŒles teiste skriptid, enne kui neid enda arvutis kĂ€ivitada :)
Kuidas eristada erinevaid aknaid ĂŒhe rakenduse sees
PÔhimÔtteliselt oli kÔige esimene nÀide 'wmctrl -a skype.Skype -x' töökindel ja seda on vÔimalik kasutada. Aga vaatame veel kord Firefoxi nÀidet, kus on avatud 2 akent:
0x04400003 0 Navigator.Firefox N/A Google Translate - Mozilla Firefox
0x04400218 0 Navigator.Firefox N/A Parimad avaldused 24 tunni jooksul / Habr - Mozilla Firefox (Privaatne Sirvimine)Esimene aken on tavareĆŸiimis, teine on Privaatne Sirvimine. Need aknad tahaksime kĂ€sitleda erinevate rakendustena ja neile vahetada erinevate klahvikombinatsioonide kaudu.
Peame keerukama skripti, mis vahetab aknaid. Kasutasin sellist lahendust: kuvada kÔik aknad, teha grep regex abil, vÔtta esimene rida kasutades head, vÔtma esimest veergu (see on akna id) abil lÔika, vaheta aknaks id jÀrgi.
Siin peaks olema nali regulaaravaldiste ja kahe probleemi kohta, kuid tegelikult ei kasuta ma midagi keerulist. Regulaaravaldisi mul on vaja, et saaksin nĂ€idata rea lĂ”ppu (sĂŒmbol «$») ja eristada «Mozilla Firefox$» «Mozilla Firefox (Privaatne sirvimine)$»-st.
KÀsk nÀeb vÀlja umbes nii:
$ wmctrl -i -a `wmctrl -lx | grep -i "Mozilla Firefox$" | head -1 | cut -d" " -f1`Siit vÔib juba aimata teist skripti eripÀra: kui grep ei andnud midagi, siis vajalik rakendus ei ole avatud ja see tuleb kÀivitada, tÀites teise parameetri kÀsu. Ja siis tuleb perioodiliselt kontrollida, kas vajalik aken on avanud, et sellele fookus anda. Ei hakka sellele tÀhelepanu juhtima, kellele huvi pakub, see vaatab lÀhtekoodi.
Kui rakenduse aknad ei ole eristatavad
Nii, me oleme Ă”ppinud edastama fookust vajaliku rakenduse aknale. Kuid mis juhtub, kui rakendusel on avatud rohkem kui ĂŒks aken? Kuidas fookust edastada? Ăks ĂŒlaltoodud skript tĂ”enĂ€oliselt edastab fookuse esimesele avatud aknale. Siiski sooviksime suuremat paindlikkust. Tahaksime, et saaksime meelde jĂ€tta, milline aken on vajalik ja vahetada just selle akna vahel.
Idee on jÀrgmine: kui soovime meelde jÀtta teatud akna jaoks klahvikombinatsiooni, tuleks seda kombinatsiooni vajutada siis, kui vajalik aken on fookuses. JÀtkuvalt, kui vajutame seda kombinatsiooni, antakse fookus just sellele aknale. Kuni aken ei suletakse vÔi me ei tee selle klahvikombinatsiooni jaoks reseti. Minu jaoks on see skript mÀÀratud klahvikombinatsioonile..
Skripti algoritm showwin on umbkaudu selline:
- Kontrollime, kas oleme varem mÀletanud akna ID-d, millele fookust edastada.
Kui oleme mÀletanud ja selline aken eksisteerib endiselt, edastame fookuse sellele ja lahkume. - Vaata, milline aken on praegu fookuses, ja kui see sobib meie sooviga, siis mÀletame selle ID-d, et edaspidi sellele minna, ja lahkume.
- Liigume sobiva akna juurde, kui see eksisteerib, vÔi avame vajaliku rakenduse.
Praegu aktiivse akna mÀÀramiseks vĂ”ite kasutada konsooli utiliiti xdotool, muutes selle vĂ€ljundi kuuekĂŒmnendsĂŒsteemi formaati:
$ printf "0xx" `xdotool getwindowfocus`Bashis on kĂ”ige lihtsam midagi salvestada, luues faile virtuaalses failisĂŒsteemis, mis asub mĂ€lu sees. Ubuntu puhul on see vaikimisi ĂŒhendatud /dev/shm/. Teiste distributsioonide kohta ei oska ma öelda, aga loodan, et midagi sarnast on ka seal. Seda saab kontrollida kĂ€suga:
$ mount -l | grep tmpfsSkript loob selles kaustas tĂŒhjad kaustad, nagu need: /dev/shm/$USER/showwin/$SEARCH_REGEX/$WINDOW_ID. Samuti loob ta iga kutsumise korral sĂŒmlink /dev/shm/$USER/showwin/showwin_last jĂ€rgnevaga /dev/shm/$USER/showwin/$SEARCH_REGEX. See on vajalik, et vajadusel kustutada akna ID kindla kombinatsiooni jaoks skripti abil Minu jaoks on see skript mÀÀratud klahvikombinatsioonile..
Mida saaks parandada
Esiteks tuleb skripte kĂ€sitsi seadistada. Kindlasti takistab vajadus sĂŒĂŒvida ja palju kĂ€sitsi teha paljusid teid sĂŒsteemi seadistamast. Kui oleks vĂ”imalus lihtsalt installida pakett ja kĂ”ik mugavamalt seadistada, siis vĂ”ib-olla oleks see mĂ”ningast populaarsust kogunud. Ja siis vĂ”ib-olla oleks rakendust lisatud ka standardsetesse distributsioonidesse.
Ja, see on tÔenÀoliselt lihtsam teha. Kui akna ID abil saab teada, milline protsess selle lÔi, ja seejÀrel protsessi ID abil saab teada, milline kÀsk selle lÔi, siis oleks seadistamine automatiseeritav. Tegelikult ma ei ole uurinud, kas see, mida ma selles lÔigus kirjutasin, on vÔimalik. Asi on selles, et mulle endale meeldib, kuidas see praegu töötab. Aga kui kellelegi peale minu tundub, et kogu lÀhenemine on mugav ja keegi suudab seda tÀiustada, siis ma rÔÔmuga kasutan paremat lahendust.
Teine probleem, nagu olen juba kirjutanud, on see, et mĂ”nel juhul ei saa aknaid ĂŒksteisest eristada. Olen seda seni tĂ€heldanud ainult Chrome'i/Chromiumi inkognito reĆŸiimis, kuid vĂ”ib-olla on see ka mujal. Viimase vĂ”imalusena on alati universaalsed kombinatsioonid. Alt+1âŠAlt+0. Taaskord, ma kasutan Firefoxi ja isiklikult ei ole see probleem minu jaoks oluline.
Oluline probleem minu jaoks on aga see, et oma töös kasutan Mac OS-i ning seal ei suutnud ma midagi sellist seadistada. Tööriista wmctrl nagu tundub, suutsin installida, kuid see ei tööta Mac OS-is korralikult. Midagi saab rakendusega teha. Automator, kuid see aeglustab nii palju, et selle kasutamine pole mugav isegi siis, kui see töötab. Kahe nĂ€ppimise seadistamine nii, et need töötaksid kĂ”igis programmides, ei Ă”nnestunud mul samuti. Kui keegi juhuslikult leidis lahenduse â oleksin rÔÔmus selle ĂŒle.
KokkuvÔtte asemel
Tekkis ĂŒllatavalt palju sĂ”nu sellise, nĂ€iliselt, lihtsa funktsionaalsuse kohta. Soovisin edasi anda mĂ”tet ja mitte teksti ĂŒle koormata, kuid hetkel ei ole ma veel leidnud lihtsamat viisi rÀÀkimiseks. VĂ”ib-olla oleks videos vormingus parem, kuid siin ei meeldi seda nii palju.
RÀÀkisin veidi sellest, mis skripti all toimub ja kuidas seda seadistada. Skripti ĂŒksikasjadesse ei laskunud, kuid see on vaid 50 rida, selgeks saada pole keeruline.
Loodan, et keegi veel seda ideed proovib ja vĂ”ib-olla isegi hindab. Enda kohta vĂ”in öelda, et skript kirjutati umbes 3 aastat tagasi ja see on mulle ĂĂRETULT mugav. Nii mugav, et see tekitab tĂ”sist ebamugavust, kui töötan teiste arvutitega. Ja tööaluse MacBookiga.
Allikas: habr.com
