Önnur gluggastjórnun í Linux

Ég er einn af þeim sem stillir Caps Lock til að skipta um skipulag því ég er of latur til að ýta á 2 takka þegar ég get ýtt á einn. Ég myndi jafnvel vilja 2 óþarfa lykla: Ég myndi nota einn til að kveikja á ensku útlitinu og hinn fyrir rússnesku. En annar óþarfi lykillinn er að kalla fram samhengisvalmyndina, sem er svo óþarfi að margir fartölvuframleiðendur klippa hana út. Svo þú verður að vera sáttur við það sem þú hefur.

Og ég vil heldur ekki leita að táknum þeirra á verkefnastikunni þegar skipt er um glugga, eða ná nöfnunum þegar ég flettir í gegnum Alt + Tab, fletta í gegnum skjáborð osfrv. Ég vil ýta á takkasamsetningu (helst bara einn, en það eru engir ókeypis óþarfa takkar lengur) og komast strax að glugganum sem ég þarf. Til dæmis svona:

  • Alt+F: Firefox
  • Alt+D: Firefox (einkaleit)
  • Alt+T: Terminal
  • Alt+M: Reiknivél
  • Alt+E: IntelliJ hugmynd
  • o.s.frv.

Þar að auki, með því að ýta á, til dæmis, á Alt+M Ég vil sjá reiknivélina óháð því hvort þetta forrit er í gangi. Ef það er í gangi, þá þarf að gefa glugganum fókus, og ef ekki, keyrðu forritið sem þú vilt og flyttu fókusinn þegar það hleðst inn.

Fyrir tilvik sem ekki falla undir fyrri skriftu, vil ég hafa alhliða lyklasamsetningar sem auðvelt er að tengja við hvaða opna glugga sem er. Til dæmis hef ég 10 samsetningar úthlutaðar frá Alt + 1 í Alt + 0, sem eru ekki bundin neinum forritum. Ég get bara klikkað Alt + 1 og glugginn sem er í fókus mun fá fókus þegar smellt er á hann Alt + 1.

Fyrir neðan klippuna er lýsing á nokkrum eiginleikum í viðbót og svar við því hvernig þetta er hægt að gera. En ég mun strax vara þig við því að slík aðlögun „fyrir sjálfan þig“ getur valdið alvarlegri fíkn og jafnvel afturköllun ef þú þarft að nota Windows, Mac OS eða jafnvel tölvu einhvers annars með Linux.

Reyndar, ef þú hugsar um það, þá notum við ekki svo mörg forrit daglega. Vafri, flugstöð, IDE, einhvers konar boðberi, skráarstjóri, reiknivél og kannski það er næstum allt. Það eru ekki margar lyklasamsetningar sem þarf til að ná yfir 95% hversdagslegra verkefna.

Fyrir forrit sem hafa nokkra glugga opna er hægt að tilgreina einn þeirra sem aðal. Til dæmis ertu með marga IntelliJ Idea glugga opna og úthlutað til Alt + E. Við venjulegar aðstæður, þegar þú ýtir á Alt + E einhver gluggi á þessu forriti opnast, líklega sá sem var opnaður fyrst. Hins vegar, ef þú smellir á Alt + E þegar einn af gluggum þessa forrits er þegar í fókus, þá verður þessum tiltekna glugga úthlutað sem aðalglugganum og það verður sá sem verður gefinn fókus þegar ýtt er á síðari samsetningar.

Hægt er að endurúthluta aðalglugganum. Til að gera þetta verður þú fyrst að endurstilla samsetninguna og úthluta henni síðan öðrum glugga sem aðalglugga. Til að endurstilla samsetningu þarftu að ýta á samsetninguna sjálfa og svo sérstaka endurstillingarsamsetningu, ég hef það úthlutað til Alt+Backspace. Þetta kallar á skriftu sem mun fjarlægja aðalgluggann fyrir fyrri samsetningu. Og þá geturðu úthlutað nýjum aðalglugga eins og lýst er í fyrri málsgrein. Endurstilling á tengdum glugga á alhliða samsetningar á sér stað á sama hátt.

Kynningin reyndist langur en mig langaði fyrst að segja hvað við munum gera og útskýra síðan hvernig á að gera það.

Fyrir þá sem eru orðnir þreyttir á að lesa

Í stuttu máli er hlekkurinn á handritin aftast í greininni.

