Alternatiivne aknahaldus Linuxis

Olen üks neist, kes paneb Caps Locki paigutust vahetama, sest olen liiga laisk, et vajutada kahte klahvi, kui saan ühte vajutada. Tahaks isegi 2 mittevajalikku klahvi: ühte kasutaksin ingliskeelse paigutuse sisselülitamiseks ja teist vene keele jaoks. Kuid teine ​​​​mittevajalik võti on kontekstimenüü avamine, mis on nii ebavajalik, et paljud sülearvutite tootjad lõikavad selle välja. Nii et sa pead olema rahul sellega, mis sul on.

Samuti ei taha ma akende vahetamisel tegumiribal nende ikoone otsida ega sirvides nimesid tabada Alt + Tab, kerida lauaarvuteid jne. Tahan vajutada klahvikombinatsiooni (ideaaljuhul ainult ühte, aga vabasid mittevajalikke klahve enam pole) ja jõuda kohe vajaliku akna juurde. Näiteks nii:

  • Alt+F: Firefox
  • Alt+D: Firefox (privaatne sirvimine)
  • Alt+T: terminal
  • Alt+M: kalkulaator
  • Alt+E: IntelliJ idee
  • jne.

Veelgi enam, vajutades näiteks sisse Alt+M Ma tahan näha kalkulaatorit olenemata sellest, kas see programm parasjagu töötab. Kui see töötab, tuleb selle aknale fokuseerida ja kui ei, käivitage soovitud programm ja laadige fookus üle.

Juhtudeks, mida eelmine skript ei hõlma, soovin universaalseid klahvikombinatsioone, mida saab hõlpsasti määrata mis tahes avatud aknale. Näiteks on mul 10 kombinatsiooni määratud Alt + 1 kuni Alt + 0, mis pole seotud ühegi programmiga. Ma võin lihtsalt klõpsata Alt + 1 ja praegu fookuses olev aken muutub klõpsamisel teravaks Alt + 1.

Lõike all on veel paari funktsiooni kirjeldus ja vastus, kuidas seda teha. Kuid ma hoiatan teid kohe, et selline kohandamine "enese jaoks" võib põhjustada tõsist sõltuvust ja isegi võõrutust, kui peate kasutama Windowsi, Mac OS-i või isegi kellegi teise arvutit Linuxiga.

Tegelikult, kui järele mõelda, siis me ei kasutagi nii palju programme igapäevaselt. Brauser, terminal, IDE, mingi messenger, failihaldur, kalkulaator ja võib-olla on see peaaegu kõik. 95% igapäevaste ülesannete katmiseks pole vaja palju klahvikombinatsioone.

Programmide puhul, millel on mitu avatud akent, saab ühe neist määrata peamiseks. Näiteks on teil avatud ja määratud mitu IntelliJ Idea akent Alt + E. Tavatingimustes, kui vajutate Alt + E avaneb mõni selle programmi aken, tõenäoliselt see, mis avati esimesena. Kui aga klõpsate Alt + E kui üks selle programmi akendest on juba fookuses, määratakse see konkreetne aken peamiseks ja see on see, mis fokusseeritakse järgmiste kombinatsioonide vajutamisel.

Peaakna saab ümber määrata. Selleks peate esmalt kombinatsiooni lähtestama ja seejärel määrama sellele peaaknaks teise akna. Kombinatsiooni lähtestamiseks peate vajutama kombinatsiooni ennast ja seejärel spetsiaalset lähtestamiskombinatsiooni, mille olen määranud Alt+tagasilükkeklahv. See kutsub esile skripti, mis tühistab eelmise kombinatsiooni peaakna määramise. Ja seejärel saate määrata uue peaakna, nagu on kirjeldatud eelmises lõigus. Lingitud akna lähtestamine universaalsetele kombinatsioonidele toimub samal viisil.

Sissejuhatus osutus pikaks, kuid tahtsin kõigepealt öelda, mida me teeme, ja seejärel selgitada, kuidas seda teha.

Neile, kes on lugemisest väsinud

Lühidalt, link skriptidele on artikli lõpus.

Kuid te ei saa ikkagi seda kohe installida ja kasutada. Kõigepealt peate välja mõtlema, kuidas skript soovitud akna leiab. Ilma selleta pole skriptile võimalik öelda, kuhu täpselt fookus tuleb üle kanda. Ja peate mõistma, mida teha, kui äkki sobivat akent ei leitud.

