Menaxhimi alternativ i dritareve në Linux

Unë jam një nga ata që vendos Caps Lock për të ndërruar paraqitjet, sepse jam shumë dembel të shtyp 2 taste kur mund të shtyp një. Unë madje do të doja 2 çelësa të panevojshëm: do të përdorja një për të aktivizuar paraqitjen në anglisht dhe të dytin për rusishten. Por çelësi i dytë i panevojshëm është thirrja e menysë së kontekstit, e cila është aq e panevojshme sa është prerë nga shumë prodhues të laptopëve. Kështu që ju duhet të jeni të kënaqur me atë që keni.

Dhe gjithashtu nuk dua të kërkoj ikonat e tyre në shiritin e detyrave kur ndërroj dritaret, ose të kap emrat kur lëviz nëpër Alt + Tab, lëviz nëpër desktop, etj. Dua të shtyp një kombinim tasti (në mënyrë ideale vetëm një, por nuk ka më çelësa të panevojshëm falas) dhe menjëherë të shkoj te dritarja që më nevojitet. Për shembull si kjo:

  • Alt+F: Firefox
  • Alt+D: Firefox (Shfletim privat)
  • Alt+T: Terminali
  • Alt+M: Llogaritësi
  • Alt+E: IntelliJ Idea
  • etj.

Për më tepër, duke shtypur, për shembull, në Alt+M Unë dua të shoh kalkulatorin pavarësisht nëse ky program po funksionon aktualisht. Nëse po funksionon, atëherë dritares së saj duhet t'i jepet fokus, dhe nëse jo, ekzekutoni programin e dëshiruar dhe transferoni fokusin kur të ngarkohet.

Për rastet që nuk mbulohen nga skripti i mëparshëm, unë dua të kem kombinime universale të çelësave që mund të caktohen lehtësisht në ndonjë nga dritaret e hapura. Për shembull, unë kam 10 kombinime të caktuara nga Alt + 1 tek Alt + 0, të cilat nuk janë të lidhura me asnjë program. Unë thjesht mund të klikoj Alt + 1 dhe dritarja që është aktualisht në fokus do të fokusohet kur klikohet Alt + 1.

Poshtë prerjes ka një përshkrim të disa veçorive të tjera dhe një përgjigje se si mund të bëhet kjo. Por unë do t'ju paralajmëroj menjëherë se një personalizim i tillë "për veten tuaj" mund të shkaktojë varësi të rëndë dhe madje tërheqje nëse keni nevojë të përdorni Windows, Mac OS apo edhe kompjuterin e dikujt tjetër me Linux.

Në fakt, nëse mendoni për këtë, ne nuk përdorim aq shumë programe në baza ditore. Një shfletues, një terminal, një IDE, një lloj mesazheri, një menaxher skedari, një kalkulator dhe, ndoshta, kjo është pothuajse e gjitha. Nuk nevojiten shumë kombinime kyçe për të mbuluar 95% të detyrave të përditshme.

Për programet që kanë disa dritare të hapura, njëra prej tyre mund të caktohet si kryesore. Për shembull, keni shumë dritare IntelliJ Idea të hapura dhe të caktuara Alt + E. Në kushte normale, kur shtypni Alt + E do të hapet një dritare e këtij programi, me shumë mundësi ajo që është hapur e para. Megjithatë, nëse klikoni mbi Alt + E kur njëra nga dritaret e këtij programi është tashmë në fokus, atëherë kjo dritare e veçantë do të caktohet si kryesore dhe do të jetë ajo që do t'i jepet fokusi kur të shtypen kombinimet e mëvonshme.