En þú munt samt ekki geta sett upp og notað það strax. Þú verður fyrst að finna út hvernig handritið finnur þann glugga sem þú vilt. Án þessa verður ekki hægt að segja handritinu hvert nákvæmlega þarf að flytja fókusinn. Og þú þarft að skilja hvað á að gera ef skyndilega finnst ekki hentugur gluggi.

Og ég mun ekki einbeita mér að því hvernig á að stilla framkvæmd skrifta með því að ýta á takkasamsetningar. Til dæmis, í KDE er það í Kerfisstillingum → Flýtileiðir → Sérsniðnar flýtileiðir. Þetta ætti líka að vera raunin í öðrum gluggastýrum.

Við kynnum wmctrl

Wmctrl - huggaforrit til að hafa samskipti við X Window Manager. Þetta er lykilforritið fyrir handritið. Við skulum líta fljótt á hvernig þú getur notað það.

Fyrst skulum við sýna lista yfir opna glugga:

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

Valkostur -l sýnir lista yfir alla opna glugga, og -NS bætir flokksheitinu við úttakið (skype.Skype, Navigator.Firefox osfrv). Hér þurfum við auðkenni glugga (dálkur 1), heiti flokks (dálkur 3) og nafn glugga (síðasti dálkur).

Þú getur reynt að virkja einhvern glugga með því að nota valkostinn -a:

$ wmctrl -a skype.Skype -x

Ef allt gekk að óskum ætti Skype glugginn að birtast á skjánum. Ef í staðinn fyrir valmöguleikann -x nota valmöguleika -i, þá geturðu tilgreint auðkenni gluggans í staðinn fyrir flokksheitið. Vandamálið með auðkenni er að gluggaauðkennið breytist í hvert skipti sem forritið er ræst og við getum ekki vitað það fyrirfram. Aftur á móti auðkennir þessi eiginleiki glugga, sem getur verið mikilvægt þegar forrit opnar fleiri en einn glugga. Meira um þetta aðeins lengra.

Á þessu stigi þurfum við að muna að við munum leita að viðkomandi glugga með því að nota regex eftir úttak wmctrl -lx. En það þýðir ekki að við þurfum að nota eitthvað flókið. Venjulega nægir flokksnafnið eða glugganafnið.

Í grundvallaratriðum ætti meginhugmyndin nú þegar að vera skýr. Í alþjóðlegum flýtilyklum/flýtileiðum stillingum fyrir gluggastjórann þinn skaltu stilla nauðsynlega samsetningu til að keyra skriftuna.

Hvernig á að nota forskriftir

Fyrst þarftu að setja upp console tól wmctrl и xdotool:

$ sudo apt-get install wmctrl xdotool

Næst þarftu að hlaða niður skriftunum og bæta þeim við $ PATH. Ég set þær venjulega inn ~/bin:

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

Ef skráin ~/bin var ekki til staðar, þá þarftu að búa það til og endurræsa (eða skrá þig inn aftur), annars ~/bin mun ekki slá $ PATH. Ef allt er gert á réttan hátt, þá ættu forskriftirnar að vera aðgengilegar frá stjórnborðinu og flipaútfylling ætti að virka.

Aðalhandrit showwin tekur 2 færibreytur: sú fyrri er regex, þar sem við munum leita að nauðsynlegum glugga, og önnur færibreytan er skipun sem þarf að framkvæma ef tilskilinn gluggi finnst ekki.

Þú getur prófað að keyra skriftu, til dæmis:

$ showwin "Mozilla Firefox$" firefox

Ef Firefox er uppsett ætti gluggi hans að vera í brennidepli. Jafnvel þó að Firefox væri ekki í gangi ætti hann að hafa byrjað.

Ef það virkar, þá geturðu reynt að stilla framkvæmd skipana á samsetningum. Í alþjóðlegu flýtilyklastillingunum bættu við:

  • 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

O.s.frv. Allir geta stillt lyklasamsetningar og hugbúnað eins og þeim sýnist.
Ef allt virkaði rétt, þá með því að nota ofangreindar samsetningar munum við geta skipt á milli glugga með því einfaldlega að ýta á takkana.

Ég mun valda krómunnendum vonbrigðum: það getur hulið aðgreiningu á venjulegum glugga með framleiðslu sinni wmctrl Þú getur það ekki, þeir hafa sömu flokksnöfn og gluggatitla. Í fyrirhugaðri regex er aðeins þörf á stöfunum N* og I* til að þessar reglulegu tjáningar séu frábrugðnar hver öðrum og hægt sé að úthluta þeim sem aðalgluggum.

