Ma olen see, kes paneb Caps Lock'i keelevahetuseks, sest on liiga laisk, et vajutada kahte nuppu, kui vĂ”ib vajutada ĂŒhte. Ma sooviks isegi kaht ebavajalikku nuppu: ĂŒhte kasutaksin ingliskeelse klaviatuuri jaoks ja teist venekeelse jaoks. Kuid teine ebavajalik nupp on konteksti menĂŒĂŒ kutsumine, mis on nii vajalik, et paljusid sĂŒlearvuti tootjaid hĂ€irib see. Seega tuleb leppida sellega, mis on.
Ja ma ei taha ka akende vahetamisel nende ikoone tegumiribal otsida, ĂŒritades silmadega tabada nimesid kerimise kaudu , mis ei ole eriti mugav., kerida töölauale jne. Ma tahan vajutada klahvikombinatsiooni (ideaalis ĂŒhe, kuid vabu ebavajalikke klahve enam pole) ja kohe siseneda vajaliku aknaga. NĂ€iteks nii:
- Alt+F: Firefox
- Alt+D: Firefox (PrivaatsusreĆŸiim)
- Alt+T: Terminal
- Alt+M: Kalkulaator
- Alt+E: IntelliJ Idea
- jne.
Ja vajutades nÀiteks Alt+M , tahan nÀha kalkulaatorit sÔltumata sellest, kas see programm on hetkel avatud. Kui see on avatud, siis tuleb sellele aknale anda fookus, ja kui ei ole, siis avada vajalik programm ja anda fookus, kui see on laaditud.
Juhtudel, mida eelnev stsenaarium ei kata, tahan, et mul oleks universaalsed klahvikombinatsioonid, millele on lihtne mÀÀrata mis tahes avatud aknad. NĂ€iteks olen mÀÀranud 10 kombinatsiooni alates Alt+1 kuni Alt+0, mis ei ole seotud ĂŒhegi programmiga. Ma vĂ”in lihtsalt vajutada Alt+1 , ja aknal, mis praegu on fookuses, hakkab fookus toimuma, kui vajutada Alt+1.
Allpool on kirjeldatud veel paar funktsiooni ja vastus kĂŒsimusele, kuidas seda teha. Kuid kohe tĂ€psustan, et selline kohandamine "enda jaoks" vĂ”ib tekitada tugevat sĂ”ltuvust ja isegi vÔÔrutussĂŒmptomeid, kui tuleb kasutada Windowsi, Mac OS-i vĂ”i isegi kellegi teise Linuxi arvutit.
Tegelikult, kui mĂ”elda, siis me ei kasuta igapĂ€evaselt nii palju programme. Brauser, terminal, IDE, mĂ”ni sĂ”numside rakendus, failihaldur, kalkulaator ja ilmselt ongi kĂ”ik. Vajalik on vaid vĂ€he klahvikombinatsioone, et katta 95% igapĂ€evastest ĂŒlesannetest.
Programmide puhul, millel on avatud mitu akent, vĂ”ib ĂŒks neist mÀÀrata peamiseks. NĂ€iteks, kui on avatud mitu IntelliJ Idea akent, mis on mÀÀratud Alt+E. Tavalistes tingimustes, kui vajutada Alt+E , avatakse mingi selle programmi aken, mis tĂ”enĂ€oliselt oli avatud esimesena. Kuid kui vajutada Alt+E kui ĂŒks selle programmi akendest on juba fookuses, siis mÀÀratakse see aken peamiseks ja just sellele antakse fookus jĂ€rgmiste kombinatsioonide vajutamisel.
Peaaken saab ĂŒmber mÀÀrata. Selleks tuleb esmalt kombinatsioon nullida ja seejĂ€rel mÀÀrata sellele peamiseks teine aken. Kombinatsiooni nullimiseks tuleb vajutada ise kombinatsiooni ja seejĂ€rel spetsiaalset nullimise kombinatsiooni, mis mul on mÀÀratud Alt+Backspace. See kutsub esile skripti, mis tĂŒhistab eelneva kombinatsiooni peamise akna mÀÀramise. Edasi saab mÀÀrata uue peamise akna nagu eelnevas lĂ”igus kirjeldatud. Seotud akna lĂ€htestamine universaalsete kombinatsioonide jaoks toimub samamoodi.
Sissejuhatus tuli pikk, kuid tahtsin kÔigepealt rÀÀkida, mida me teeme, ja siis seletada, kuidas seda teha.
Neile, kellele lugemine juba igav on
LĂŒhidalt öeldes on skriptide link artikli lĂ”pus.
Kuid kohe installida ja kasutada ei Ônnestu. Peab esmalt aru saama, kuidas skript leiab vajaliku akna. Ilma selleta ei saa skripti suunata fookuse edastamise kohta. Ja tuleb aru saada, mida teha, kui sobivat akent ei leita.
Ja ma ei kavatse keskenduda sellele, kuidas seadistada skriptide kĂ€ivitamist klahvikombinatsioonide vajutamisel. NĂ€iteks KDE-s on see System Settings â Shortcuts â Custom Shortcuts. Teistes aknahaldurites peaks ka seda olema.
Tutvumine wmctrl-iga
Wmctrl â kĂ€sklustööriist X Window Manageriga suhtlemiseks. See on skripti jaoks vĂ”tmeprogramm. Vaatame kiirutades, kuidas seda kasutada.
Esmalt tÔstame esile 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 TÔlkija - Mozilla Firefox
0x04400218 0 Navigator.Firefox N/A Parimad postitused pÀeva jooksul / Habr - Mozilla Firefox (Privaatses sirvimises)
...Valik Ôpivad toob esile kÔigi avatud akende nimekirja, ja -x lisab vÀljundisse klassi nime (skype.Skype, Navigator.Firefox jne). Meile on vajalik akna id (1. veerg), klassi nimi (3. veerg) ja akna nimi (viimane veerg).
Saame proovida aktiveerida mÔnda akent valiku abil -a:
$ wmctrl -a skype.Skype -xKui kĂ”ik lĂ€ks plaanipĂ€raselt, siis peaks ekraanile ilmuma Skype'i aken. Kui valiku asemel -x kasutada valikut -i, siis klassi nime asemel saab kasutada akna id. Id probleemiks on, et akna id muutub iga rakenduse kĂ€ivitamise ajal ja me ei saa seda ette teada. Teisalt osutab see atribuut ĂŒhemĂ”tteliselt aknale, mis vĂ”ib olla oluline, kui rakendus avab rohkem kui ĂŒhe akna. Selle kohta rÀÀgime veidi hiljem.
Selles etapis peame meeles pidama, et otsime vajalikke aknaid regexi abil vÀljundist wmctrl -lx. Kuid see ei tÀhenda, et peame alati midagi keerulist kasutama. Tavaline on piisav klassi nimi vÔi akna pealkiri.
PĂ”himĂ”tteliselt peaks peamine idee olema juba selge. Teie aknahalduri globaalsete hotkeyde/lĂŒhikeste vĂ”tmete seadetes seadistame vajaliku kombinatsiooni skripti kĂ€ivitamiseks.
Kuidas skripte kasutada
KÔigepealt peate installima konsooliharjutused wmctrl ja xdotool:
$ sudo apt-get install wmctrl xdotoolSeejÀrel peate skriptid alla laadima ja need lisama $PATH. Ma tavaliselt panen need ~/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, siis tuleb see luua ja uuesti sisse logida (vÔi uuesti siseneda), vastasel juhul ~/bin ei jÔua $PATH. Kui kÔik on tehtud Ôigesti, peaksid skriptid olema konsoolist kÀttesaadavad ja Tab-klahvil peaks olema tÀiendamine.
PÔhiskript showwin vÔtab vastu 2 parameetrit: esimene on regex, mille pÔhjal otsime vajalikke aknaid, ja teine parameeter on kÀsk, mida tuleks tÀita, kui vajalikke aknaid ei leita.
VÔite proovida skripti kÀivitada, nÀiteks:
$ showwin "Mozilla Firefox$" firefoxKui Firefox on installitud, peaks aknale olema antud fookus. Ieven, kui Firefox ei olnud kÀivitatud, peaks see kÀivituma.
Kui see Ă”nnestus, siis vĂ”ite proovida seadistada kĂ€skude tĂ€itmist kombinatsioonidele. Globaalsete hotkeyde/lĂŒhikeste vĂ”tmete seadetes lisame:
- Alt+F: showwin «Mozilla Firefox$» firefox
- Alt+D: showwin «Mozilla Firefox (Privaatne sirvimine)$» «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
jne. Klaviatuuri ja tarkvara kombinatsioone saab igaĂŒks seadistada endale sobivaks.
Kui kÔik Ônnestus Ôigesti, saame eespool nimetatud kombinatsioonide abil akende vahel lihtsalt klahvide vajutusega vahetada.
Pettun Chrome'i fĂ€nnide lootuseid: tavalist akent ei suuda ta inkognito reĆŸiimis eristada. wmctrl ei saa, neil on samad klassinimed ja akna pealkirjad. Pakutud regex'i N* ja I* sĂŒmbolid on vajalikud ainult selleks, et need regulaaravaldised ĂŒksteisest eristuksid ja nendele saaks mÀÀrata erinevad peakingimused.
Eelmise kombinatsiooni peakingimuse lÀhtestamiseks (tegelikult regexi, mida showwin kasutati viimati) tuleb kÀivitada skript showwinDetach. Mul on see skript mÀÀratud klaviatuurikombinatsioonile Alt+Backspace.
Skriptil showwin on veel ĂŒks funktsioon. Kui seda kutsutakse ĂŒhe parameetriga (antud juhul on parameeter lihtsalt ID), siis ei kontrollita regex'i ĂŒldse, vaid kĂ”ik aknad peetakse sobivaks. See tundub iseenesest kasutamata, kuid sel viisil saame mÀÀrata mistahes akna peamiseks ja kiiresti sellele aknale ĂŒle minna.
Mul on seadistatud sellised kombinatsioonid:
- Alt+1: showwin «CustomKey1»
- Alt+2: showwin «CustomKey2»
- âŠ
- Alt+0: showwin «CustomKey0»
- Alt+Backspace: showwinDetach
Nii et ma saan siduda igasuguseid aknaid kombinatsioonidega Alt+1âŠAlt+0. Lihtsalt vajutades Alt+1 sidun ma aktiivse akna selle kombinatsiooniga. TĂŒhistada sidumise vĂ”in vajutades Alt+1, ja seejĂ€rel Alt+Backspace. VĂ”i sulgedes akna, see samuti töötab.
Edasi rÀÀgin natuke tehnilistest detailidest. Neid ei ole kohustuslik lugeda, lihtsalt proovi seadistada ja vaata. Kuid ma soovitaksin ikkagi mÔista teiste skripte enne, kui neid oma arvutis kÀivitada :).
Kuidas eristada erinevaid aknaid ĂŒhest rakendusest
Praktiliselt oli esimene nÀide «wmctrl -a skype.Skype -x» töötav ja seda vÔib kasutada. Aga vaatame veel kord nÀidet Firefoxist, kus on avatud 2 akent:
0x04400003 0 Navigator.Firefox N/A Google TÔlkija - Mozilla Firefox
0x04400218 0 Navigator.Firefox N/A Parimad avaldused ööpĂ€eva jooksul / Habr - Mozilla Firefox (Privaatne Sirvimine)Esimene aken on tavareĆŸiimis, teine on Privaatne Sirvimine. Need aknad tahaksime arvestada erinevate rakendustena ja neisse ĂŒle minna erinevate klaviatuurikombinatsioonidega.
Skripti, mis aknaid vahetab, tuleb keerulisemaks muuta. Olen kasutanud sellist lahendust: kuvada kÔigi akende nimekiri, teha grep regex'i, vÔtta esimene rida head, saada esimene veerg (see on akna id) kasutades cut, vahetada aken id jÀrgi.
Siin peaks olema nali regulaaravaldistest ja kahest probleemist, kuid tegelikult ma ei kasuta midagi keerulist. Regulaaravaldised on vajalikud selleks, et oleks vĂ”imalik nĂ€idata stringi lĂ”ppu (sĂŒmbol «$») ja eristada «Mozilla Firefox$» ja «Mozilla Firefox (Privaatne Sirvimine)$».
Ekip yaklaĆık Ćöyle görĂŒnĂŒyor:
$ wmctrl -i -a `wmctrl -lx | grep -i "Mozilla Firefox$" | head -1 | cut -d" " -f1`Siin on juba lihtne arvata skripti teise omaduse ĂŒle: kui grep ei tagasta midagi, tĂ€hendab see, et vajalik rakendus ei ole avatud ja see tuleb kĂ€ivitada, tĂ€ites teise parameetri kĂ€su. Ja siis kontrollime regulaarselt, kas vajalik aken on avanud, et sellele fookust anda. Ei hakka sellele liiga palju tĂ€helepanu juhtima, kes vajab, see vaatab lĂ€htekoodid ĂŒle.
Kui rakenduse aknad ei ole eristatavad
Nii et oleme Ă”ppinud fookust andma soovitud rakenduse aknale. Aga mis siis, kui rakendusel on avatud rohkem kui ĂŒhe akna? Kellele neist fookust anda? Ălaltoodud skript annab tĂ”enĂ€oliselt fookuse esimesena avatud aknale. Siiski sooviksime suuremat paindlikkust. Tahaksime vĂ”imalust meeles pidada, milline aken on vajalik, ja lĂŒlituda just sellele aknale.
Idee oli selline: Kui tahame klahvikombinatsiooni jaoks meeles pidada mingit kindlat akent, siis peame vajutama seda kombinatsiooni siis, kui vajalik aken on fookuses. Hiljem, kui seda kombinatsiooni vajutame, saadakse fookus just sellele aknale. Kuni aken ei suletakse vÔi me ei tee selle kombinatsiooni jaoks skripti lÀhtestamist showwinDetach.
Skripti algoritm showwin on umbes jÀrgmine:
- Kontrolli, kas oleme juba varem meeles pidanud aken id, millele fookust anda.
Kui oleme meeles pidanud ja selline aken on endiselt olemas, siis anname fookuse sellele ja lahkume. - Vaata, milline aken on praegu fookuses, ja kui see sobib meie sooviga, siis salvestame selle id tulevaseks ĂŒleminekuks ning lahkume.
- Liigume mÔne sobiva akna juurde, kui see olemas on, vÔi avame vajaliku rakenduse.
Praegu fookuses oleva akna tuvastamiseks vĂ”ime kasutada konsooli utiliiti xdotool, muutes selle vĂ€ljundi kuuekĂŒmnendlikku vormi:
$ printf "0xx" `xdotool getwindowfocus`Bashis midagi mĂ€letamine on kĂ”ige lihtsam, luues faile virtuaalses mĂ€lusĂŒsteemis. Ubuntu-s on see vaikimisi aktiveeritud /dev/shm/. Muude jaotuste kohta ei oska midagi öelda, loodan, et sarnane asi on ka seal. Saame vaadata kĂ€suga:
$ mount -l | grep tmpfsSkript loob selles kaustas tĂŒhje kaustu, selliseid: /dev/shm/$USER/showwin/$SEARCH_REGEX/$WINDOW_ID. TĂ€iendavalt igal korral, kui seda kutsutakse, loob see symlink /dev/shm/$USER/showwin/showwin_last . Tundub, et /dev/shm/$USER/showwin/$SEARCH_REGEX. See on vajalik, et vajadusel kustutada akna id konkreetse kombinatsiooni jaoks skripti abil showwinDetach.
Mida saaks parandada
Esiteks tuleb skripte kĂ€sitsi seadistada. Kindlasti huvitatakse paljusid teist, et vajadus sĂŒveneda ja kĂ”ike kĂ€sitsi teha vĂ”ivad teha teid isegi kahtlema sĂŒsteemi seadistamises. Kui saaks lihtsalt paketi paigaldada ja kĂ”ik seada kiiremini, siis vĂ”ib-olla oleks see mĂ”ne populaarsuse saavutanud. Ja vĂ”ib-olla hakkaks see lĂ”puks ka standardsetesse distributsioonidesse rakendusi lisama.
Ja vÔib-olla saaks asju lihtsamaks teha. Kui akna ID jÀrgi saaks teada protsessi ID, mis selle loonud on, ja protsessi ID jÀrgi juurutada, milline kÀsk selle loonud on, siis saaks seadistamise automatiseerida. Tegelikult ma ei ole uurinud, kas see, mida ma selles lÔigus kirjutasin, on vÔimalik. Asi on selles, et mulle endale sobib see, kuidas see praegu töötab. Kuid kui kellelegi muule tundub see lÀhenemine mugav ja keegi seda parandab, siis oleksin rÔÔmus, kui saaksin kasutada paremat lahendust.
Teine probleem, millest ma olen 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 kuskil mujal selline probleem. ĂĂ€rmuslikul juhul on alati universaalsete kombinatsioonide vĂ”imalus. Alt+1âŠAlt+0. Taaskord, ma kasutan Firefoxi ja see probleem ei ole mulle isiklikult oluline.
Ent minu jaoks on tĂ”sine probleem see, et kasutan tööl Mac OS-i ja seal ei ole ma suutelised midagi sarnast seadistama. Utiliidi wmctrl paigaldamine nĂ€is olevat vĂ”imalik, kuid see ei tööta Mac OS-is adekvaatselt. Mingit vĂ”ib rakendusega teha, Automatoraga see on nii aeglane, et seda on ebamugav kasutada, isegi kui see töötab. Ma ei suutnud ka klahvikombinatsioone seadistada nii, et need töötaksid kĂ”igis programmides. Kui keegi peaks lahenduse vĂ€lja mĂ”tlema â oleksin rÔÔmus, kui saaksin seda kasutada.
LÔpetuseks
Tuli ootamatult palju sĂ”nu sellise, nĂ€iliselt lihtsa funktsionaalsuse kohta. Tahtsin edastada idee ja mitte teksti ĂŒle koormata, kuid ma ei ole veel vĂ€lja mĂ”elnud, kuidas seda lihtsamalt rÀÀkida. VĂ”ib-olla videos oleks see parem, aga siin ei meeldi seda vĂ€ga.
RÀÀkisin natuke, mis toimub skripti taga ja kuidas seda seadistada. Skripti enda detailidesse ma ei laskunud, aga see on vaid 50 rida, sealt saada ei ole keeruline.
Loodan, et keegi proovib seda ideed ja vĂ”ib-olla isegi hindab seda. VĂ”in öelda, et skript kirjutati umbes kolm aastat tagasi ja see on mulle ĂLIKENDAJALIK. Nii mugav, et tekitab tĂ”sist ebamugavust töötades teiste arvutitega. Ja oma töö MacBookiga.
Allikas: habr.com