Ja ma ei keskendu sellele, kuidas skriptide täitmist klahvikombinatsioonide vajutamisega konfigureerida. Näiteks KDE-s on see jaotises Süsteemi seadistused → Kiirklahvid → Kohandatud kiirklahvid. See peaks nii olema ka teiste aknahaldurite puhul.

Tutvustame wmctrli

Wmctrl — konsooliutiliit X Window Manageriga suhtlemiseks. See on skripti põhiprogramm. Vaatame lühidalt, kuidas seda kasutada.

Esmalt kuvame avatud akende loendi:

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

Variant -l kuvab kõigi avatud akende loendi ja -x lisab väljundile klassi nime (skype.Skype, Navigaator.Firefox jne). Siin vajame akna ID-d (veerg 1), klassi nime (veerg 3) ja akna nime (viimane veerg).

Võite proovida mõnda akent aktiveerida, kasutades valikut -a:

$ wmctrl -a skype.Skype -x

Kui kõik läks plaanipäraselt, peaks ekraanile ilmuma Skype'i aken. Kui valiku asemel -x kasuta võimalust -i, siis saab klassi nime asemel määrata akna ID. ID-ga on probleem selles, et akna ID muutub iga kord, kui rakendus käivitatakse ja me ei saa seda ette teada. Teisest küljest identifitseerib see atribuut üheselt akna, mis võib olla oluline, kui rakendus avab rohkem kui ühe akna. Sellest veidi pikemalt lähemalt.

Selles etapis peame meeles pidama, et otsime soovitud akent regexi abil väljundi järgi wmctrl -lx. Kuid see ei tähenda, et peaksime kasutama midagi keerulist. Tavaliselt piisab klassi või akna nimest.

Põhimõtteliselt peaks põhiidee juba selge olema. Seadistage oma aknahalduri globaalsete kiirklahvide/otseteede sätetes skripti käivitamiseks vajalik kombinatsioon.

Kuidas skripte kasutada

Kõigepealt peate installima konsooli utiliidid wmctrl и xdotool:

$ sudo apt-get install wmctrl xdotool

Järgmisena peate skriptid alla laadima ja lisama $ PATH. Tavaliselt panen need sisse ~/bin:

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

Kui kataloog ~/bin ei olnud, siis peate selle looma ja taaskäivitama (või uuesti sisse logima), vastasel juhul ~/bin ei löö $ PATH. Kui kõik on õigesti tehtud, peaksid skriptid olema konsoolist ligipääsetavad ja Tab täitmine peaks toimima.

Peamine skript showwin võtab 2 parameetrit: esimene on regex, mille abil otsime vajalikku akent ja teine ​​parameeter on käsk, mis tuleb käivitada, kui vajalikku akent ei leita.

Võite proovida käivitada skripti, näiteks:

$ showwin "Mozilla Firefox$" firefox

Kui Firefox on installitud, tuleks selle aken keskenduda. Isegi kui Firefox ei töötaks, oleks see pidanud käivituma.

Kui see töötab, võite proovida konfigureerida kombinatsioonide käskude täitmist. Lisage globaalsete kiirklahvide/otseteede seadetesse:

  • Alt+F: showwin “Mozilla Firefox$” firefox
  • Alt+D: showwin "Mozilla Firefox (privaatne sirvimine)$" "firefox -private-window"
  • Alt+C: kuva Win "chromium-browser.Chromium-browser N*" kroomi brauser
  • Alt+X: showwin "chromium-browser.Chromium-browser I*" "chromium-browser -incognito"
  • Alt+S: showwin “skype.Skype” skypeforlinux
  • Alt+E: showwin “jetbrains-idea” idee.sh

Jne Igaüks saab seadistada klahvikombinatsioone ja tarkvara oma äranägemise järgi.
Kui kõik toimis õigesti, saame ülaltoodud kombinatsioonide abil akende vahel lülituda lihtsalt klahve vajutades.

Ma valmistan kroomisõpradele pettumuse: see suudab inkognito eristada tavalist akent oma väljundi järgi wmctrl Te ei saa, neil on samad klassinimed ja aknapealkirjad. Pakutud regexis on märke N* ja I* vaja ainult selleks, et need regulaaravaldised üksteisest erineksid ja neid saaks määrata põhiakendeks.