Dritarja kryesore mund të ricaktohet. Për ta bërë këtë, së pari duhet të rivendosni kombinimin dhe më pas t'i caktoni një dritare tjetër si dritare kryesore. Për të rivendosur një kombinim, duhet të shtypni vetë kombinimin dhe më pas një kombinim të veçantë rivendosjeje, unë e kam caktuar për Alt+Backspace. Kjo do të thërrasë një skript që do të anulojë caktimin e dritares kryesore për kombinimin e mëparshëm. Dhe pastaj mund të caktoni një dritare të re kryesore siç përshkruhet në paragrafin e mëparshëm. Rivendosja e një dritareje të lidhur me kombinimet universale ndodh në të njëjtën mënyrë.

Prezantimi doli i gjatë, por doja të tregoja fillimisht se çfarë do të bëjmë, dhe më pas të shpjegoja se si ta bëjmë atë.

Për ata që janë të lodhur nga leximi

Me pak fjalë, lidhja me skriptet është në fund të artikullit.

Por ju ende nuk do të jeni në gjendje ta instaloni dhe përdorni menjëherë. Së pari do të duhet të kuptoni se si skripti gjen dritaren e dëshiruar. Pa këtë, nuk do të jetë e mundur t'i tregohet skenarit se ku saktësisht duhet të transferohet fokusi. Dhe ju duhet të kuptoni se çfarë të bëni nëse papritmas nuk gjendet një dritare e përshtatshme.

Dhe nuk do të përqendrohem në mënyrën e konfigurimit të ekzekutimit të skripteve duke shtypur kombinimet e tasteve. Për shembull, në KDE është në Cilësimet e Sistemit → Shkurtoret → Shkurtoret e personalizuara. Ky duhet të jetë rasti edhe në menaxherët e tjerë të dritareve.

Prezantimi i wmctrl

Wmctrl — mjeti i konsolës për ndërveprim me X Window Manager. Ky është programi kryesor për skenarin. Le të hedhim një vështrim të shpejtë se si mund ta përdorni.

Së pari, le të shfaqim një listë të dritareve të hapura:

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

Opsioni -l shfaq një listë të të gjitha dritareve të hapura dhe -NNS shton emrin e klasës në dalje (skype.Skype, Navigator.Firefox etj). Këtu na duhet ID-ja e dritares (kolona 1), emri i klasës (kolona 3) dhe emri i dritares (kolona e fundit).

Mund të provoni të aktivizoni disa dritare duke përdorur opsionin -a:

$ wmctrl -a skype.Skype -x

Nëse gjithçka shkoi sipas planit, dritarja Skype duhet të shfaqet në ekran. Nëse në vend të opsionit -x opsioni i përdorimit -i, atëherë në vend të emrit të klasës mund të specifikoni ID-në e dritares. Problemi me ID-në është se id-i i dritares ndryshon sa herë që hapet aplikacioni dhe ne nuk mund ta dimë atë paraprakisht. Nga ana tjetër, ky atribut identifikon në mënyrë unike një dritare, e cila mund të jetë e rëndësishme kur një aplikacion hap më shumë se një dritare. Më shumë për këtë pak më tej.

Në këtë fazë duhet të kujtojmë se do të kërkojmë dritaren e dëshiruar duke përdorur regex sipas daljes wmctrl -lx. Por kjo nuk do të thotë që ne duhet të përdorim diçka të ndërlikuar. Zakonisht emri i klasës ose emri i dritares është i mjaftueshëm.

Në thelb, ideja kryesore duhet të jetë tashmë e qartë. Në cilësimet globale të tasteve/shkurtoreve për menaxherin tuaj të dritareve, konfiguroni kombinimin e kërkuar për të ekzekutuar skriptin.

Si të përdorni skriptet

Së pari ju duhet të instaloni shërbimet e konsolës wmctrl и xdotool:

$ sudo apt-get install wmctrl xdotool

Më pas ju duhet të shkarkoni skriptet dhe t'i shtoni ato $ PATH. Unë zakonisht i vendos ato ~/bin:

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