Til að endurstilla aðalglugga fyrri samsetningar (í raun fyrir regex, sem showwin hringdi síðast) þú þarft að hringja í handritið showwinTaka úr. Ég er með þetta handrit úthlutað við lyklasamsetningu Alt+Backspace.

Við handritið showwin það er eitt hlutverk í viðbót. Þegar það er kallað með einni færibreytu (í þessu tilfelli er færibreytan bara auðkenni) athugar hún alls ekki regex, heldur telur alla glugga henta. Í sjálfu sér virðist þetta gagnslaust, en á þennan hátt getum við tilnefnt hvaða glugga sem er sem aðal og fljótt skipt yfir í þann tiltekna glugga.

Ég er með eftirfarandi samsetningar stilltar:

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

Þannig get ég bundið hvaða glugga sem er við samsetningar Alt + 1...Alt + 0. Bara með því að smella Alt + 1 Ég bind núverandi glugga við þessa samsetningu. Ég get hætt við bindinguna með því að smella Alt + 1og þá Alt+Backspace. Eða lokaðu glugganum, það virkar líka.

Næst mun ég segja þér nokkrar tæknilegar upplýsingar. Þú þarft ekki að lesa þau, en reyndu bara að setja þau upp og sjáðu. En ég myndi samt mæla með því að skilja forskriftir annarra áður en þú keyrir þau á tölvunni þinni :).

Hvernig á að greina á milli mismunandi glugga í sama forriti

Í grundvallaratriðum var fyrsta dæmið „wmctrl -a skype.Skype -x“ að virka og hægt að nota það. En við skulum líta aftur á dæmið með Firefox, þar sem 2 gluggar eru opnir:

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

Fyrsti glugginn er venjulegur hamur og sá seinni er einkavafur. Mig langar að líta á þessa glugga sem mismunandi forrit og skipta yfir í þá með mismunandi takkasamsetningum.

Nauðsynlegt er að flækja skriftuna sem skiptir um glugga. Ég notaði þessa lausn: birta lista yfir alla glugga, gerðu það grep með regex, taktu fyrstu línuna með höfuð, fáðu fyrsta dálkinn (þetta verður auðkenni gluggans) með því að nota skera, skiptu yfir í glugga eftir auðkenni.

Það ætti að vera brandari um reglubundnar tjáningar og tvö vandamál, en í raun er ég ekki að nota neitt flókið. Ég þarf reglulegar tjáningar svo að ég geti gefið til kynna lok línunnar („$“ táknið) og aðgreint „Mozilla Firefox$“ frá „Mozilla Firefox (Private Browsing)$“.

Skipunin lítur einhvern veginn svona út:

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

Hér geturðu nú þegar giskað á annan eiginleika handritsins: ef grep skilar engu, þá er viðkomandi forrit ekki opið og þú þarft að ræsa það með því að framkvæma skipunina frá annarri færibreytunni. Og athugaðu síðan reglulega hvort tilskilinn gluggi hafi opnast til að flytja fókus á hann. Ég mun ekki einblína á þetta; allir sem þurfa á því að halda munu skoða heimildirnar.

Þegar forritsgluggar eru ekki aðgreindir

Svo við höfum lært hvernig á að flytja fókus í gluggann á viðkomandi forriti. En hvað ef forrit er með fleiri en einn glugga opinn? Hverjum ætti ég að leggja áherslu á? Handritið hér að ofan mun líklega flytjast í fyrsta opna gluggann. Hins vegar viljum við hafa meiri sveigjanleika. Ég myndi vilja geta munað hvaða glugga við þurfum og skipt yfir í þann glugga.

Hugmyndin var þessi: Ef við viljum muna ákveðinn glugga fyrir lyklasamsetningu, þá þurfum við að ýta á þessa samsetningu þegar viðkomandi gluggi er í fókus. Í framtíðinni, þegar þú ýtir á þessa samsetningu, verður fókusinn gefinn á þessum glugga. Þar til glugginn lokar eða við endurstillum þessa skriftusamsetningu showwinTaka úr.

Script reiknirit showwin eitthvað eins og þetta:

  • Athugaðu hvort við höfum áður munað auðkenni gluggans sem fókus ætti að flytja til.
    Ef þú manst eftir því og slíkur gluggi er enn til, þá flytjum við fókus á hann og förum út.
  • Við skoðum hvaða gluggi er í brennidepli og ef hann passar við beiðni okkar, mundu eftir auðkenni hans til að fara í hann í framtíðinni og hætta.
  • Við förum að minnsta kosti í einhvern hentugan glugga ef hann er til eða opnum viðkomandi forrit.