Eelmise kombinatsiooni peaakna lähtestamiseks (tegelikult regexi jaoks, mis showwin kutsus viimati) peate skripti kutsuma showwinEemalda. Mul on see skript määratud klahvikombinatsioonile Alt+tagasilükkeklahv.

Stsenaariumi juures showwin on veel üks funktsioon. Kui seda kutsutakse ühe parameetriga (antud juhul on parameeter vaid identifikaator), ei kontrolli ta regexi üldse, vaid peab kõiki aknaid sobivaks. Iseenesest tundub see kasutu, kuid nii saame määrata mis tahes akna peamiseks ja kiiresti sellele konkreetsele aknale lülituda.

Mul on konfigureeritud järgmised kombinatsioonid:

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

Nii saan kombineerida mis tahes aknaid Alt + 1...Alt + 0. Lihtsalt klõpsates Alt + 1 Seon praeguse akna selle kombinatsiooniga. Saan sidumise tühistada klikkides Alt + 1ja siis Alt+tagasilükkeklahv. Või sulgege aken, ka see töötab.

Järgmisena räägin teile mõned tehnilised üksikasjad. Te ei pea neid lugema, vaid proovige need seadistada ja vaadake. Aga ma soovitaks siiski enne oma arvutis käivitamist teiste inimeste skriptidest aru saada :).

Kuidas teha vahet sama rakenduse erinevatel akendel

Põhimõtteliselt töötas kõige esimene näide “wmctrl -a skype.Skype -x” ja seda saab kasutada. Kuid vaatame uuesti Firefoxi näidet, kus on avatud 2 akent:

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

Esimene aken on tavarežiimis ja teine ​​on privaatne sirvimine. Tahaksin käsitleda neid aknaid erinevate rakendustena ja lülituda neile erinevate klahvikombinatsioonide abil.

Akende vahetamise skripti on vaja keerulisemaks muuta. Kasutasin seda lahendust: kuvage kõigi akende loend, tehke grep regexi järgi võtke esimene rida koos juhataja, hankige esimene veerg (see on akna ID), kasutades lõigatud, lülituge aknale ID järgi.

Regulaaravaldiste ja kahe probleemi üle peaks nalja saama, aga tegelikult ma ei kasuta midagi keerulist. Mul on vaja regulaaravaldisi, et saaksin näidata rea ​​lõppu (sümbol "$") ja eristada "Mozilla Firefox$" ja "Mozilla Firefox (Private Browsing)$".

Käsk näeb välja umbes selline:

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

Siin võib juba aimata skripti teist omadust: kui grep ei tagasta midagi, siis pole soovitud rakendus avatud ja peate selle käivitama, täites käsu teisest parameetrist. Seejärel kontrollige perioodiliselt, kas vajalik aken on avanenud, et sellele fookus üle kanda. Ma ei keskendu sellele; igaüks, kes seda vajab, vaatab allikaid.

Kui rakenduse aknad ei ole eristatavad

Niisiis, oleme õppinud, kuidas suunata fookus soovitud rakenduse aknasse. Aga mis siis, kui rakendusel on avatud rohkem kui üks aken? Millisele peaksin keskenduma? Ülaltoodud skript kantakse tõenäoliselt üle esimesse avatud aknasse. Siiski sooviksime rohkem paindlikkust. Tahaksin meeles pidada, millist akent me vajame, ja lülituda sellele konkreetsele aknale.

Idee oli järgmine: kui tahame klahvikombinatsiooni jaoks konkreetse akna meelde jätta, siis peame seda kombinatsiooni vajutama, kui soovitud aken on fookuses. Edaspidi, kui vajutate seda kombinatsiooni, keskendutakse sellele aknale. Kuni aken sulgub või teeme selle skriptikombinatsiooni lähtestamise showwinEemalda.

Skripti algoritm showwin midagi sellist:

  • Kontrollige, kas oleme varem meelde jätnud selle akna ID, kuhu fookus üle kanda.
    Kui mäletate ja selline aken on endiselt olemas, suuname fookuse sellele ja väljume.
  • Vaatame, milline aken on hetkel fookuses ja kui see vastab meie päringule, jätke selle id meelde, et tulevikus sellele minna ja väljuda.
  • Läheme vähemalt mõne sobiva akna juurde, kui see on olemas, või avame soovitud rakenduse.