Nëse drejtoria ~/bin nuk ishte aty, atëherë duhet ta krijoni dhe të rindizni (ose të ri-login), përndryshe ~/bin nuk do të godasë $ PATH. Nëse gjithçka është bërë si duhet, atëherë skriptet duhet të jenë të aksesueshme nga tastiera dhe plotësimi i Tab duhet të funksionojë.

Skenari kryesor showwin merr 2 parametra: i pari është një regex, me të cilin do të kërkojmë dritaren e kërkuar, dhe parametri i dytë është një komandë që duhet të ekzekutohet nëse dritarja e kërkuar nuk gjendet.

Mund të provoni të ekzekutoni një skript, për shembull:

$ showwin "Mozilla Firefox$" firefox

Nëse Firefox-i është i instaluar, dritarja e tij duhet të fokusohet. Edhe nëse Firefox-i nuk po funksiononte, duhet të kishte nisur.

Nëse funksionon, atëherë mund të provoni të konfiguroni ekzekutimin e komandave në kombinime. Në cilësimet globale të tasteve/shkurtoreve shtoni:

  • Alt+F: showwin “Mozilla Firefox$” firefox
  • Alt+D: showwin "Mozilla Firefox (Shfletim Privat)$" "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” ide.sh

Etj. Të gjithë mund të konfigurojnë kombinimet e çelësave dhe softuerin sipas dëshirës.
Nëse gjithçka funksionoi si duhet, atëherë duke përdorur kombinimet e mësipërme do të jemi në gjendje të kalojmë midis dritareve thjesht duke shtypur tastet.

Do t'i zhgënjej dashamirësit e kromit: ai mund të dallojë në mënyrë të fshehtë një dritare të rregullt nga prodhimi i saj wmctrl Nuk mundesh, ata kanë të njëjtat emra klasash dhe tituj dritaresh. Në regex-in e propozuar, karakteret N* dhe I* nevojiten vetëm në mënyrë që këto shprehje të rregullta të ndryshojnë nga njëra-tjetra dhe të mund të caktohen si dritaret kryesore.

Për të rivendosur dritaren kryesore të kombinimit të mëparshëm (në fakt për regex, i cili showwin thirrur herën e fundit) ju duhet të telefononi skenarin showwinShkëputje. Unë e kam këtë skript të caktuar për një kombinim kyç Alt+Backspace.

Në skenar showwin ka edhe një funksion. Kur thirret me një parametër (në këtë rast parametri është vetëm një identifikues), ai nuk kontrollon fare regex-in, por i konsideron të gjitha dritaret si të përshtatshme. Në vetvete, kjo duket e padobishme, por në këtë mënyrë ne mund të caktojmë çdo dritare si kryesore dhe të kalojmë shpejt në atë dritare të veçantë.

Unë kam konfiguruar kombinimet e mëposhtme:

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

Në këtë mënyrë unë mund të lidh çdo dritare me kombinime Alt + 1...Alt + 0. Vetëm duke klikuar Alt + 1 Unë e lidh dritaren aktuale me këtë kombinim. Mund ta anuloj lidhjen duke klikuar Alt + 1, dhe pastaj Alt+Backspace. Ose mbyllni dritaren, kjo gjithashtu funksionon.

Më pas do t'ju tregoj disa detaje teknike. Ju nuk keni nevojë t'i lexoni ato, por thjesht përpiquni t'i vendosni dhe shikoni. Por unë përsëri do të rekomandoja të kuptoni skriptet e njerëzve të tjerë përpara se t'i ekzekutoni në kompjuterin tuaj :).

Si të dalloni dritaret e ndryshme të të njëjtit aplikacion

Në parim, shembulli i parë "wmctrl -a skype.Skype -x" ishte duke punuar dhe mund të përdoret. Por le të shohim përsëri shembullin me Firefox, në të cilin janë të hapura 2 dritare:

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

Dritarja e parë është në modalitetin normal dhe e dyta është Shfletimi Privat. Do të doja t'i konsideroja këto dritare si aplikacione të ndryshme dhe të kaloj në to duke përdorur kombinime të ndryshme të çelësave.

