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 "0x%08x" `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