Saate teada, milline aken on hetkel fookuses, kasutades xdotool konsooli utiliiti, teisendades selle väljundi kuueteistkümnendvormingusse:

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

Lihtsaim viis bashis midagi meelde jätta on luua failid mälus asuvas virtuaalses failisüsteemis. Ubuntus on see vaikimisi lubatud /dev/shm/. Teiste distributsioonide kohta ei oska ma midagi öelda, loodan, et ka midagi sarnast on. Saate vaadata käsuga:

$ mount -l | grep tmpfs

Skript loob sellesse kausta tühjad kataloogid, näiteks järgmiselt: /dev/shm/$USER/showwin/$SEARCH_REGEX/$WINDOW_ID. Lisaks loob see iga kord, kui seda nimetatakse, sümbollingi /dev/shm/$USER/showwin/showwin_last edasi /dev/shm/$USER/showwin/$SEARCH_REGEX. Seda on vaja selleks, et vajadusel skripti abil teatud kombinatsiooni akna ID eemaldada showwinEemalda.

Mida saab parandada

Esiteks tuleb skriptid käsitsi konfigureerida. Kindlasti ei proovi paljud teist süsteemi konfigureerida, kuna on vaja palju oma kätega süveneda ja teha. Kui oleks võimalik pakett lihtsalt installida ja kõike lihtsamalt seadistada, siis ehk koguks see populaarsust. Ja siis vaata, rakendus vabastataks standardsetesse distributsioonidesse.

Ja võib-olla saab seda lihtsamalt teha. Kui akna id abil saate teada selle loonud protsessi id ja protsessi id järgi saate teada, milline käsk selle lõi, siis oleks võimalik seadistamine automatiseerida. Tegelikult ma ei saanud aru, kas selles lõigus kirjutatu oli võimalik. Fakt on see, et mina isiklikult olen selle praeguse toimimisega rahul. Aga kui keegi teine ​​peale minu peab kogu lähenemist mugavaks ja keegi parandab seda, siis kasutan hea meelega paremat lahendust.

Teine probleem, nagu ma juba kirjutasin, on see, et mõnel juhul ei saa aknaid üksteisest eristada. Siiani olen seda ainult inkognito režiimis kroomi/kroomi puhul täheldanud, aga võib-olla on midagi sarnast kusagil mujal. Viimase abinõuna on alati võimalus universaalsete kombinatsioonide jaoks Alt + 1...Alt + 0. Jällegi kasutan Firefoxi ja minu jaoks isiklikult pole see probleem oluline.

Kuid minu jaoks on oluline probleem see, et ma kasutan tööks Mac OS-i ja ma ei saanud seal midagi sellist seadistada. kasulikkust wmctrl Arvan, et sain selle installida, kuid see ei tööta tegelikult Mac OS-is. Rakendusega saab midagi teha Automator, kuid see on nii aeglane, et seda pole mugav kasutada isegi siis, kui see töötab. Samuti ei saanud ma seadistada klahvikombinatsioone nii, et need töötaksid kõigis programmides. Kui keegi leiab ootamatult lahenduse, kasutan seda hea meelega.

Selle asemel, et järeldus

Selgus, et sellise pealtnäha lihtsa funktsionaalsuse jaoks on see ootamatult palju sõnu. Tahtsin mõtet edasi anda ja teksti mitte üle koormata, aga pole veel aru saanud, kuidas seda lihtsamalt jutustada. Võib-olla oleks see parem videovormingus, kuid inimestele see siin ei meeldi.

Rääkisin veidi sellest, mis on skripti kapoti all ja kuidas seda konfigureerida. Ma ei laskunud stsenaariumi enda üksikasjadesse, kuid see on vaid 50 rida, nii et sellest pole raske aru saada.

Loodan, et keegi teine ​​proovib seda ideed ja võib-olla isegi hindab seda. Enda kohta võin öelda, et stsenaarium on kirjutatud umbes 3 aastat tagasi ja see on minu jaoks VÄGA mugav. Nii mugav, et tekitab teiste inimeste arvutitega töötamisel tõsist ebamugavust. Ja töötava MacBookiga.

Link skriptidele

Allikas: www.habr.com

Lisa kommentaar