Është e nevojshme të komplikohet skripti që ndërron dritaret. Kam përdorur këtë zgjidhje: shfaq një listë të të gjitha dritareve, bëje grep nga regex, merrni rreshtin e parë me kokë, merrni kolonën e parë (kjo do të jetë id i dritares) duke përdorur prerë, kaloni në dritare me id.

Duhet të ketë një shaka për shprehjet e rregullta dhe dy probleme, por në fakt nuk po përdor asgjë të komplikuar. Më duhen shprehje të rregullta që të mund të tregoj fundin e rreshtit (simbolin “$”) dhe të dalloj “Mozilla Firefox$” nga “Mozilla Firefox (Shfletim Privat)$”.

Komanda duket diçka si kjo:

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

Këtu tashmë mund të mendoni për veçorinë e dytë të skriptit: nëse grep nuk kthen asgjë, atëherë aplikacioni i dëshiruar nuk është i hapur dhe duhet ta filloni duke ekzekutuar komandën nga parametri i dytë. Dhe pastaj kontrolloni periodikisht nëse dritarja e kërkuar është hapur në mënyrë që të transferoni fokusin në të. Nuk do të përqendrohem në këtë; kushdo që ka nevojë do të shikojë burimet.

Kur dritaret e aplikacionit nuk dallohen

Pra, ne kemi mësuar se si të transferojmë fokusin në dritaren e aplikacionit të dëshiruar. Por çka nëse një aplikacion ka më shumë se një dritare të hapur? Cilit duhet t'i kushtoj fokus? Skripti i mësipërm ka shumë të ngjarë të transferohet në dritaren e parë të hapur. Megjithatë, ne do të donim më shumë fleksibilitet. Do të doja të jem në gjendje të mbaj mend se cila dritare na nevojitet dhe të kaloj në atë dritare të veçantë.

Ideja ishte kjo: Nëse duam të kujtojmë një dritare specifike për një kombinim të tasteve, atëherë duhet të shtypim këtë kombinim kur dritarja e dëshiruar është në fokus. Në të ardhmen, kur të shtypni këtë kombinim, fokusi do t'i jepet kësaj dritareje. Derisa të mbyllet dritarja ose të bëjmë një rivendosje për këtë kombinim skripti showwinShkëputje.

Algoritmi i skriptit showwin diçka si kjo:

  • Kontrolloni nëse e kemi mbajtur mend më parë ID-në e dritares në të cilën duhet të transferohet fokusi.
    Nëse ju kujtohet dhe një dritare e tillë ekziston ende, atëherë ne transferojmë fokusin në të dhe dalim.
  • Ne shikojmë se cila dritare është aktualisht në fokus, dhe nëse përputhet me kërkesën tonë, atëherë mbani mend ID-në e saj për të shkuar tek ajo në të ardhmen dhe për të dalë.
  • Shkojmë në të paktën një dritare të përshtatshme nëse ekziston ose hapim aplikacionin e dëshiruar.

Ju mund të zbuloni se cila dritare është aktualisht në fokus duke përdorur programin e konsolës xdotool duke e kthyer daljen e saj në format heksadecimal:

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

Mënyra më e lehtë për të kujtuar diçka në bash është krijimi i skedarëve në një sistem skedarësh virtual të vendosur në memorie. Në Ubuntu kjo është aktivizuar si parazgjedhje në /dev/shm/. Nuk mund të them asgjë për shpërndarjet e tjera, shpresoj që të ketë edhe diçka të ngjashme. Mund të shikoni me komandën:

$ mount -l | grep tmpfs

