{"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\/lv\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","title":{"rendered":"Alternat\u012bv\u0101 logu vad\u012bba Linux","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Es esmu no tiem, kas uz Caps Lock iestata valodas mai\u0146u, jo man slinkums nospiest divas tausti\u0146us, kad varu nospiest vienu. Es pat grib\u0113tu divus nevajadz\u012bgus tausti\u0146us: vienu es izmantotu, lai iesl\u0113gtu ang\u013cu valodas izk\u0101rtojumu, un otro krievu. Bet otrais nevajadz\u012bgais tausti\u0146\u0161 ir konteksta izv\u0113lnes izsauk\u0161ana, kas ir tik nevajadz\u012bga, ka daudzi kl\u0113pjdatoru ra\u017eot\u0101ji to izsl\u0113dz. T\u0101d\u0113\u013c j\u0101apmierin\u0101s ar to, kas ir. <\/p>\n<p><\/p>\n<p>Un v\u0113l es nev\u0113los, lai, p\u0101rsl\u0113dzoties starp logiem, b\u016btu j\u0101mekl\u0113 to ikonas uz uzdevumu joslas, j\u0101no\u0137er to nosaukumi, sl\u012bdot cauri <em>Alt+Tab<\/em>, j\u0101p\u0101rvieto darba virsmas utt. Es v\u0113los nospiest tausti\u0146u kombin\u0101ciju (ide\u0101li visp\u0101r vienu, bet nevajadz\u012bgo tausti\u0146u vairs nav) un uzreiz nok\u013c\u016bt vajadz\u012bgaj\u0101 log\u0101. Piem\u0113ram, t\u0101:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+F: Firefox<\/li>\n<li>Alt+D: Firefox (Priv\u0101t\u0101 p\u0101rl\u016bko\u0161ana)<\/li>\n<li>Alt+T: Termin\u0101ls<\/li>\n<li>Alt+M: Kalkulators<\/li>\n<li>Alt+E: IntelliJ Idea<\/li>\n<li>utt.<\/li>\n<\/ul>\n<p><\/p>\n<p>Turkl\u0101t, nospie\u017eot, piem\u0113ram, uz <em>Alt+M<\/em> , es v\u0113los redz\u0113t kalkulatoru neatkar\u012bgi no t\u0101, vai \u0161\u012b programma \u0161obr\u012bd ir palaista. Ja t\u0101 ir palaista, tad t\u0101s logs j\u0101nodod fokus\u0101, bet, ja nav \u2014 j\u0101palai\u017e vajadz\u012bg\u0101 programma un j\u0101nodod fokus, kad t\u0101 iel\u0101d\u0113jas.<\/p>\n<p><\/p>\n<p>Gad\u012bjumiem, kuri netiek segti ar iepriek\u0161\u0113jo scen\u0101riju, es v\u0113los, lai b\u016btu univers\u0101las tausti\u0146u kombin\u0101cijas, kuras var viegli pie\u0161\u0137irt jebkuram no atv\u0113rtiem logiem. Piem\u0113ram, man ir pie\u0161\u0137irtas 10 kombin\u0101cijas no <em>Alt+1<\/em> l\u012bdz <em>Alt+0<\/em>, kuras nav saist\u012btas ar nevienu programmu. Es varu vienk\u0101r\u0161i nospiest <em>Alt+1<\/em> un logs, kur\u0161 \u0161obr\u012bd ir fokus\u0101, sa\u0146ems fokusu, nospie\u017eot <em>Alt+1<\/em>.<\/p>\n<p><\/p>\n<p>Zem\u0101k ir apraksts v\u0113l da\u017e\u0101m funkcij\u0101m un atbilde uz to, k\u0101 to var izdar\u012bt. Bet t\u016bl\u012bt br\u012bdin\u0101\u0161u, ka \u0161\u0101da personaliz\u0101cija var rad\u012bt sp\u0113c\u012bgu atkar\u012bbu un pat abstinences simptomus, ja j\u0101izmanto Windows, Mac OS vai pat sve\u0161s dators ar Linux.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Paties\u012bb\u0101, ja padom\u0101, tad m\u0113s ikdien\u0101 izmantojam ne tik daudz programmu. P\u0101rl\u016bks, termin\u0101ls, IDE, k\u0101ds zi\u0146ojumapmai\u0146as r\u012bks, failu mened\u017eeris, kalkulators un, iesp\u0113jams, tas ir gandr\u012bz viss. Nepiecie\u0161amas nav tik daudz tausti\u0146u kombin\u0101ciju, lai segtu 95% ikdienas uzdevumu.<\/p>\n<p><\/p>\n<p>Programmu gad\u012bjum\u0101, kur\u0101m ir atv\u0113rti vair\u0101ki logi, vienu var noteikt par galveno. Piem\u0113ram, atv\u0113rtas daudzas IntelliJ Idea logus, kuri pie\u0161\u0137irti uz <em>Alt+E<\/em>. Parastajos apst\u0101k\u013cos, nospie\u017eot uz <em>Alt+E<\/em> , tiks atv\u0113rts k\u0101ds no \u0161\u012bs programmas logiem, visticam\u0101k tas, kur\u0161 tika atv\u0113rts pirmais. Tom\u0113r, ja nospie\u017e uz <em>Alt+E<\/em> Kad viena no \u0161\u012bs programmas logiem jau ir fokus\u0101, \u0161im logam tiks pie\u0161\u0137irts galvenais status un tie\u0161i tam tiks nodots fokuss n\u0101kamajos kombin\u0101ciju nospie\u0161anus. <\/p>\n<p><\/p>\n<p>Galveno logu var p\u0101rdefin\u0113t. Lai to izdar\u012btu, vispirms j\u0101nok\u0101rto kombin\u0101cija un p\u0113c tam j\u0101pied\u0113v\u0113 galvenais cits logs. Lai atjaunotu kombin\u0101ciju, j\u0101nosaka pati kombin\u0101cija un p\u0113c tam speci\u0101l\u0101 atjauno\u0161anas kombin\u0101cija, ko man iestat\u012bjusi uz <em>Alt+Backspace<\/em>. Tas izsauks skriptu, kas atcels galven\u0101 loga pie\u0161\u0137ir\u0161anu iepriek\u0161\u0113jai kombin\u0101cijai. P\u0113c tam var pie\u0161\u0137irt jaunu galveno logu, k\u0101 tas tika aprakst\u012bts iepriek\u0161\u0113j\u0101 odst\u0101v\u0101. Piesaistes atjauno\u0161ana univers\u0101laj\u0101m kombin\u0101cij\u0101m notiek l\u012bdz\u012bgi.<\/p>\n<p><\/p>\n<p>Ievads san\u0101ca gar\u0161, bet vispirms v\u0113l\u0113jos past\u0101st\u012bt, ko dar\u012bsim, un p\u0113c tam izskaidrot, k\u0101 to dar\u012bt.<\/p>\n<p><\/p>\n<h2 id=\"dlya-teh-komu-nadoelo-chitat\">Tiem, kam apnicis las\u012bt<\/h2>\n<p><\/p>\n<p>\u012asum\u0101, saite uz skriptiem raksta beig\u0101s.<\/p>\n<p><\/p>\n<p>Bet tom\u0113r uzreiz uzst\u0101d\u012bt un lietot neizdosies. Vispirms b\u016bs j\u0101saprot, k\u0101 skripts atrod nepiecie\u0161amo logu. Bez t\u0101 nevar\u0113s par\u0101d\u012bt skriptam, kur tie\u0161i j\u0101nodod fokuss. Un ir j\u0101saprot, ko dar\u012bt, ja p\u0113k\u0161\u0146i nav piem\u0113rota loga.<\/p>\n<p><\/p>\n<p>Un v\u0113l es negribu detaliz\u0113t, k\u0101 konfigur\u0113t skriptu izpildi, nospie\u017eot tausti\u0146u kombin\u0101cijas. Piem\u0113ram, KDE tas ir Sistem\u0101 iestat\u012bjumi \u2192 \u012asin\u0101jumtausti\u0146i \u2192 Piel\u0101gotie \u012bsin\u0101jumtausti\u0146i. Cit\u0101s logu p\u0101rvald\u012bt\u0101ja versij\u0101s tam ar\u012b j\u0101b\u016bt.<\/p>\n<p><\/p>\n<h2 id=\"znakomstvo-s-wmctrl\">Iepaz\u012b\u0161an\u0101s ar wmctrl<\/h2>\n<p><\/p>\n<p><em>Wmctrl<\/em> \u2014 konsoles r\u012bks interakcijai ar X Window Manager. Tas ir iz\u0161\u0137iro\u0161s programmai skript\u0101. Apskat\u012bsim, k\u0101 to var lietot.<\/p>\n<p><\/p>\n<p>Vispirms izvad\u012bsim atv\u0113rto logu sarakstu:<\/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 Tulkot\u0101js - Mozilla Firefox\n0x04400218  0 Navigator.Firefox                   N\/A Lab\u0101kie publik\u0101cijas par dienu \/ Habr - Mozilla Firefox (Priv\u0101ta p\u0101rl\u016bko\u0161ana)\n...<\/code><\/pre>\n<p><\/p>\n<p>Opcija <em>-l<\/em> izvada visu atv\u0113rtu logu sarakstu, un <em>-h<\/em> pievieno izn\u0101kumam klases nosaukumu (<em>skype.Skype<\/em>, <em>Navigator.Firefox<\/em> u.tml). Mums te noder\u0113s loga ID (1. kolonna), klases nosaukums (3. kolonna) un loga nosaukums (p\u0113d\u0113j\u0101 kolonna).<\/p>\n<p><\/p>\n<p>Var m\u0113\u0123in\u0101t aktiviz\u0113t k\u0101du logu, izmantojot opciju <em>-a<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ wmctrl -a skype.Skype -x<\/code><\/pre>\n<p><\/p>\n<p>Ja viss notiek k\u0101 pl\u0101nots, tad ekr\u0101n\u0101 vajadz\u0113tu par\u0101d\u012bties Skype logs. Ja viet\u0101 dot opciju <em>-x<\/em> izmantojiet opciju <em>-i<\/em>, t\u0101 viet\u0101, lai nor\u0101d\u012btu klases nosaukumu, var\u0113s nor\u0101d\u012bt loga id. Probl\u0113ma ar id ir t\u0101da, ka loga id main\u0101s katru reizi, kad tiek palaista lietotne, un m\u0113s to nevaram paredz\u0113t. No otras puses, \u0161is atrib\u016bts nep\u0101rprotami identific\u0113 logu, kas var b\u016bt svar\u012bgi, ja lietotne atver vair\u0101kus logus. Par to nedaudz v\u0113l\u0101k.<\/p>\n<p><\/p>\n<p>\u0160aj\u0101 posm\u0101 mums j\u0101atceras, ka mekl\u0113sim vajadz\u012bgo logu ar regex, izmantojot izvadi <em>wmctrl -lx<\/em>. Ta\u010du tas nenoz\u012bm\u0113, ka mums oblig\u0101ti j\u0101izmanto kaut kas sare\u017e\u0123\u012bts. Parasti pietiek ar klases nosaukumu vai loga nosaukumu. <\/p>\n<p><\/p>\n<p>Princip\u0101, pamatidejai jau vajadz\u0113tu b\u016bt skaidrai. Glob\u0101lo karsto tausti\u0146u \/ \u012bsin\u0101jumtausti\u0146u iestat\u012bjumos j\u016bsu logu p\u0101rvaldniek\u0101 iestata vajadz\u012bgo kombin\u0101ciju, lai izpild\u012btu skriptu.<\/p>\n<p><\/p>\n<h2 id=\"kak-polzovatsya-skriptami\">K\u0101 lietot skriptus<\/h2>\n<p><\/p>\n<p>Vispirms j\u0101sagatavo konso\u013cu util\u012btas <em>wmctrl<\/em> un <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>T\u0101l\u0101k j\u0101piesaka skripti un j\u0101pievieno tie <em>$PATH<\/em>. Es parasti ievietoju tos <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>Ja katalogs <em>~\/bin<\/em> nebija, tad tas j\u0101izveido un j\u0101restart\u0113 (vai j\u0101iziet no sist\u0113mas), cit\u0101di <em>~\/bin<\/em> neiek\u013causies <em>$PATH<\/em>. Ja viss pareizi izdar\u012bts, tad skriptiem vajadz\u0113tu b\u016bt pieejamiem no konsoles, un j\u0101darbina autom\u0101tisk\u0101 pabeig\u0161ana ar Tab.<\/p>\n<p><\/p>\n<p>Pamatskripts <strong>showwin<\/strong> pie\u0146em 2 parametrus: pirmais ir regex, ar kuru m\u0113s mekl\u0113sim vajadz\u012bgo logu, bet otrs parametrs ir komanda, kuru j\u0101izpilda, ja vajadz\u012bgais logs netiek atrasts. <\/p>\n<p><\/p>\n<p>Varat izm\u0113\u0123in\u0101t izpild\u012bt skriptu, piem\u0113ram:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ showwin \"Mozilla Firefox$\" firefox<\/code><\/pre>\n<p><\/p>\n<p>Ja Firefox ir uzst\u0101d\u012bts, tad tam logam vajadz\u0113tu tikt piev\u0113rstam fokusam. Pat ja Firefox nebija palai\u017eams, tam vajadz\u0113tu b\u016bt palaistam.<\/p>\n<p><\/p>\n<p>Ja viss izdev\u0101s, varat izm\u0113\u0123in\u0101t iestat\u012bt komandu izpildi uz kombin\u0101cij\u0101m. Glob\u0101lo karsto tausti\u0146u \/ \u012bsin\u0101jumtausti\u0146u iestat\u012bjumos pievienojam:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+F: showwin \u00abMozilla Firefox$\u00bb firefox<\/li>\n<li>Alt+D: showwin \u00abMozilla Firefox (Private Browsing)$\u00bb \u00abfirefox -private-window\u00bb<\/li>\n<li>Alt+C: showwin \u00abchromium-browser.Chromium-browser N*\u00bb chromium-browser<\/li>\n<li>Alt+X: showwin \u00abchromium-browser.Chromium-browser I*\u00bb \u00abchromium-browser -incognito\u00bb<\/li>\n<li>Alt+S: showwin \u00abskype.Skype\u00bb skypeforlinux<\/li>\n<li>Alt+E: showwin \u00abjetbrains-idea\u00bb idea.sh<\/li>\n<\/ul>\n<p><\/p>\n<p>Un t\u0101 t\u0101l\u0101k. Tausti\u0146u kombin\u0101cijas un programmas katrs var\u0113s piel\u0101got sev \u0113rt\u0101k.<br \/>\nJa viss tika izdar\u012bts pareizi, tad ar iepriek\u0161 min\u0113taj\u0101m kombin\u0101cij\u0101m m\u0113s var\u0113sim p\u0101rsl\u0113gties starp logiem ar vienk\u0101r\u0161u tausti\u0146u nospie\u0161anu.<\/p>\n<p><\/p>\n<p>Satraukumu m\u012b\u013cot\u0101jiem, parastais logs incognito netiek at\u0161\u0137irts p\u0113c izvades <em>wmctrl<\/em> Tas nav iesp\u0113jams, jo t\u0101m ir vien\u0101di kla\u0161u nosaukumi un logu virsraksti. Ieteiktajos regex simbolos N* un I* ir nepiecie\u0161ami tikai tam, lai \u0161ie regul\u0101rie izteikumi at\u0161\u0137irtos sav\u0101 starp\u0101, un tos var\u0113tu pie\u0161\u0137irt par galvenajiem da\u017e\u0101dajiem logiem.<\/p>\n<p><\/p>\n<p>Lai atiestat\u012btu galveno logu iepriek\u0161\u0113jai kombin\u0101cijai (faktiski regex, ar kuru <strong>showwin<\/strong> tas tika izsaukts p\u0113d\u0113joreiz), ir j\u0101izsauc skripts <strong>showwinDetach<\/strong>. Manam skriptam \u0161\u012b kombin\u0101cija ir pie\u0161\u0137irta tausti\u0146u komanda <em>Alt+Backspace<\/em>. <\/p>\n<p><\/p>\n<p>\u0160im skriptam <strong>showwin<\/strong> ir v\u0113l viena funkcija. Kad tas tiek izsaukts ar vienu parametru (\u0161aj\u0101 gad\u012bjum\u0101 parametrs ir vienk\u0101r\u0161i identifikators), tas visp\u0101r nep\u0101rbauda regex, bet visus logus uzskata par piem\u0113rotiem. Tas \u0161\u0137iet nevajadz\u012bgs, tom\u0113r t\u0101d\u0101 veid\u0101 m\u0113s varam pie\u0161\u0137irt jebkuru logu par galveno un \u0101tri p\u0101riet tie\u0161i uz \u0161o logu.<\/p>\n<p><\/p>\n<p>Man ir iestat\u012btas \u0161\u0101das kombin\u0101cijas:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+1: showwin \u00abCustomKey1\u00bb<\/li>\n<li>Alt+2: showwin \u00abCustomKey2\u00bb<\/li>\n<li>\u2026<\/li>\n<li>Alt+0: showwin \u00abCustomKey0\u00bb<\/li>\n<li>Alt+Backspace: showwinDetach<\/li>\n<\/ul>\n<p><\/p>\n<p>T\u0101d\u0113j\u0101di es varu piesaist\u012bt jebkurus logus kombin\u0101cij\u0101m <em>Alt+1<\/em>\u2026<em>Alt+0<\/em>. Vienk\u0101r\u0161i nospie\u017eot <em>Alt+1<\/em> es piesaistu pa\u0161reiz\u0113jo logu \u0161ai kombin\u0101cijai. Atcelt piesaisti var, nospie\u017eot <em>Alt+1<\/em>, un p\u0113c tam <em>Alt+Backspace<\/em>. Vai ar\u012b sl\u0113gt logu, tas ar\u012b darbojas.<\/p>\n<p><\/p>\n<p>T\u0101l\u0101k es past\u0101st\u012b\u0161u nedaudz tehnisko s\u012bkumu. Tos var neizlas\u012bt, bet vienk\u0101r\u0161i pam\u0113\u0123in\u0101t uzst\u0101d\u012bt un paskat\u012bties. Bet es tom\u0113r ieteiktu iepaz\u012bties ar citu skriptiem pirms to palai\u0161anas sav\u0101 dator\u0101.<\/p>\n<p><\/p>\n<h2 id=\"kak-razlichat-raznye-okna-odnogo-prilozheniya\">K\u0101 at\u0161\u0137irt da\u017e\u0101dus logus vienai programmai<\/h2>\n<p><\/p>\n<p>Princip\u0101, pirmais piem\u0113rs \"wmctrl -a skype.Skype -x\" bija darb\u012bgs un to var izmantot. Bet apl\u016bkosim v\u0113lreiz piem\u0113ru ar Firefox, kur\u0101 ir atv\u0113rti 2 logi:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">0x04400003  0 Navigator.Firefox                   N\/A Google Tulkot\u0101js - Mozilla Firefox\n0x04400218  0 Navigator.Firefox                   N\/A Lab\u0101kie raksti dien\u0101 \/ Habr - Mozilla Firefox (Priv\u0101t\u0101 p\u0101rl\u016bko\u0161ana)<\/code><\/pre>\n<p><\/p>\n<p>Pirmais logs ir parastaj\u0101 re\u017e\u012bm\u0101, bet otrais - Priv\u0101t\u0101 p\u0101rl\u016bko\u0161an\u0101. \u0160os logus b\u016btu v\u0113lams uzskat\u012bt par da\u017e\u0101d\u0101m programm\u0101m un p\u0101rsl\u0113gties uz tiem ar da\u017e\u0101d\u0101m tausti\u0146u kombin\u0101cij\u0101m. <\/p>\n<p><\/p>\n<p>Ir j\u0101ieg\u016bst sare\u017e\u0123\u012bt\u0101ks skripts, kas p\u0101rsl\u0113dz logus. Es izmantoju t\u0101du risin\u0101jumu: izvad\u012bt visu logu sarakstu, izveidot <em>grep<\/em> p\u0113c regex, pa\u0146emt pirmo rindu, izmantojot <em>head<\/em>, izvilkt pirmo kolonnu (t\u0101 b\u016bs loga id) ar <em>cut<\/em>, p\u0101rsl\u0113gties uz logu p\u0113c id.<\/p>\n<p><\/p>\n<p>\u0160eit b\u016btu joks par regul\u0101rajiem izteiksm\u0113m un div\u0101m probl\u0113m\u0101m, bet paties\u012bb\u0101 es neizmantoju neko sare\u017e\u0123\u012btu. Regul\u0101r\u0101s izteiksmes man nepiecie\u0161amas, lai var\u0113tu nor\u0101d\u012bt rindi\u0146as beigas (simbols \u201e$\u201d) un at\u0161\u0137irt \u201eMozilla Firefox$\u201d no \u201eMozilla Firefox (Private Browsing)$\u201d.<\/p>\n<p><\/p>\n<p>Komanda izskat\u0101s apm\u0113ram t\u0101:<\/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>Te var jau nojaust par otro skripta \u012bpatn\u012bbu: ja grep neko nav izvad\u012bjis, tad vajadz\u012bg\u0101 lietotne nav atv\u0113rta, un to ir nepiecie\u0161ams palaist, izpildot komandu no otr\u0101 parametra. Un p\u0113c tam periodiski p\u0101rbaud\u012bt, vai atv\u0113rts nav vajadz\u012bgais logs, lai tam nodotu fokusu. Neesmu iecer\u0113jis par to s\u012bk\u0101k run\u0101t, kam vajag, tas var apskat\u012bt avota kodu.<\/p>\n<p><\/p>\n<h2 id=\"kogda-okna-prilozheniya-ne-razlichimy\">Kad lietot\u0146u logi nav at\u0161\u0137irami<\/h2>\n<p><\/p>\n<p>Un t\u0101, m\u0113s esam iem\u0101c\u012bju\u0161ies nodot fokusu vajadz\u012bg\u0101s lietotnes logam. Bet ko dar\u012bt, ja atv\u0113rt\u0101 ir vair\u0101k nek\u0101 viena loga? K\u0101d\u0101m no t\u0101m nodot fokusu? Iepriek\u0161\u0113jais skripts, visticam\u0101k, nodos fokusu pirmajam atv\u0113rtajam logam. Tom\u0113r m\u0113s v\u0113lamies vair\u0101k elast\u012bbas. V\u0113l\u0113tos atcer\u0113ties, kur\u0161 tie\u0161i logs mums ir nepiecie\u0161ams, un p\u0101rsl\u0113gties tie\u0161i uz \u0161o logu.<\/p>\n<p><\/p>\n<p>Ideja bija \u0161\u0101da: Ja m\u0113s v\u0113lamies atcer\u0113ties k\u0101du konkr\u0113tu logu tausti\u0146u kombin\u0101cijai, tad, kad vajadz\u012bgais logs ir fokus\u0101, ir j\u0101nospie\u017e \u0161\u012b kombin\u0101cija. N\u0101kotn\u0113, nospie\u017eot \u0161o kombin\u0101ciju, fokuss tiks nodots tie\u0161i \u0161im logam. Kam\u0113r logs netiks aizv\u0113rts vai m\u0113s nesam veiku\u0161i ats\u0101kn\u0113\u0161anu \u0161ai skripta kombin\u0101cijai. <strong>showwinDetach<\/strong>.<\/p>\n<p><\/p>\n<p>Skripta algoritms <strong>showwin<\/strong> izskat\u0101s aptuveni t\u0101ds:<\/p>\n<p><\/p>\n<ul>\n<li>P\u0101rbaud\u012bt, vai iepriek\u0161 neesam atcer\u0113ju\u0161ies loga id, kuram j\u0101nodod fokuss.<br \/>\nJa esam atcer\u0113ju\u0161ies un \u0161\u0101ds logs joproj\u0101m past\u0101v, tad nododam tam fokusu un izn\u0101kam. <\/li>\n<li>P\u0101rbaud\u0101m, kur\u0161 logs pa\u0161laik ir fokus\u0101, un, ja tas atbilst m\u016bsu piepras\u012bjumam, atceramies t\u0101 id, lai n\u0101kotn\u0113 var\u0113tu piezvan\u012bt tam un izn\u0101kam.<\/li>\n<li>P\u0101rsl\u0113dzamies uz jebkuru piem\u0113rotu logu, ja tas past\u0101v, vai atveram vajadz\u012bgo lietotni.<\/li>\n<\/ul>\n<p><\/p>\n<p>Uzzin\u0101t, kur\u0161 logs pa\u0161laik ir fokus\u0101, var ar konsoles util\u012btu xdotool, p\u0101rv\u0113r\u0161ot t\u0101s izvadi heksadecim\u0101laj\u0101 form\u0101t\u0101:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ printf \"0xx\" `xdotool getwindowfocus`<\/code><\/pre>\n<p><\/p>\n<p>Kas attiecas uz kaut ko atcer\u0113\u0161anos bash, tas visviegl\u0101k izdar\u0101ms, radot failus virtu\u0101laj\u0101 failu sist\u0113m\u0101, kas atrodas atmi\u0146\u0101. Ubuntu t\u0101 ir pievienota p\u0113c noklus\u0113juma <em>\/dev\/shm\/<\/em>. Par citiem izplat\u012bjumiem neko neteik\u0161u, ceru, ka l\u012bdz\u012bgs ar\u012b tur ir. Var paskat\u012bties ar komandu:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ mount -l | grep tmpfs<\/code><\/pre>\n<p><\/p>\n<p>Kods izveidos tuk\u0161us direktorijus \u0161aj\u0101 map\u0113, piem\u0113ram: <em>\/dev\/shm\/$USER\/showwin\/$SEARCH_REGEX\/$WINDOW_ID<\/em>. Turkl\u0101t katra izsaukuma laik\u0101 tiks izveidots symlink <em>\/dev\/shm\/$USER\/showwin\/showwin_last<\/em> uz <em>\/dev\/shm\/$USER\/showwin\/$SEARCH_REGEX<\/em>. Tas b\u016bs nepiecie\u0161ams, lai nepiecie\u0161am\u012bbas gad\u012bjum\u0101 ar skriptu dz\u0113stu loga ID konkr\u0113tai kombin\u0101cijai <strong>showwinDetach<\/strong>.<\/p>\n<p><\/p>\n<h2 id=\"chto-mozhno-uluchshit\">Ko var uzlabot<\/h2>\n<p><\/p>\n<p>Pirmk\u0101rt, skriptus j\u0101iestata manu\u0101li. Noteikti, \u0146emot v\u0113r\u0101 nepiecie\u0161am\u012bbu iedzi\u013cin\u0101ties un dar\u012bt daudz ar rok\u0101m, daudzi no jums pat neizmantos sist\u0113mas iestat\u012b\u0161anu. Ja b\u016btu iesp\u0113ja vienk\u0101r\u0161i uzst\u0101d\u012bt pakotni un visu vienk\u0101r\u0161\u0101k iestat\u012bt, iesp\u0113jams, tas ieg\u016btu noteiktu popularit\u0101ti. Varb\u016bt tad ar\u012b standarta distribut\u012bvos var\u0113tu iek\u013caut \u0161o lietotni.<\/p>\n<p><\/p>\n<p>Un, iesp\u0113jams, to var\u0113tu izdar\u012bt vienk\u0101r\u0161\u0101k. Ja p\u0113c loga ID iesp\u0113jams noskaidrot, kur\u0161 ID izveidojis procesu, un p\u0113c procesa ID iesp\u0113jams uzzin\u0101t, kura komanda to izveidojusi, var\u0113tu automatiz\u0113t iestat\u012b\u0161anu. Paties\u012bb\u0101 es neesmu p\u0113t\u012bjis, vai tas, ko esmu rakst\u012bjis \u0161aj\u0101 rindkop\u0101, ir iesp\u0113jams. Man person\u012bgi apmierina tas, k\u0101 tas darbojas \u0161obr\u012bd. Bet, ja k\u0101dam citam, iz\u0146emot mani, \u0161\u012b pieeja \u0161\u0137it\u012bs \u0113rta un k\u0101ds to uzlabos, es labpr\u0101t izmantotu lab\u0101ko risin\u0101jumu.<\/p>\n<p><\/p>\n<p>V\u0113l viena probl\u0113ma, k\u0101 jau iepriek\u0161 min\u0113ju, ir t\u0101, ka da\u017eos gad\u012bjumos logus nav iesp\u0113jams at\u0161\u0137irt vienu no otra. Es to esmu nov\u0113rojis tikai ar incognito re\u017e\u012bmu Chrome\/Chromium, bet iesp\u0113jams, ka t\u0101das situ\u0101cijas ir ar\u012b citur. Visos gad\u012bjumos vienm\u0113r ir varians ar univers\u0101l\u0101m kombin\u0101cij\u0101m <em>Alt+1<\/em>\u2026<em>Alt+0<\/em>. Atkal, es izmantoju Firefox, un person\u012bgi man \u0161\u012b probl\u0113ma nav b\u016btiska.<\/p>\n<p><\/p>\n<p>Ta\u010du b\u016btiska probl\u0113ma man ir t\u0101, ka darb\u0101 es izmantoju Mac OS, un tur neko l\u012bdz\u012bgu es nevar\u0113ju iestat\u012bt. R\u012bku <em>wmctrl<\/em> uzst\u0101d\u012bt \u0161\u0137iet bija iesp\u0113jams, bet tas Mac OS norm\u0101li nedarbojas. Da\u017eas lietas var dar\u012bt ar lietotni <em>Automator<\/em>, bet t\u0101 tik \u013coti aizkav\u0113jas, ka to nav \u0113rti izmantot pat tad, kad t\u0101 darbojas. Es ar\u012b neesmu sp\u0113jis iestat\u012bt tausti\u0146u kombin\u0101cijas t\u0101, lai t\u0101s darbotos vis\u0101s programm\u0101s. Ja k\u0101ds izdom\u0101s risin\u0101jumu \u2014 b\u016b\u0161u priec\u012bgs to izmantot.<\/p>\n<p><\/p>\n<h2 id=\"vmesto-zaklyucheniya\">Nosl\u0113gum\u0101<\/h2>\n<p><\/p>\n<p>San\u0101cis negaid\u012bti daudz v\u0101rdu, \u0146emot v\u0113r\u0101 t\u0101du, \u0161\u0137ietami, vienk\u0101r\u0161u funkcionalit\u0101ti. V\u0113l\u0113jos nodot ideju un nep\u0101rslogot tekstu, bet pagaid\u0101m neesmu izdom\u0101jis, k\u0101 to izteikt vienk\u0101r\u0161\u0101k. Iesp\u0113jams, video form\u0101t\u0101 b\u016btu lab\u0101k, bet \u0161eit t\u0101 to ne p\u0101r\u0101k m\u012bl.<\/p>\n<p><\/p>\n<p>Es mazliet past\u0101st\u012bju par to, kas ir skripta iek\u0161pus\u0113 un k\u0101 to konfigur\u0113t. Skriptu pats par sevi detaliz\u0113ti neapskat\u012bju, bet tas ir tikai 50 rindi\u0146as gar\u0161, t\u0101p\u0113c saprast nav gr\u016bti. <\/p>\n<p><\/p>\n<p>Ceru, ka k\u0101ds v\u0113l \u0161o ideju izm\u0113\u0123in\u0101s un, iesp\u0113jams, pat nov\u0113rt\u0113s. Par sevi varu teikt, ka skripts tika uzrakst\u012bts pirms apm\u0113ram 3 gadiem un man tas ir \u013bOTI \u0113rti. Tik \u0113rti, ka tas rada nopietnu diskomfortu, str\u0101d\u0101jot ar citu cilv\u0113ku datoriem. Un ar manu darba MacBook. <\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/masyamandev\/Showwin-script\">Saites uz skriptiem<\/a><\/noindex><\/p>\n<p>Avots: <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.5 - 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\/lv\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"lv_LV\" \/>\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\/lv\/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\udd47Alternat\u012bva logu vad\u012bba Linux | ProHoster","description":"Es esmu no tiem, kas uz Caps Lock iestata valodas mai\u0146u, jo man ir slinkums nospiest 2 tausti\u0146us, kad var nospiest vienu.","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"lv_LV","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\/lv\/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\/lv\/wp-json\/wp\/v2\/posts\/55206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/comments?post=55206"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/55206\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=55206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=55206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=55206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}