Þú getur komist að því hvaða gluggi er í brennidepli með því að nota xdotool console tólið með því að umbreyta úttakinu í sextánskur snið:

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

Auðveldasta leiðin til að muna eitthvað í bash er að búa til skrár í sýndarskráakerfi sem staðsett er í minni. Í Ubuntu er þetta sjálfgefið virkt í /dev/shm/. Ég get ekki sagt neitt um aðrar dreifingar, ég vona að það sé eitthvað svipað líka. Þú getur skoðað með skipuninni:

$ mount -l | grep tmpfs

Handritið mun búa til tómar möppur í þessari möppu, svona: /dev/shm/$USER/showwin/$SEARCH_REGEX/$WINDOW_ID. Að auki, í hvert skipti sem það er kallað mun það búa til táknhlekk /dev/shm/$USER/showwin/showwin_last á /dev/shm/$USER/showwin/$SEARCH_REGEX. Þetta mun vera nauðsynlegt til að, ef nauðsyn krefur, fjarlægja gluggaauðkenni fyrir ákveðna samsetningu með því að nota skriftu showwinTaka úr.

Hvað má bæta

Í fyrsta lagi verður að stilla forskriftirnar handvirkt. Vissulega, vegna þess að þú þarft að kafa ofan í og ​​gera mikið með höndum þínum, munu mörg ykkar ekki einu sinni reyna að stilla kerfið. Ef það væri hægt að einfaldlega setja upp pakkann og stilla allt auðveldara, þá myndi það kannski ná einhverjum vinsældum. Og sjáðu síðan, forritið yrði gefið út í staðlaða dreifingu.

Og kannski er hægt að gera það auðveldara. Ef með auðkenni glugga er hægt að finna út auðkenni ferlisins sem bjó það til og með auðkenni ferlisins geturðu fundið út hvaða skipun bjó það til, þá væri hægt að gera uppsetninguna sjálfvirkan. Reyndar skildi ég ekki hvort það sem ég skrifaði í þessari málsgrein væri hægt. Staðreyndin er sú að ég persónulega er ánægður með hvernig þetta virkar núna. En ef einhverjum öðrum en mér finnst öll nálgunin hentug og einhver bætir hana, þá mun ég glaður nota betri lausn.

Annað vandamál, eins og ég skrifaði þegar, er að í sumum tilfellum er ekki hægt að greina gluggana hver frá öðrum. Hingað til hef ég aðeins fylgst með þessu með huliðsstillingu í króm/króm, en kannski er eitthvað svipað annars staðar. Sem síðasta úrræði er alltaf möguleiki á alhliða samsetningum Alt + 1...Alt + 0. Aftur, ég nota Firefox og fyrir mig persónulega er þetta vandamál ekki verulegt.

En mikilvæga vandamálið fyrir mig er að ég nota Mac OS í vinnunni og ég gat ekki stillt neitt slíkt þar. gagnsemi wmctrl Ég held að ég hafi getað sett það upp, en það virkar í raun ekki á Mac OS. Eitthvað er hægt að gera með forritinu Automator, en það er svo hægt að það er ekki þægilegt í notkun jafnvel þegar það er að virka. Ég gat heldur ekki sett upp lyklasamsetningar þannig að þær virkuðu í öllum forritum. Ef einhver kemur skyndilega með lausn, mun ég vera glaður að nota hana.

Í stað þess að niðurstöðu

Það reyndist vera óvænt mikill fjöldi orða fyrir svo einfalda virkni. Ég vildi koma hugmyndinni á framfæri og ekki ofhlaða textanum, en ég hef ekki enn fundið út hvernig ég á að segja það á einfaldari hátt. Kannski væri það betra í myndbandsformi, en fólki líkar það ekki þannig hér.

Ég talaði aðeins um hvað er undir hettunni á handritinu og hvernig á að stilla það. Ég fór ekki í smáatriði um handritið sjálft, en það er aðeins 50 línur, svo það er ekki erfitt að skilja það.

Ég vona að einhver annar reyni þessa hugmynd og kann jafnvel að meta hana. Ég get sagt um sjálfan mig að handritið var skrifað fyrir um 3 árum síðan og það er MJÖG þægilegt fyrir mig. Svo þægilegt að það veldur alvarlegum óþægindum þegar unnið er með tölvur annarra. Og með virka MacBook.

Tengill á handrit

Heimild: www.habr.com

Bæta við athugasemd