Skripti do të krijojë drejtori boshe në këtë dosje, si kjo: /dev/shm/$USER/showwin/$SEARCH_REGEX/$WINDOW_ID. Për më tepër, sa herë që thirret do të krijojë një lidhje simbolike /dev/shm/$USER/showwin/showwin_last mbi /dev/shm/$USER/showwin/$SEARCH_REGEX. Kjo do të jetë e nevojshme për të hequr, nëse është e nevojshme, ID-në e dritares për një kombinim të caktuar duke përdorur një skript showwinShkëputje.

Çfarë mund të përmirësohet

Së pari, skriptet duhet të konfigurohen manualisht. Me siguri, për shkak të nevojës për të gërmuar dhe për të bërë shumë me duart tuaja, shumë prej jush as nuk do të përpiqen të konfigurojnë sistemin. Nëse do të ishte e mundur thjesht të instaloni paketën dhe të konfiguroni gjithçka më lehtë, atëherë ndoshta do të fitonte një popullaritet. Dhe pastaj shikoni, aplikacioni do të lëshohej në shpërndarje standarde.

Dhe ndoshta mund të bëhet më lehtë. Nëse me ID-në e një dritareje mund të zbuloni ID-në e procesit që e ka krijuar atë, dhe me ID-në e procesit mund të zbuloni se cila komandë e ka krijuar atë, atëherë do të ishte e mundur të automatizoni konfigurimin. Në fakt, nuk e kuptova nëse ajo që shkrova në këtë paragraf ishte e mundur. Fakti është se unë personalisht jam i kënaqur me mënyrën se si funksionon tani. Por nëse dikush tjetër përveç meje e sheh të përshtatshme të gjithë qasjen dhe dikush e përmirëson atë, atëherë do të jem i lumtur të përdor një zgjidhje më të mirë.

Një problem tjetër, siç kam shkruar tashmë, është se në disa raste dritaret nuk mund të dallohen nga njëra-tjetra. Deri më tani këtë e kam vërejtur vetëm me inkognito në krom/krom, por ndoshta ka diçka të ngjashme diku tjetër. Si mjet i fundit, ekziston gjithmonë opsioni i kombinimeve universale Alt + 1...Alt + 0. Përsëri, unë përdor Firefox dhe për mua personalisht ky problem nuk është i rëndësishëm.

Por problemi i rëndësishëm për mua është se unë përdor Mac OS për punë dhe nuk mund të konfiguroja diçka të tillë atje. dobia wmctrl Unë mendoj se kam qenë në gjendje ta instaloj atë, por në të vërtetë nuk funksionon në Mac OS. Diçka mund të bëhet me aplikacionin Automator, por është aq i ngadalshëm sa nuk është i përshtatshëm për t'u përdorur edhe kur është duke punuar. Unë gjithashtu nuk mund të vendosja kombinimet e tasteve në mënyrë që ato të funksiononin në të gjitha programet. Nëse dikush vjen papritur me një zgjidhje, unë do të jem i lumtur ta përdor atë.

Në vend të një përfundimi

Doli të ishte një numër i papritur i madh fjalësh për një funksionalitet kaq të thjeshtë në dukje. Doja të përcillja idenë dhe të mos e mbingarkoja tekstin, por ende nuk e kam kuptuar se si ta tregoj më thjeshtë. Ndoshta do të ishte më mirë në format video, por njerëzve nuk u pëlqen kështu këtu.

Unë fola pak për atë që është nën kapuçin e skenarit dhe si ta konfiguroni atë. Nuk hyra në detaje të vetë skenarit, por është vetëm 50 rreshta, kështu që nuk është e vështirë për t'u kuptuar.

Shpresoj që dikush tjetër ta provojë këtë ide dhe ndoshta edhe ta vlerësojë atë. Mund të them për veten time se skenari është shkruar rreth 3 vjet më parë dhe është shumë i përshtatshëm për mua. Aq i përshtatshëm sa shkakton shqetësim serioz kur punoni me kompjuterët e njerëzve të tjerë. Dhe me një MacBook që funksionon.

Lidhje me skriptet

Burimi: www.habr.com

Shto një koment