{"id":55206,"date":"2020-01-15T00:00:00","date_gmt":"2020-01-14T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/alternativnoe-upravlenie-oknami-v-linux"},"modified":"2020-02-18T14:03:18","modified_gmt":"2020-02-18T11:03:18","slug":"alternativnoe-upravlenie-oknami-v-linux","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","title":{"rendered":"Alternatiivne aknahaldus Linuxis","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ma olen see, kes paneb Caps Lock'i keelevahetuseks, sest on liiga laisk, et vajutada kahte nuppu, kui v\u00f5ib vajutada \u00fchte. Ma sooviks isegi kaht ebavajalikku nuppu: \u00fchte kasutaksin ingliskeelse klaviatuuri jaoks ja teist venekeelse jaoks. Kuid teine ebavajalik nupp on konteksti men\u00fc\u00fc kutsumine, mis on nii vajalik, et paljusid s\u00fclearvuti tootjaid h\u00e4irib see. Seega tuleb leppida sellega, mis on. <\/p>\n<p><\/p>\n<p>Ja ma ei taha ka akende vahetamisel nende ikoone tegumiribal otsida, \u00fcritades silmadega tabada nimesid kerimise kaudu <em>, mis ei ole eriti mugav.<\/em>, kerida t\u00f6\u00f6lauale jne. Ma tahan vajutada klahvikombinatsiooni (ideaalis \u00fche, kuid vabu ebavajalikke klahve enam pole) ja kohe siseneda vajaliku aknaga. N\u00e4iteks nii:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+F: Firefox<\/li>\n<li>Alt+D: Firefox (Privaatsusre\u017eiim)<\/li>\n<li>Alt+T: Terminal<\/li>\n<li>Alt+M: Kalkulaator<\/li>\n<li>Alt+E: IntelliJ Idea<\/li>\n<li>jne.<\/li>\n<\/ul>\n<p><\/p>\n<p>Ja vajutades n\u00e4iteks <em>Alt+M<\/em> , tahan n\u00e4ha kalkulaatorit s\u00f5ltumata 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.<\/p>\n<p><\/p>\n<p>Juhtudel, mida eelnev stsenaarium ei kata, tahan, et mul oleks universaalsed klahvikombinatsioonid, millele on lihtne m\u00e4\u00e4rata mis tahes avatud aknad. N\u00e4iteks olen m\u00e4\u00e4ranud 10 kombinatsiooni alates <em>Alt+1<\/em> kuni <em>Alt+0<\/em>, mis ei ole seotud \u00fchegi programmiga. Ma v\u00f5in lihtsalt vajutada <em>Alt+1<\/em> , ja aknal, mis praegu on fookuses, hakkab fookus toimuma, kui vajutada <em>Alt+1<\/em>.<\/p>\n<p><\/p>\n<p>Allpool on kirjeldatud veel paar funktsiooni ja vastus k\u00fcsimusele, kuidas seda teha. Kuid kohe t\u00e4psustan, et selline kohandamine \"enda jaoks\" v\u00f5ib tekitada tugevat s\u00f5ltuvust ja isegi v\u00f5\u00f5rutuss\u00fcmptomeid, kui tuleb kasutada Windowsi, Mac OS-i v\u00f5i isegi kellegi teise Linuxi arvutit.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Tegelikult, kui m\u00f5elda, siis me ei kasuta igap\u00e4evaselt nii palju programme. Brauser, terminal, IDE, m\u00f5ni s\u00f5numside rakendus, failihaldur, kalkulaator ja ilmselt ongi k\u00f5ik. Vajalik on vaid v\u00e4he klahvikombinatsioone, et katta 95% igap\u00e4evastest \u00fclesannetest.<\/p>\n<p><\/p>\n<p>Programmide puhul, millel on avatud mitu akent, v\u00f5ib \u00fcks neist m\u00e4\u00e4rata peamiseks. N\u00e4iteks, kui on avatud mitu IntelliJ Idea akent, mis on m\u00e4\u00e4ratud <em>Alt+E<\/em>. Tavalistes tingimustes, kui vajutada <em>Alt+E<\/em> , avatakse mingi selle programmi aken, mis t\u00f5en\u00e4oliselt oli avatud esimesena. Kuid kui vajutada <em>Alt+E<\/em> kui \u00fcks selle programmi akendest on juba fookuses, siis m\u00e4\u00e4ratakse see aken peamiseks ja just sellele antakse fookus j\u00e4rgmiste kombinatsioonide vajutamisel. <\/p>\n<p><\/p>\n<p>Peaaken saab \u00fcmber m\u00e4\u00e4rata. Selleks tuleb esmalt kombinatsioon nullida ja seej\u00e4rel m\u00e4\u00e4rata sellele peamiseks teine aken. Kombinatsiooni nullimiseks tuleb vajutada ise kombinatsiooni ja seej\u00e4rel spetsiaalset nullimise kombinatsiooni, mis mul on m\u00e4\u00e4ratud <em>Alt+Backspace<\/em>. See kutsub esile skripti, mis t\u00fchistab eelneva kombinatsiooni peamise akna m\u00e4\u00e4ramise. Edasi saab m\u00e4\u00e4rata uue peamise akna nagu eelnevas l\u00f5igus kirjeldatud. Seotud akna l\u00e4htestamine universaalsete kombinatsioonide jaoks toimub samamoodi.<\/p>\n<p><\/p>\n<p>Sissejuhatus tuli pikk, kuid tahtsin k\u00f5igepealt r\u00e4\u00e4kida, mida me teeme, ja siis seletada, kuidas seda teha.<\/p>\n<p><\/p>\n<h2 id=\"dlya-teh-komu-nadoelo-chitat\">Neile, kellele lugemine juba igav on<\/h2>\n<p><\/p>\n<p>L\u00fchidalt \u00f6eldes on skriptide link artikli l\u00f5pus.<\/p>\n<p><\/p>\n<p>Kuid kohe installida ja kasutada ei \u00f5nnestu. 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.<\/p>\n<p><\/p>\n<p>Ja ma ei kavatse keskenduda sellele, kuidas seadistada skriptide k\u00e4ivitamist klahvikombinatsioonide vajutamisel. N\u00e4iteks KDE-s on see System Settings \u2192 Shortcuts \u2192 Custom Shortcuts. Teistes aknahaldurites peaks ka seda olema.<\/p>\n<p><\/p>\n<h2 id=\"znakomstvo-s-wmctrl\">Tutvumine wmctrl-iga<\/h2>\n<p><\/p>\n<p><em>Wmctrl<\/em> \u2014 k\u00e4sklust\u00f6\u00f6riist X Window Manageriga suhtlemiseks. See on skripti jaoks v\u00f5tmeprogramm. Vaatame kiirutades, kuidas seda kasutada.<\/p>\n<p><\/p>\n<p>Esmalt t\u00f5stame esile avatud akende nimekirja:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ wmctrl -lx\n0x01e0000e -1 plasmashell.plasmashell             N\/A Desktop \u2014 Plasma\n0x01e0001e -1 plasmashell.plasmashell             N\/A Plasma\n0x03a00001  0 skype.Skype                         N\/A Skype\n0x04400003  0 Navigator.Firefox                   N\/A Google T\u00f5lkija - Mozilla Firefox\n0x04400218  0 Navigator.Firefox                   N\/A Parimad postitused p\u00e4eva jooksul \/ Habr - Mozilla Firefox (Privaatses sirvimises)\n...<\/code><\/pre>\n<p><\/p>\n<p>Valik <em>\u00f5pivad<\/em> toob esile k\u00f5igi avatud akende nimekirja, ja <em>-x<\/em> lisab v\u00e4ljundisse klassi nime (<em>skype.Skype<\/em>, <em>Navigator.Firefox<\/em> jne). Meile on vajalik akna id (1. veerg), klassi nimi (3. veerg) ja akna nimi (viimane veerg).<\/p>\n<p><\/p>\n<p>Saame proovida aktiveerida m\u00f5nda akent valiku abil <em>-a<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ wmctrl -a skype.Skype -x<\/code><\/pre>\n<p><\/p>\n<p>Kui k\u00f5ik l\u00e4ks plaanip\u00e4raselt, siis peaks ekraanile ilmuma Skype'i aken. Kui valiku asemel <em>-x<\/em> kasutada valikut <em>-i<\/em>, siis klassi nime asemel saab kasutada akna id. Id probleemiks on, et akna id muutub iga rakenduse k\u00e4ivitamise ajal ja me ei saa seda ette teada. Teisalt osutab see atribuut \u00fchem\u00f5tteliselt aknale, mis v\u00f5ib olla oluline, kui rakendus avab rohkem kui \u00fche akna. Selle kohta r\u00e4\u00e4gime veidi hiljem.<\/p>\n<p><\/p>\n<p>Selles etapis peame meeles pidama, et otsime vajalikke aknaid regexi abil v\u00e4ljundist <em>wmctrl -lx<\/em>. Kuid see ei t\u00e4henda, et peame alati midagi keerulist kasutama. Tavaline on piisav klassi nimi v\u00f5i akna pealkiri. <\/p>\n<p><\/p>\n<p>P\u00f5him\u00f5tteliselt peaks peamine idee olema juba selge. Teie aknahalduri globaalsete hotkeyde\/l\u00fchikeste v\u00f5tmete seadetes seadistame vajaliku kombinatsiooni skripti k\u00e4ivitamiseks.<\/p>\n<p><\/p>\n<h2 id=\"kak-polzovatsya-skriptami\">Kuidas skripte kasutada<\/h2>\n<p><\/p>\n<p>K\u00f5igepealt peate installima konsooliharjutused <em>wmctrl<\/em> ja <em>xdotool<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ sudo apt-get install wmctrl xdotool<\/code><\/pre>\n<p><\/p>\n<p>Seej\u00e4rel peate skriptid alla laadima ja need lisama <em>$PATH<\/em>. Ma tavaliselt panen need <em>~\/bin<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cd ~\/bin\n$ git clone https:\/\/github.com\/masyamandev\/Showwin-script.git\n$ ln -s .\/Showwin-script\/showwin showwin\n$ ln -s .\/Showwin-script\/showwinDetach showwinDetach<\/code><\/pre>\n<p><\/p>\n<p>Kui katalooge <em>~\/bin<\/em> ei olnud, siis tuleb see luua ja uuesti sisse logida (v\u00f5i uuesti siseneda), vastasel juhul <em>~\/bin<\/em> ei j\u00f5ua <em>$PATH<\/em>. Kui k\u00f5ik on tehtud \u00f5igesti, peaksid skriptid olema konsoolist k\u00e4ttesaadavad ja Tab-klahvil peaks olema t\u00e4iendamine.<\/p>\n<p><\/p>\n<p>P\u00f5hiskript <strong>showwin<\/strong> v\u00f5tab vastu 2 parameetrit: esimene on regex, mille p\u00f5hjal otsime vajalikke aknaid, ja teine parameeter on k\u00e4sk, mida tuleks t\u00e4ita, kui vajalikke aknaid ei leita. <\/p>\n<p><\/p>\n<p>V\u00f5ite proovida skripti k\u00e4ivitada, n\u00e4iteks:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ showwin \"Mozilla Firefox$\" firefox<\/code><\/pre>\n<p><\/p>\n<p>Kui Firefox on installitud, peaks aknale olema antud fookus. Ieven, kui Firefox ei olnud k\u00e4ivitatud, peaks see k\u00e4ivituma.<\/p>\n<p><\/p>\n<p>Kui see \u00f5nnestus, siis v\u00f5ite proovida seadistada k\u00e4skude t\u00e4itmist kombinatsioonidele. Globaalsete hotkeyde\/l\u00fchikeste v\u00f5tmete seadetes lisame:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+F: showwin &#171;Mozilla Firefox$&#187; firefox<\/li>\n<li>Alt+D: showwin &#171;Mozilla Firefox (Private Browsing)$&#187; &#171;firefox -private-window&#187;<\/li>\n<li>Alt+C: showwin &#171;chromium-browser.Chromium-browser N*&#187; chromium-browser<\/li>\n<li>Alt+X: showwin &#171;chromium-browser.Chromium-browser I*&#187; &#171;chromium-browser -incognito&#187;<\/li>\n<li>Alt+S: showwin &#171;skype.Skype&#187; skypeforlinux<\/li>\n<li>Alt+E: showwin &#171;jetbrains-idea&#187; idea.sh<\/li>\n<\/ul>\n<p><\/p>\n<p>jne. Klaviatuuri ja tarkvara kombinatsioone saab iga\u00fcks seadistada endale sobivaks.<br \/>\nKui k\u00f5ik \u00f5nnestus \u00f5igesti, saame eespool nimetatud kombinatsioonide abil akende vahel lihtsalt klahvide vajutusega vahetada.<\/p>\n<p><\/p>\n<p>Pettun Chrome'i f\u00e4nnide lootuseid: tavalist akent ei suuda ta inkognito re\u017eiimis eristada. <em>wmctrl<\/em> ei saa, neil on samad klassinimed ja akna pealkirjad. Pakutud regex'i N* ja I* s\u00fcmbolid on vajalikud ainult selleks, et need regulaaravaldised \u00fcksteisest eristuksid ja nendele saaks m\u00e4\u00e4rata erinevad peakingimused.<\/p>\n<p><\/p>\n<p>Eelmise kombinatsiooni peakingimuse l\u00e4htestamiseks (tegelikult regexi, mida <strong>showwin<\/strong> kasutati viimati) tuleb k\u00e4ivitada skript <strong>showwinDetach<\/strong>. Mul on see skript m\u00e4\u00e4ratud klaviatuurikombinatsioonile <em>Alt+Backspace<\/em>. <\/p>\n<p><\/p>\n<p>Skriptil <strong>showwin<\/strong> on veel \u00fcks funktsioon. Kui seda kutsutakse \u00fche parameetriga (antud juhul on parameeter lihtsalt ID), siis ei kontrollita regex'i \u00fcldse, vaid k\u00f5ik aknad peetakse sobivaks. See tundub iseenesest kasutamata, kuid sel viisil saame m\u00e4\u00e4rata mistahes akna peamiseks ja kiiresti sellele aknale \u00fcle minna.<\/p>\n<p><\/p>\n<p>Mul on seadistatud sellised kombinatsioonid:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+1: showwin &#171;CustomKey1&#187;<\/li>\n<li>Alt+2: showwin &#171;CustomKey2&#187;<\/li>\n<li>\u2026<\/li>\n<li>Alt+0: showwin &#171;CustomKey0&#187;<\/li>\n<li>Alt+Backspace: showwinDetach<\/li>\n<\/ul>\n<p><\/p>\n<p>Nii et ma saan siduda igasuguseid aknaid kombinatsioonidega <em>Alt+1<\/em>&#8230;<em>Alt+0<\/em>. Lihtsalt vajutades <em>Alt+1<\/em> sidun ma aktiivse akna selle kombinatsiooniga. T\u00fchistada sidumise v\u00f5in vajutades <em>Alt+1<\/em>, ja seej\u00e4rel <em>Alt+Backspace<\/em>. V\u00f5i sulgedes akna, see samuti t\u00f6\u00f6tab.<\/p>\n<p><\/p>\n<p>Edasi r\u00e4\u00e4gin natuke tehnilistest detailidest. Neid ei ole kohustuslik lugeda, lihtsalt proovi seadistada ja vaata. Kuid ma soovitaksin ikkagi m\u00f5ista teiste skripte enne, kui neid oma arvutis k\u00e4ivitada :).<\/p>\n<p><\/p>\n<h2 id=\"kak-razlichat-raznye-okna-odnogo-prilozheniya\">Kuidas eristada erinevaid aknaid \u00fchest rakendusest<\/h2>\n<p><\/p>\n<p>Praktiliselt oli esimene n\u00e4ide \u00abwmctrl -a skype.Skype -x\u00bb t\u00f6\u00f6tav ja seda v\u00f5ib kasutada. Aga vaatame veel kord n\u00e4idet Firefoxist, kus on avatud 2 akent:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">0x04400003  0 Navigator.Firefox                   N\/A Google T\u00f5lkija - Mozilla Firefox\n0x04400218  0 Navigator.Firefox                   N\/A Parimad avaldused \u00f6\u00f6p\u00e4eva jooksul \/ Habr - Mozilla Firefox (Privaatne Sirvimine)<\/code><\/pre>\n<p><\/p>\n<p>Esimene aken on tavare\u017eiimis, teine on Privaatne Sirvimine. Need aknad tahaksime arvestada erinevate rakendustena ja neisse \u00fcle minna erinevate klaviatuurikombinatsioonidega. <\/p>\n<p><\/p>\n<p>Skripti, mis aknaid vahetab, tuleb keerulisemaks muuta. Olen kasutanud sellist lahendust: kuvada k\u00f5igi akende nimekiri, teha <em>grep<\/em> regex'i, v\u00f5tta esimene rida <em>head<\/em>, saada esimene veerg (see on akna id) kasutades <em>cut<\/em>, vahetada aken id j\u00e4rgi.<\/p>\n<p><\/p>\n<p>Siin peaks olema nali regulaaravaldistest ja kahest probleemist, kuid tegelikult ma ei kasuta midagi keerulist. Regulaaravaldised on vajalikud selleks, et oleks v\u00f5imalik n\u00e4idata stringi l\u00f5ppu (s\u00fcmbol \u00ab$\u00bb) ja eristada \u00abMozilla Firefox$\u00bb ja \u00abMozilla Firefox (Privaatne Sirvimine)$\u00bb.<\/p>\n<p><\/p>\n<p>Ekip yakla\u015f\u0131k \u015f\u00f6yle g\u00f6r\u00fcn\u00fcyor:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ wmctrl -i -a `wmctrl -lx | grep -i \"Mozilla Firefox$\" | head -1 | cut -d\" \" -f1`<\/code><\/pre>\n<p><\/p>\n<p>Siin on juba lihtne arvata skripti teise omaduse \u00fcle: kui grep ei tagasta midagi, t\u00e4hendab see, et vajalik rakendus ei ole avatud ja see tuleb k\u00e4ivitada, t\u00e4ites teise parameetri k\u00e4su. Ja siis kontrollime regulaarselt, kas vajalik aken on avanud, et sellele fookust anda. Ei hakka sellele liiga palju t\u00e4helepanu juhtima, kes vajab, see vaatab l\u00e4htekoodid \u00fcle.<\/p>\n<p><\/p>\n<h2 id=\"kogda-okna-prilozheniya-ne-razlichimy\">Kui rakenduse aknad ei ole eristatavad<\/h2>\n<p><\/p>\n<p>Nii et oleme \u00f5ppinud fookust andma soovitud rakenduse aknale. Aga mis siis, kui rakendusel on avatud rohkem kui \u00fche akna? Kellele neist fookust anda? \u00dclaltoodud skript annab t\u00f5en\u00e4oliselt fookuse esimesena avatud aknale. Siiski sooviksime suuremat paindlikkust. Tahaksime v\u00f5imalust meeles pidada, milline aken on vajalik, ja l\u00fclituda just sellele aknale.<\/p>\n<p><\/p>\n<p>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\u00f5i me ei tee selle kombinatsiooni jaoks skripti l\u00e4htestamist <strong>showwinDetach<\/strong>.<\/p>\n<p><\/p>\n<p>Skripti algoritm <strong>showwin<\/strong> on umbes j\u00e4rgmine:<\/p>\n<p><\/p>\n<ul>\n<li>Kontrolli, kas oleme juba varem meeles pidanud aken id, millele fookust anda.<br \/>\nKui oleme meeles pidanud ja selline aken on endiselt olemas, siis anname fookuse sellele ja lahkume. <\/li>\n<li>Vaata, milline aken on praegu fookuses, ja kui see sobib meie sooviga, siis salvestame selle id tulevaseks \u00fcleminekuks ning lahkume.<\/li>\n<li>Liigume m\u00f5ne sobiva akna juurde, kui see olemas on, v\u00f5i avame vajaliku rakenduse.<\/li>\n<\/ul>\n<p><\/p>\n<p>Praegu fookuses oleva akna tuvastamiseks v\u00f5ime kasutada konsooli utiliiti xdotool, muutes selle v\u00e4ljundi kuuek\u00fcmnendlikku vormi:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ printf \"0x%08x\" `xdotool getwindowfocus`<\/code><\/pre>\n<p><\/p>\n<p>Bashis midagi m\u00e4letamine on k\u00f5ige lihtsam, luues faile virtuaalses m\u00e4lus\u00fcsteemis. Ubuntu-s on see vaikimisi aktiveeritud <em>\/dev\/shm\/<\/em>. Muude jaotuste kohta ei oska midagi \u00f6elda, loodan, et sarnane asi on ka seal. Saame vaadata k\u00e4suga:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ mount -l | grep tmpfs<\/code><\/pre>\n<p><\/p>\n<p>Skript loob selles kaustas t\u00fchje kaustu, selliseid: <em>\/dev\/shm\/$USER\/showwin\/$SEARCH_REGEX\/$WINDOW_ID<\/em>. T\u00e4iendavalt igal korral, kui seda kutsutakse, loob see symlink <em>\/dev\/shm\/$USER\/showwin\/showwin_last<\/em> . Tundub, et <em>\/dev\/shm\/$USER\/showwin\/$SEARCH_REGEX<\/em>. See on vajalik, et vajadusel kustutada akna id konkreetse kombinatsiooni jaoks skripti abil <strong>showwinDetach<\/strong>.<\/p>\n<p><\/p>\n<h2 id=\"chto-mozhno-uluchshit\">Mida saaks parandada<\/h2>\n<p><\/p>\n<p>Esiteks tuleb skripte k\u00e4sitsi seadistada. Kindlasti huvitatakse paljusid teist, et vajadus s\u00fcveneda ja k\u00f5ike k\u00e4sitsi teha v\u00f5ivad teha teid isegi kahtlema s\u00fcsteemi seadistamises. Kui saaks lihtsalt paketi paigaldada ja k\u00f5ik seada kiiremini, siis v\u00f5ib-olla oleks see m\u00f5ne populaarsuse saavutanud. Ja v\u00f5ib-olla hakkaks see l\u00f5puks ka standardsetesse distributsioonidesse rakendusi lisama.<\/p>\n<p><\/p>\n<p>Ja v\u00f5ib-olla saaks asju lihtsamaks teha. Kui akna ID j\u00e4rgi saaks teada protsessi ID, mis selle loonud on, ja protsessi ID j\u00e4rgi juurutada, milline k\u00e4sk selle loonud on, siis saaks seadistamise automatiseerida. Tegelikult ma ei ole uurinud, kas see, mida ma selles l\u00f5igus kirjutasin, on v\u00f5imalik. Asi on selles, et mulle endale sobib see, kuidas see praegu t\u00f6\u00f6tab. Kuid kui kellelegi muule tundub see l\u00e4henemine mugav ja keegi seda parandab, siis oleksin r\u00f5\u00f5mus, kui saaksin kasutada paremat lahendust.<\/p>\n<p><\/p>\n<p>Teine probleem, millest ma olen kirjutanud, on see, et m\u00f5nel juhul ei saa aknaid \u00fcksteisest eristada. Olen seda seni t\u00e4heldanud ainult Chrome'i \/ Chromiumi inkognito re\u017eiimis, kuid v\u00f5ib-olla on kuskil mujal selline probleem. \u00c4\u00e4rmuslikul juhul on alati universaalsete kombinatsioonide v\u00f5imalus. <em>Alt+1<\/em>&#8230;<em>Alt+0<\/em>. Taaskord, ma kasutan Firefoxi ja see probleem ei ole mulle isiklikult oluline.<\/p>\n<p><\/p>\n<p>Ent minu jaoks on t\u00f5sine probleem see, et kasutan t\u00f6\u00f6l Mac OS-i ja seal ei ole ma suutelised midagi sarnast seadistama. Utiliidi <em>wmctrl<\/em> paigaldamine n\u00e4is olevat v\u00f5imalik, kuid see ei t\u00f6\u00f6ta Mac OS-is adekvaatselt. Mingit v\u00f5ib rakendusega teha, <em>Automator<\/em>aga see on nii aeglane, et seda on ebamugav kasutada, isegi kui see t\u00f6\u00f6tab. Ma ei suutnud ka klahvikombinatsioone seadistada nii, et need t\u00f6\u00f6taksid k\u00f5igis programmides. Kui keegi peaks lahenduse v\u00e4lja m\u00f5tlema \u2014 oleksin r\u00f5\u00f5mus, kui saaksin seda kasutada.<\/p>\n<p><\/p>\n<h2 id=\"vmesto-zaklyucheniya\">L\u00f5petuseks<\/h2>\n<p><\/p>\n<p>Tuli ootamatult palju s\u00f5nu sellise, n\u00e4iliselt lihtsa funktsionaalsuse kohta. Tahtsin edastada idee ja mitte teksti \u00fcle koormata, kuid ma ei ole veel v\u00e4lja m\u00f5elnud, kuidas seda lihtsamalt r\u00e4\u00e4kida. V\u00f5ib-olla videos oleks see parem, aga siin ei meeldi seda v\u00e4ga.<\/p>\n<p><\/p>\n<p>R\u00e4\u00e4kisin 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. <\/p>\n<p><\/p>\n<p>Loodan, et keegi proovib seda ideed ja v\u00f5ib-olla isegi hindab seda. V\u00f5in \u00f6elda, et skript kirjutati umbes kolm aastat tagasi ja see on mulle \u00dcLIKENDAJALIK. Nii mugav, et tekitab t\u00f5sist ebamugavust t\u00f6\u00f6tades teiste arvutitega. Ja oma t\u00f6\u00f6 MacBookiga. <\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/masyamandev\/Showwin-script\">Link skriptidele<\/a><\/noindex><\/p>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483846\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042f \u0438\u0437 \u0442\u0435\u0445, \u043a\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0430 Caps Lock \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043b\u0435\u043d\u044c \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c 2 \u043a\u043b\u0430\u0432\u0438\u0448\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u043e\u0434\u043d\u0443. \u042f \u0431\u044b \u0434\u0430\u0436\u0435 \u0445\u043e\u0442\u0435\u043b 2 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438: \u043e\u0434\u043d\u0443 \u0431\u044b \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u0439 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438, \u0430 \u0432\u0442\u043e\u0440\u0443\u044e \u0434\u043b\u044f \u0440\u0443\u0441\u0441\u043a\u043e\u0439. \u041d\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0430 \u2014 \u044d\u0442\u043e \u0432\u044b\u0437\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043d\u0443\u0436\u043d\u0430\u044f, \u0447\u0442\u043e \u0432\u044b\u043f\u0438\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f\u043c\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-55206","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042f \u0438\u0437 \u0442\u0435\u0445, \u043a\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0430 Caps Lock \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043b\u0435\u043d\u044c \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c 2 \u043a\u043b\u0430\u0432\u0438\u0448\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u043e\u0434\u043d\u0443.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043a\u043d\u0430\u043c\u0438 \u0432 Linux | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042f \u0438\u0437 \u0442\u0435\u0445, \u043a\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0430 Caps Lock \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043b\u0435\u043d\u044c \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c 2 \u043a\u043b\u0430\u0432\u0438\u0448\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u043e\u0434\u043d\u0443.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-01-14T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:03:18+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Alternatiivne akende haldamine Linuxis | ProHoster","description":"Ma olen \u00fcks neist, kes seab Caps Lock \u00fclevahetamiseks, sest on liiga laisk, et vajutada kahte nuppu, kui v\u00f5ib vajutada \u00fchte.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043a\u043d\u0430\u043c\u0438 \u0432 Linux | ProHoster","og:description":"\u042f \u0438\u0437 \u0442\u0435\u0445, \u043a\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0430 Caps Lock \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043b\u0435\u043d\u044c \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c 2 \u043a\u043b\u0430\u0432\u0438\u0448\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u043e\u0434\u043d\u0443.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-01-14T21:00:00+00:00","article:modified_time":"2020-02-18T11:03:18+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55206","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:48:29","updated":"2022-09-30 14:18:59","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/55206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=55206"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/55206\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=55206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=55206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=55206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}