{"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\/ro\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","title":{"rendered":"Management alternativ al feroneriilor \u00een Linux","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Sunt unul dintre cei care folosesc Caps Lock pentru a schimba limba, pentru c\u0103 \u00eemi e lene s\u0103 apas dou\u0103 taste c\u00e2nd pot utiliza una. A\u0219 dori chiar dou\u0103 taste inutile: una ar fi pentru activarea limbii engleze, iar cealalt\u0103 pentru rusa. \u00cens\u0103 a doua tast\u0103 inutil\u0103 este activarea meniului contextual, care este at\u00e2t de inutil\u0103 \u00eenc\u00e2t este eliminat\u0103 de mul\u021bi produc\u0103tori de laptopuri. A\u0219a c\u0103 trebuie s\u0103 m\u0103 mul\u021bumesc cu ceea ce am. <\/p>\n<p><\/p>\n<p>De asemenea, nu vreau s\u0103 caut icoanele ferestrelor pe bara de activit\u0103\u021bi c\u00e2nd schimb feroneriile, privesc titlurile \u00een timp ce m\u0103 derulez prin <em>Alt+Tab<\/em>, prin birouri, etc. Vreau s\u0103 ap\u0103s o combina\u021bie de taste (ideal, o singur\u0103 tast\u0103, dar deja nu mai am taste inutile libere) \u0219i s\u0103 ajung imediat la fereastra dorit\u0103. De exemplu a\u0219a:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+F: Firefox<\/li>\n<li>Alt+D: Firefox (Navigare privat\u0103)<\/li>\n<li>Alt+T: Terminal<\/li>\n<li>Alt+M: Calculator<\/li>\n<li>Alt+E: IntelliJ Idea<\/li>\n<li>etc.<\/li>\n<\/ul>\n<p><\/p>\n<p>Astfel, la ap\u0103sarea, de exemplu, a <em>Alt+M<\/em> doresc s\u0103 v\u0103d calculatorul, indiferent dac\u0103 acest program este deschis \u00een acel moment. Dac\u0103 este deschis, fereastra sa trebuie s\u0103 primeasc\u0103 focus, iar dac\u0103 nu, s\u0103 deschid programul dorit \u0219i s\u0103-i transfer focusul atunci c\u00e2nd se \u00eencarc\u0103.<\/p>\n<p><\/p>\n<p>Pentru cazurile care nu sunt acoperite de scenariul anterior, vreau s\u0103 am combina\u021bii de taste universale, la care s\u0103 pot atribui cu u\u0219urin\u021b\u0103 orice feronerie deschis\u0103. De exemplu, am atribuit 10 combina\u021bii de la <em>Alt+1<\/em> la <em>Alt+0<\/em>, care nu sunt legate de niciun program. Pot pur \u0219i simplu s\u0103 ap\u0103s <em>Alt+1<\/em> \u0219i fereastra care este acum \u00een focus va prelua focusul la ap\u0103sarea <em>Alt+1<\/em>.<\/p>\n<p><\/p>\n<p>Sub acest text, descriu \u00eenc\u0103 c\u00e2teva func\u021bii \u0219i r\u0103spund la \u00eentrebarea cum se poate face acest lucru. \u00cens\u0103, voi avertiza c\u0103 o astfel de personalizare \"dup\u0103 preferin\u021bele personale\" poate provoca o dependen\u021b\u0103 puternic\u0103 \u0219i chiar \u201esevraj\u201d \u00een cazul \u00een care e necesar s\u0103 folose\u0219ti Windows, Mac OS sau chiar un alt computer cu Linux.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>De fapt, dac\u0103 ne g\u00e2ndim, nu folosim at\u00e2t de multe programe \u00een via\u021ba de zi cu zi. Browser, terminal, IDE, un fel de mesager, manager de fi\u0219iere, calculator \u0219i, cred c\u0103 asta e tot. Nu ai nevoie de at\u00e2t de multe combina\u021bii de taste pentru a acoperi 95% dintre sarcinile zilnice.<\/p>\n<p><\/p>\n<p>Pentru programele cu feronerie deschis\u0103, unul dintre ele poate fi desemnat principal. De exemplu, dac\u0103 ai mai multe feronerie IntelliJ Idea deschise, atribuite la <em>Alt+E<\/em>. \u00cen condi\u021bii normale, la ap\u0103sarea <em>Alt+E<\/em> se va deschide o feronerie a acestui program, cel mai probabil cea care a fost deschis\u0103 prima. Totu\u0219i, dac\u0103 apesi pe <em>Alt+E<\/em> C\u00e2nd una dintre feroneriile acestui program este deja \u00een focus, atunci aceasta va fi desemnat\u0103 ca fereastra principal\u0103 \u0219i anume ei \u00eei va fi transmis focusul la urm\u0103toarele ap\u0103s\u0103ri ale combina\u021biei. <\/p>\n<p><\/p>\n<p>Fereastra principal\u0103 poate fi redenumit\u0103. Pentru aceasta, combina\u021bia trebuie mai \u00eent\u00e2i resetat\u0103, iar apoi o alt\u0103 fereastr\u0103 trebuie desemnat\u0103 drept principal\u0103. Pentru a reseta combina\u021bia, trebuie s\u0103 ap\u0103sa\u021bi combina\u021bia \u00een sine, apoi o combina\u021bie special\u0103 de resetare, pe care eu am desemnat-o la <em>Alt+Backspace<\/em>. Acest lucru va apela un script care va anula desemnarea feronerie principale pentru combina\u021bia anterioar\u0103. Apoi, se poate desemna o nou\u0103 fereastr\u0103 principal\u0103 a\u0219a cum a fost descris \u00een paragraful anterior. Resetarea feroneriei asociate la combina\u021biile universale se face \u00een mod similar.<\/p>\n<p><\/p>\n<p>Introducerea a ie\u0219it pu\u021bin mai lung\u0103, dar am vrut mai \u00eent\u00e2i s\u0103 explic ce vom face, iar apoi s\u0103 explic cum s\u0103 facem.<\/p>\n<p><\/p>\n<h2 id=\"dlya-teh-komu-nadoelo-chitat\">Pentru cei care s-au s\u0103turat s\u0103 citeasc\u0103<\/h2>\n<p><\/p>\n<p>Pe scurt, linkul c\u0103tre scripturi este la sf\u00e2r\u0219itul articolului.<\/p>\n<p><\/p>\n<p>Dar, oricum, nu se poate s\u0103 instala\u021bi \u0219i s\u0103 folosi\u021bi imediat. Va trebui mai \u00eent\u00e2i s\u0103 \u00een\u021belege\u021bi cum g\u0103se\u0219te scriptul fereastra necesar\u0103. F\u0103r\u0103 asta, nu se poate indica scriptului unde anume trebuie s\u0103 transmit\u0103 focusul. \u0218i trebuie s\u0103 \u00een\u021belegem ce s\u0103 facem dac\u0103, dintr-o dat\u0103, nu s-a g\u0103sit fereastra potrivit\u0103.<\/p>\n<p><\/p>\n<p>De asemenea, nu voi insista asupra modului de configurare al execu\u021biei scripturilor la ap\u0103sarea combina\u021biilor de taste. De exemplu, \u00een KDE este \u00een System Settings \u2192 Shortcuts \u2192 Custom Shortcuts. Este posibil s\u0103 existe \u0219i a\u0219a ceva \u00een alte gestionare de feronerie.<\/p>\n<p><\/p>\n<h2 id=\"znakomstvo-s-wmctrl\">Introducere \u00een wmctrl<\/h2>\n<p><\/p>\n<p><em>Wmctrl<\/em> \u2014 utilitar de linie de comand\u0103 pentru interac\u021biunea cu X Window Manager. Aceasta este programul cheie pentru script. S\u0103 ne uit\u0103m rapid la modul \u00een care poate fi utilizat.<\/p>\n<p><\/p>\n<p>Mai \u00eent\u00e2i, s\u0103 afi\u0219\u0103m lista feroneriei deschise:<\/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 Traducer - Mozilla Firefox\n0x04400218  0 Navigator.Firefox                   N\/A Cele mai bune publica\u021bii de ieri \/ Habr - Mozilla Firefox (Navigare privat\u0103)\n...<\/code><\/pre>\n<p><\/p>\n<p>Op\u021biune <em>-l<\/em> afi\u0219eaz\u0103 lista tuturor feronerii deschise, iar <em>-h<\/em> adaug\u0103 la ie\u0219ire denumirea clasei (<em>skype.Skype<\/em>, <em>Navigator.Firefox<\/em> \u0219i a\u0219a mai departe). Aici ne va fi necesar id-ul feroneriei (coloana 1), numele clasei (coloana 3) \u0219i denumirea feroneriei (ultimul\u0103 coloan\u0103).<\/p>\n<p><\/p>\n<p>Putem \u00eencerca s\u0103 activ\u0103m o fereastr\u0103 folosind op\u021biunea <em>-a<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ wmctrl -a skype.Skype -x<\/code><\/pre>\n<p><\/p>\n<p>Dac\u0103 totul a mers conform planului, atunci pe ecran ar trebui s\u0103 apar\u0103 fereastra Skype. Dac\u0103 \u00een loc de op\u021biunea <em>-x<\/em> folosi\u021bi op\u021biunea <em>-i<\/em>, a \u00een locul numelui clasei, putem specifica id-ul ferestrei. Problema cu id-ul este c\u0103 acesta se schimb\u0103 la fiecare pornire a aplica\u021biei \u0219i nu putem s\u0103-l \u0219tim dinainte. Pe de alt\u0103 parte, acest atribut indic\u0103 \u00een mod clar fereastra, ceea ce poate fi important c\u00e2nd aplica\u021bia deschide mai multe feron\u021be. Despre aceasta, mai \u00eencolo.<\/p>\n<p><\/p>\n<p>\u00cen acest stadiu, trebuie s\u0103 ne amintim c\u0103 vom c\u0103uta fereastra dorit\u0103 folosind regex pe baza ie\u0219irii <em>wmctrl -lx<\/em>. Dar acest lucru nu \u00eenseamn\u0103 c\u0103 trebuie s\u0103 folosim neap\u0103rat ceva complicat. De obicei, numele clasei sau titlul ferestrei sunt suficiente. <\/p>\n<p><\/p>\n<p>\u00cen principiu, ideea de baz\u0103 ar trebui s\u0103 fie deja clar\u0103. \u00cen set\u0103rile de global hotkeys\/shortcuts pentru managerul dumneavoastr\u0103 de feron\u021be, configur\u0103m combina\u021bia dorit\u0103 pentru a executa scriptul.<\/p>\n<p><\/p>\n<h2 id=\"kak-polzovatsya-skriptami\">Cum s\u0103 folose\u0219ti scripturile<\/h2>\n<p><\/p>\n<p>Pentru \u00eenceput, trebuie s\u0103 instal\u0103m utilitarele din linia de comand\u0103 <em>wmctrl<\/em> \u0219i <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>Apoi, trebuie s\u0103 desc\u0103rc\u0103m scripturile \u0219i s\u0103 le ad\u0103ug\u0103m \u00een <em>$PATH<\/em>. De obicei, le plasez \u00een <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>Dac\u0103 folderul <em>~\/bin<\/em> nu a existat, trebuie s\u0103-l cre\u0103m \u0219i s\u0103 ne reconect\u0103m (sau s\u0103 ne reconect\u0103m), altfel <em>~\/bin<\/em> nu va fi disponibil \u00een <em>$PATH<\/em>. Dac\u0103 totul a fost f\u0103cut corect, scripturile ar trebui s\u0103 fie disponibile din linia de comand\u0103 \u0219i completarea automat\u0103 s\u0103 func\u021bioneze cu Tab.<\/p>\n<p><\/p>\n<p>Scriptul principal <strong>showwin<\/strong> accept\u0103 2 parametri: primul este regex-ul pe baza c\u0103ruia vom c\u0103uta fereastra dorit\u0103, iar al doilea parametru este comanda care trebuie executat\u0103 dac\u0103 fereastra dorit\u0103 nu a fost g\u0103sit\u0103. <\/p>\n<p><\/p>\n<p>Putem \u00eencerca s\u0103 execut\u0103m scriptul, de exemplu:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ showwin \"Mozilla Firefox$\" firefox<\/code><\/pre>\n<p><\/p>\n<p>Dac\u0103 Firefox este instalat, fereastra acestuia ar trebui s\u0103 primeasc\u0103 focus. Chiar dac\u0103 Firefox nu a fost lansat, acesta ar trebui s\u0103 se deschid\u0103.<\/p>\n<p><\/p>\n<p>Dac\u0103 a func\u021bionat, putem \u00eencerca s\u0103 configur\u0103m executarea comenzilor pe combina\u021bii. \u00cen set\u0103rile de global hotkeys\/shortcuts, ad\u0103ug\u0103m:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+F: arat\u0103 fereastra &#171;Mozilla Firefox$&#187; firefox<\/li>\n<li>Alt+D: arat\u0103 fereastra &#171;Mozilla Firefox (Navigare Privat\u0103)$&#187; &#171;firefox -private-window&#187;<\/li>\n<li>Alt+C: arat\u0103 fereastra &#171;chromium-browser.Chromium-browser N*&#187; chromium-browser<\/li>\n<li>Alt+X: arat\u0103 fereastra &#171;chromium-browser.Chromium-browser I*&#187; &#171;chromium-browser -incognito&#187;<\/li>\n<li>Alt+S: arat\u0103 fereastra &#171;skype.Skype&#187; skypeforlinux<\/li>\n<li>Alt+E: arat\u0103 fereastra &#171;jetbrains-idea&#187; idea.sh<\/li>\n<\/ul>\n<p><\/p>\n<p>\u0218i a\u0219a mai departe. Fiecare poate configura combina\u021biile de taste \u0219i software-ul dup\u0103 bunul plac.<br \/>\nDac\u0103 totul a fost configurat corect, putem comuta \u00eentre feron\u021be prin simpla ap\u0103sare a tastelor indicate mai sus.<\/p>\n<p><\/p>\n<p>\u00cei dezam\u0103gesc pe iubitorii Chrome: o fereastr\u0103 obi\u0219nuit\u0103 nu poate fi distins\u0103 de o fereastr\u0103 incognito \u00een func\u021bie de ie\u0219ire. <em>wmctrl<\/em> nu po\u021bi, pentru c\u0103 au denumiri de clase \u0219i titluri de fereastr\u0103 identice. \u00cen regex-urile propuse, simbolurile N* \u0219i I* sunt necesare doar pentru a face ca aceste expresii regulate s\u0103 se diferentieze una de cealalt\u0103, permi\u021b\u00e2ndu-le s\u0103 fie atribuite ferestrelor principale diferite.<\/p>\n<p><\/p>\n<p>Pentru a reseta fereastra principal\u0103 a combina\u021biei anterioare (de fapt pentru regex-ul care <strong>showwin<\/strong> a fost apelat ultima dat\u0103) trebuie s\u0103 apel\u0103m scriptul <strong>showwinDetach<\/strong>. Am alocat aceast\u0103 script pe o combina\u021bie de taste <em>Alt+Backspace<\/em>. <\/p>\n<p><\/p>\n<p>Scriptul <strong>showwin<\/strong> are o alt\u0103 func\u021bie. C\u00e2nd este apelat cu un singur parametru (\u00een acest caz, parametrul este pur \u0219i simplu un identificator), atunci nu verific\u0103 deloc regex-ul, ci consider\u0103 toate ferestrelor potrivite. Acest lucru pare inutil, totu\u0219i, astfel putem aloca orice fereastr\u0103 ca principal\u0103 \u0219i s\u0103 comut\u0103m rapid la aceast\u0103 fereastr\u0103.<\/p>\n<p><\/p>\n<p>Am configurat urm\u0103toarele combina\u021bii:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+1: arat\u0103 fereastra &#171;CustomKey1&#187;<\/li>\n<li>Alt+2: arat\u0103 fereastra &#171;CustomKey2&#187;<\/li>\n<li>\u2026<\/li>\n<li>Alt+0: arat\u0103 fereastra &#171;CustomKey0&#187;<\/li>\n<li>Alt+Backspace: showwinDetach<\/li>\n<\/ul>\n<p><\/p>\n<p>Astfel pot asocia orice fereastr\u0103 cu combina\u021biile <em>Alt+1<\/em>\u2026<em>Alt+0<\/em>. Pur \u0219i simplu ap\u0103s\u00e2nd <em>Alt+1<\/em> asociez fereastra curent\u0103 cu aceast\u0103 combina\u021bie. Pot anula asocierea ap\u0103s\u00e2nd <em>Alt+1<\/em>, apoi <em>Alt+Backspace<\/em>. Sau pot \u00eenchide fereastra, asta func\u021bioneaz\u0103 de asemenea.<\/p>\n<p><\/p>\n<p>\u00cen continuare, voi relata c\u00e2teva detalii tehnice. Nu trebuie s\u0103 le cite\u0219ti, po\u021bi \u00eencerca pur \u0219i simplu s\u0103 le configurezi \u0219i s\u0103 vezi. Dar totu\u0219i a\u0219 recomanda s\u0103 te familiarizezi cu scripturile altora \u00eenainte de a le rula pe computerul t\u0103u :\u3002<\/p>\n<p><\/p>\n<h2 id=\"kak-razlichat-raznye-okna-odnogo-prilozheniya\">Cum s\u0103 distingi ferontele diferite ale acelea\u0219i aplica\u021bii<\/h2>\n<p><\/p>\n<p>\u00cen principiu, primul exemplu \u201ewmctrl -a skype.Skype -x\u201d a fost func\u021bional \u0219i poate fi utilizat. Dar s\u0103 ne uit\u0103m din nou la exemplul cu Firefox, \u00een care sunt deschise 2 feron\u021be:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">0x04400003 0 Navigator.Firefox N\/A Google Traduc\u0103tor - Mozilla Firefox\n0x04400218 0 Navigator.Firefox N\/A Cele mai bune post\u0103ri \u00een ultimele 24 de ore \/ Habr - Mozilla Firefox (Navigare Privat\u0103)<\/code><\/pre>\n<p><\/p>\n<p>Prima fereastr\u0103 - modul normal, iar a doua - Navigare Privat\u0103. Aceasta ar trebui s\u0103 fie considerat\u0103 feron\u021be diferite \u0219i s\u0103 putem comuta \u00eentre ele cu combina\u021bii de taste diferite. <\/p>\n<p><\/p>\n<p>Trebuie s\u0103 complic\u0103m scriptul care comut\u0103 feron\u021bele. Am folosit urm\u0103toarea solu\u021bie: s\u0103 list\u0103m toate feron\u021bele, s\u0103 facem <em>grep<\/em> prin regex, s\u0103 lu\u0103m prima linie cu ajutorul <em>head<\/em>, s\u0103 extrag prima coloan\u0103 (acesta va fi id-ul feron\u021bei) folosind <em>cut<\/em>, s\u0103 comut\u0103m la fereastr\u0103 dup\u0103 id.<\/p>\n<p><\/p>\n<p>Aici ar trebui s\u0103 fie o glum\u0103 despre expresiile regulate \u0219i dou\u0103 probleme, dar de fapt nu folosesc nimic complex. Expresiile regulate sunt necesare pentru a putea indica sf\u00e2r\u0219itul liniei (simbolul \u201e$\u201d) \u0219i pentru a distinge \u201eMozilla Firefox$\u201d de \u201eMozilla Firefox (Navigare Privat\u0103)$\u201d.<\/p>\n<p><\/p>\n<p>Echipa arat\u0103 cam a\u0219a:<\/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>Aici deja putem ghici a doua caracteristic\u0103 a scriptului: dac\u0103 grep nu a returnat nimic, \u00eenseamn\u0103 c\u0103 aplica\u021bia dorit\u0103 nu este deschis\u0103 \u0219i trebuie s\u0103 o lans\u0103m, execut\u00e2nd comanda din al doilea parametru. Apoi, verific\u0103m periodic dac\u0103 fereastra dorit\u0103 s-a deschis, pentru a-i transfera focalizarea. Nu voi insista pe acest subiect, cine are nevoie, va verifica sursele.<\/p>\n<p><\/p>\n<h2 id=\"kogda-okna-prilozheniya-ne-razlichimy\">C\u00e2nd feron\u021bele aplica\u021biei nu sunt distinse<\/h2>\n<p><\/p>\n<p>A\u0219adar, am \u00eenv\u0103\u021bat s\u0103 transfer\u0103m focalizarea pe fereastra aplica\u021biei dorite. Dar ce facem dac\u0103 sunt deschise mai multe feron\u021be ale aplica\u021biei? La care dintre ele ar trebui s\u0103 transfer\u0103m focalizarea? Scriptul de mai sus va transfera cel mai probabil focalizarea primei feron\u021be deschise. Totu\u0219i, am dori mai mult\u0103 flexibilitate. Ne-ar pl\u0103cea s\u0103 putem re\u021bine exact care fereastr\u0103 ne trebuie \u0219i s\u0103 ne comut\u0103m exact la acea fereastr\u0103.<\/p>\n<p><\/p>\n<p>Ideea era aceasta: Dac\u0103 dorim s\u0103 re\u021binem pentru o combina\u021bie de taste o fereastr\u0103 specific\u0103, trebuie s\u0103 ap\u0103s\u0103m aceast\u0103 combina\u021bie atunci c\u00e2nd fereastra dorit\u0103 este \u00een focalizare. Ulterior, c\u00e2nd ap\u0103s\u0103m aceast\u0103 combina\u021bie, focalizarea va fi transferat\u0103 exact acestei feron\u021be. P\u00e2n\u0103 c\u00e2nd fereastra nu se va \u00eenchide sau nu vom reseta pentru aceast\u0103 combina\u021bie a scriptului. <strong>showwinDetach<\/strong>.<\/p>\n<p><\/p>\n<p>Algoritmul scriptului <strong>showwin<\/strong> este cam a\u0219a:<\/p>\n<p><\/p>\n<ul>\n<li>Verific\u0103m dac\u0103 nu am re\u021binut anterior id-ul feron\u021bei la care trebuie s\u0103 transfer\u0103m focalizarea.<br \/>\nDac\u0103 am re\u021binut \u0219i acea fereastr\u0103 \u00eenc\u0103 exist\u0103, atunci transfer\u0103m focalizarea c\u0103tre ea \u0219i ie\u0219im. <\/li>\n<li>Vedem ce fereastr\u0103 este acum \u00een focalizare \u0219i, dac\u0103 se potrive\u0219te cererii noastre, \u00eei re\u021binem id-ul pentru a reveni la ea mai t\u00e2rziu \u0219i ie\u0219im.<\/li>\n<li>Trebuie s\u0103 ne mut\u0103m la orice fel de fereastr\u0103 potrivit\u0103, dac\u0103 exist\u0103, sau s\u0103 deschidem aplica\u021bia necesar\u0103.<\/li>\n<\/ul>\n<p><\/p>\n<p>Putem afla ce fereastr\u0103 este acum \u00een focalizare cu ajutorul utilitarului de consol\u0103 xdotool, convertind ie\u0219irea sa \u00een format hexazecimal:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ printf \"0xx\" `xdotool getwindowfocus`<\/code><\/pre>\n<p><\/p>\n<p>Este mai u\u0219or s\u0103 memorezi ceva \u00een bash, cre\u00e2nd fi\u0219iere \u00een sistemul de fi\u0219iere virtual aflat \u00een memorie. \u00cen Ubuntu, acesta este conectat \u00een mod implicit \u00een <em>\/dev\/shm\/<\/em>. Nu pot spune nimic despre alte distribu\u021bii, sper c\u0103 ceva similar exist\u0103 \u0219i acolo. Po\u021bi verifica cu comanda:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ mount -l | grep tmpfs<\/code><\/pre>\n<p><\/p>\n<p>Scriptul va crea directoare goale \u00een aceast\u0103 folder, precum acestea: <em>\/dev\/shm\/$USER\/showwin\/$SEARCH_REGEX\/$WINDOW_ID<\/em>. \u00cen plus, la fiecare apel va crea un symlink <em>\/dev\/shm\/$USER\/showwin\/showwin_last<\/em> pe <em>\/dev\/shm\/$USER\/showwin\/$SEARCH_REGEX<\/em>. Acest lucru va fi necesar pentru a elimina, dac\u0103 este nevoie, id-ul feron\u021bei pentru o combina\u021bie specific\u0103 cu ajutorul scriptului. <strong>showwinDetach<\/strong>.<\/p>\n<p><\/p>\n<h2 id=\"chto-mozhno-uluchshit\">Ce ar putea fi \u00eembun\u0103t\u0103\u021bit<\/h2>\n<p><\/p>\n<p>\u00cen primul r\u00e2nd, scripturile trebuie configurate manual. Cu siguran\u021b\u0103, din cauza necesit\u0103\u021bii de a \u00een\u021belege \u0219i de a face multe lucruri manual, mul\u021bi dintre voi nu vor \u00eencerca nici m\u0103car s\u0103 configureze sistemul. Dac\u0103 ar exista posibilitatea de a instala pur \u0219i simplu un pachet \u0219i de a configura totul mai u\u0219or, atunci, poate, ar c\u00e2\u0219tiga o oarecare popularitate. \u0218i atunci, cine \u0219tie, poate c\u0103 aplica\u021bia ar fi inclus\u0103 \u0219i \u00een distribu\u021biile standard.<\/p>\n<p><\/p>\n<p>\u0218i, poate, s-ar putea face mai simplu. Dac\u0103, dup\u0103 ID-ul ferestrei, ai putea afla ID-ul procesului care a creat-o, iar prin ID-ul procesului, ai putea identifica ce comand\u0103 l-a generat, ai putea automatiza configurarea. De fapt, nu m-am aprofundat \u00een aceast\u0103 posibilitate. Ceea ce vreau s\u0103 spun este c\u0103, personal, sunt mul\u021bumit de modul \u00een care func\u021bioneaz\u0103 acum. Dar dac\u0103 altcineva ar g\u0103si abordarea util\u0103 \u0219i ar \u00eembun\u0103t\u0103\u021bi-o, a\u0219 folosi cu pl\u0103cere solu\u021bia mai bun\u0103.<\/p>\n<p><\/p>\n<p>O alt\u0103 problem\u0103, a\u0219a cum am men\u021bionat, este c\u0103 \u00een anumite cazuri ferontele nu pot fi distinse una de alta. P\u00e2n\u0103 acum am observat asta doar cu incognito \u00een chrome\/chromium, dar, poate, exist\u0103 \u0219i alte cazuri similare. \u00cen cel mai r\u0103u caz, exist\u0103 \u00eentotdeauna op\u021biunea combina\u021biilor universale. <em>Alt+1<\/em>\u2026<em>Alt+0<\/em>. Din nou, folosesc Firefox \u0219i, personal, aceast\u0103 problem\u0103 nu este semnificativ\u0103 pentru mine.<\/p>\n<p><\/p>\n<p>O problem\u0103 semnificativ\u0103 pentru mine este c\u0103, din punct de vedere profesional, folosesc Mac OS \u0219i nu am reu\u0219it s\u0103 configurez nimic similar acolo. Utilitarul <em>wmctrl<\/em> pare s\u0103 fi fost instalat, dar acesta nu func\u021bioneaz\u0103 corespunz\u0103tor pe Mac OS. Exist\u0103 ceva ce pot face cu aplica\u021bia <em>Automator<\/em>, dar aceasta este at\u00e2t de lent\u0103 \u00eenc\u00e2t nu este confortabil s\u0103 o folose\u0219ti chiar \u0219i c\u00e2nd func\u021bioneaz\u0103. Nu am reu\u0219it nici s\u0103 configurez combina\u021biile de taste astfel \u00eenc\u00e2t s\u0103 func\u021bioneze \u00een toate programele. Dac\u0103 cineva g\u0103se\u0219te o solu\u021bie, a\u0219 fi bucuros s\u0103 o folosesc.<\/p>\n<p><\/p>\n<h2 id=\"vmesto-zaklyucheniya\">\u00cen concluzie<\/h2>\n<p><\/p>\n<p>Am scris, f\u0103r\u0103 s\u0103 vreau, destul de multe cuvinte pentru o func\u021bionalitate care p\u0103rea at\u00e2t de simpl\u0103. Am vrut s\u0103 transmit ideea f\u0103r\u0103 a \u00eenc\u0103rca textul, dar p\u00e2n\u0103 acum nu am g\u0103sit o modalitate de a explica mai simplu. Poate c\u0103 \u00een format video ar fi mai bine, dar aici nu este foarte apreciat.<\/p>\n<p><\/p>\n<p>Am \u00eemp\u0103rt\u0103\u0219it pu\u021bin despre ce se afl\u0103 sub capot\u0103 \u00een script \u0219i cum se configureaz\u0103 acesta. Nu m-am ad\u00e2ncit \u00een detalii despre script, dar are doar 50 de linii, a\u0219a c\u0103 nu este greu de \u00een\u021beles. <\/p>\n<p><\/p>\n<p>Sper c\u0103 cineva va \u00eencerca aceast\u0103 idee \u0219i, poate, o va aprecia. Pot spune c\u0103 scriptul a fost scris acum vreo 3 ani \u0219i mi-e EXTREM de util. At\u00e2t de util, \u00eenc\u00e2t \u00eemi provoac\u0103 un disconfort serios atunci c\u00e2nd lucrez pe computerele altora. \u0218i pe MacBook-ul de la munc\u0103. <\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/masyamandev\/Showwin-script\">Link c\u0103tre scripturi<\/a><\/noindex><\/p>\n<p>Sursa: <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.4 - 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\/ro\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Control alternativ al ferestrelor \u00een Linux | ProHoster","description":"Fac parte din cei care folosesc Caps Lock pentru a schimba limba, pentru c\u0103 mi-e lene s\u0103 ap\u0103s dou\u0103 taste c\u00e2nd pot ap\u0103sa una singur\u0103.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/55206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=55206"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/55206\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=55206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=55206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=55206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}