{"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\/sv\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","title":{"rendered":"Alternativ f\u00f6nsterhantering i Linux","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Jag \u00e4r en av dem som st\u00e4ller in Caps Lock f\u00f6r att v\u00e4xla layout eftersom jag \u00e4r lat och inte vill trycka p\u00e5 tv\u00e5 tangenter n\u00e4r jag kan trycka p\u00e5 en. Jag skulle till och med vilja ha tv\u00e5 on\u00f6diga tangenter: en f\u00f6r att aktivera den engelska layouten och en annan f\u00f6r den ryska. Men den andra on\u00f6diga tangenten \u00e4r f\u00f6r att \u00f6ppna kontextmenyn, en s\u00e5 on\u00f6dig funktion att m\u00e5nga laptopstillverkare tar bort den. S\u00e5 jag f\u00e5r n\u00f6ja mig med det jag har. <\/p>\n<p><\/p>\n<p>Och jag vill inte leta efter ikonerna p\u00e5 aktivitetsf\u00e4ltet n\u00e4r jag v\u00e4xlar mellan f\u00f6nster, jag vill bara trycka p\u00e5 en tangentkombination (idealiskt sett en enda, men det finns inga lediga on\u00f6diga tangenter kvar) och direkt komma till det f\u00f6nster jag beh\u00f6ver. Till exempel s\u00e5 h\u00e4r: <em>Alt+Tab<\/em>, bl\u00e4ddra mellan skrivbord och s\u00e5 vidare. Jag vill trycka p\u00e5 en tangentkombination (idealiskt sett en enda, men inga lediga on\u00f6diga tangenter finns kvar) och direkt komma till det f\u00f6nster jag beh\u00f6ver. Till exempel s\u00e5 h\u00e4r:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+F: Firefox<\/li>\n<li>Alt+D: Firefox (Privat Bl\u00e4ddring)<\/li>\n<li>Alt+T: Terminal<\/li>\n<li>Alt+M: Kalkylator<\/li>\n<li>Alt+E: IntelliJ Idea<\/li>\n<li>och s\u00e5 vidare.<\/li>\n<\/ul>\n<p><\/p>\n<p>Dessutom vill jag att n\u00e4r jag trycker p\u00e5 <em>Alt+M<\/em> s\u00e5 ska jag se kalkylatorn oavsett om programmet \u00e4r ig\u00e5ng just nu eller inte. Om det \u00e4r ig\u00e5ng, ska fokus skickas till det f\u00f6nstret, men om det inte \u00e4r ig\u00e5ng \u2013 starta det n\u00f6dv\u00e4ndiga programmet och ge fokus n\u00e4r det \u00e4r laddat.<\/p>\n<p><\/p>\n<p>F\u00f6r situationer som inte t\u00e4cks av det f\u00f6reg\u00e5ende scenariot vill jag ha universella tangentkombinationer f\u00f6r att enkelt kunna tilldela dem till n\u00e5gra av de \u00f6ppna f\u00f6nster. Till exempel har jag 10 kombinationer tilldelade fr\u00e5n <em>Alt+1<\/em> till <em>Alt+0<\/em>, som inte \u00e4r kopplade till n\u00e5gra program. Jag kan helt enkelt trycka p\u00e5 <em>Alt+1<\/em> och f\u00f6nstret som just nu har fokus kommer att f\u00e5 fokus n\u00e4r jag trycker p\u00e5. <em>Alt+1<\/em>.<\/p>\n<p><\/p>\n<p>Under tar jag upp beskrivningen av n\u00e5gra ytterligare funktioner och svarar p\u00e5 hur man kan g\u00f6ra detta. Men jag varnar p\u00e5 f\u00f6rhand att en s\u00e5dan anpassning \"till sig sj\u00e4lv\" kan skapa starkt beroende och till och med abstinens om man m\u00e5ste anv\u00e4nda Windows, Mac OS eller till och med en annan dator med Linux.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>I sj\u00e4lva verket, om man t\u00e4nker p\u00e5 det, anv\u00e4nder vi inte s\u00e5 m\u00e5nga program i v\u00e5r vardag. Webbl\u00e4saren, terminalen, IDE, n\u00e5gon meddelandeapp, filhanteraren, kalkylatorn och, kanske, det \u00e4r i stort sett allt. Man beh\u00f6ver inte s\u00e5 m\u00e5nga tangentkombinationer f\u00f6r att t\u00e4cka 95% av de dagliga uppgifterna.<\/p>\n<p><\/p>\n<p>F\u00f6r program som har flera \u00f6ppna f\u00f6nster kan ett av dem g\u00f6ras till huvudf\u00f6nster. Till exempel, flera \u00f6ppna f\u00f6nster av IntelliJ Idea kan tilldelas till <em>Alt+E<\/em>. Under normala omst\u00e4ndigheter, n\u00e4r man trycker p\u00e5 <em>Alt+E<\/em> kommer ett f\u00f6nster av det aktuella programmet att \u00f6ppnas, troligen det som \u00f6ppnades f\u00f6rst. Men om man trycker p\u00e5 <em>Alt+E<\/em> N\u00e4r ett av f\u00f6nstren i detta program redan \u00e4r i fokus kommer just det f\u00f6nstret att tilldelas som huvudf\u00f6nster och fokus kommer att \u00f6verf\u00f6ras dit vid efterf\u00f6ljande tangentkombinationer. <\/p>\n<p><\/p>\n<p>Det g\u00e5r att omdisponera huvudf\u00f6nstret. F\u00f6r att g\u00f6ra det m\u00e5ste du f\u00f6rst \u00e5terst\u00e4lla tangentkombinationen och sedan tilldela ett annat f\u00f6nster som huvudf\u00f6nster. F\u00f6r att \u00e5terst\u00e4lla tangentkombinationen, tryck f\u00f6rst p\u00e5 sj\u00e4lva kombinationen och sedan p\u00e5 den speciella \u00e5terst\u00e4llningstangentkombinationen, som f\u00f6r mig \u00e4r tilldelad till <em>Alt+Backspace<\/em>. Det kommer att k\u00f6ra ett skript som tar bort tilldelningen av huvudf\u00f6nstret f\u00f6r den tidigare kombinationen. D\u00e4refter kan du tilldela ett nytt huvudf\u00f6nster som beskrivits i f\u00f6reg\u00e5ende stycke. \u00c5terst\u00e4llningen av det kopplade f\u00f6nstret till universella kombinationer sker p\u00e5 samma s\u00e4tt.<\/p>\n<p><\/p>\n<p>Introduktionen blev l\u00e5ng, men jag ville f\u00f6rst ber\u00e4tta vad vi ska g\u00f6ra och sedan f\u00f6rklara hur man g\u00f6r det.<\/p>\n<p><\/p>\n<h2 id=\"dlya-teh-komu-nadoelo-chitat\">F\u00f6r dem som \u00e4r tr\u00f6tta p\u00e5 att l\u00e4sa<\/h2>\n<p><\/p>\n<p>Kort sagt, l\u00e4nken till skripten finns i slutet av artikeln.<\/p>\n<p><\/p>\n<p>Men det g\u00e5r inte att installera och anv\u00e4nda direkt. Du m\u00e5ste f\u00f6rst f\u00f6rst\u00e5 hur skriptet hittar det \u00f6nskade f\u00f6nstret. Utan detta kan du inte ange f\u00f6r skriptet vart fokus verkligen ska \u00f6verf\u00f6ras. Och du m\u00e5ste f\u00f6rst\u00e5 vad du ska g\u00f6ra om det pl\u00f6tsligt inte finns n\u00e5got l\u00e4mpligt f\u00f6nster.<\/p>\n<p><\/p>\n<p>Och jag kommer inte att fokusera p\u00e5 hur man st\u00e4ller in k\u00f6rningen av skript genom att trycka p\u00e5 tangentkombinationer. Till exempel i KDE g\u00e5r detta i Systeminst\u00e4llningar \u2192 Tangentbordsgenv\u00e4gar \u2192 Anpassade genv\u00e4gar. I andra f\u00f6nsterhanterare borde det ocks\u00e5 finnas n\u00e5got liknande.<\/p>\n<p><\/p>\n<h2 id=\"znakomstvo-s-wmctrl\">Introduktion till wmctrl<\/h2>\n<p><\/p>\n<p><em>Wmctrl<\/em> \u00e4r ett kommandoradsverktyg f\u00f6r att interagera med X Window Manager. Det \u00e4r det centrala programmet f\u00f6r skriptet. L\u00e5t oss snabbt titta p\u00e5 hur man kan anv\u00e4nda det.<\/p>\n<p><\/p>\n<p>F\u00f6r att b\u00f6rja, l\u00e5t oss visa en lista \u00f6ver \u00f6ppna f\u00f6nster:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ wmctrl -lx\n0x01e0000e -1 plasmashell.plasmashell             N\/A Skrivbord \u2014 Plasma\n0x01e0001e -1 plasmashell.plasmashell             N\/A Plasma\n0x03a00001  0 skype.Skype                         N\/A Skype\n0x04400003  0 Navigator.Firefox                   N\/A Google \u00d6vers\u00e4tt - Mozilla Firefox\n0x04400218  0 Navigator.Firefox                   N\/A B\u00e4sta publiceringar under dagen \/ Habr - Mozilla Firefox (Privat webbl\u00e4sning)\n...<\/code><\/pre>\n<p><\/p>\n<p>Alternativ <em>-l<\/em> visar en lista \u00f6ver alla \u00f6ppna f\u00f6nster, och <em>-x<\/em> l\u00e4gger till klassnamnet till listan (<em>skype.Skype<\/em>, <em>Navigator.Firefox<\/em> osv). Vi beh\u00f6ver f\u00f6nstrets id (kolumn 1), klassnamnet (kolumn 3) och f\u00f6nstrets namn (den sista kolumnen).<\/p>\n<p><\/p>\n<p>Du kan prova att aktivera ett f\u00f6nster med hj\u00e4lp av alternativet <em>-a<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ wmctrl -a skype.Skype -x<\/code><\/pre>\n<p><\/p>\n<p>Om allt g\u00e5r enligt planen ska Skype-f\u00f6nstret dyka upp p\u00e5 sk\u00e4rmen. Om du ist\u00e4llet anv\u00e4nder alternativet <em>-x<\/em> anv\u00e4nd ist\u00e4llet alternativet <em>-i<\/em>, s\u00e5 ist\u00e4llet f\u00f6r klassnamnet kan du ange f\u00f6nstrets id. Problemet med id \u00e4r att f\u00f6nstrets id \u00e4ndras varje g\u00e5ng applikationen startas, och vi kan inte veta det i f\u00f6rv\u00e4g. \u00c5 andra sidan identifierar denna attribut entydigt f\u00f6nstret, vilket kan vara viktigt n\u00e4r applikationen \u00f6ppnar mer \u00e4n ett f\u00f6nster. Mer om detta senare.<\/p>\n<p><\/p>\n<p>Vid det h\u00e4r steget m\u00e5ste vi komma ih\u00e5g att vi ska s\u00f6ka efter r\u00e4tt f\u00f6nster med hj\u00e4lp av regex i utdata <em>wmctrl -lx<\/em>. Men det betyder inte att vi n\u00f6dv\u00e4ndigtvis m\u00e5ste anv\u00e4nda n\u00e5got komplicerat. Oftast r\u00e4cker det med f\u00f6nstrets klassnamn eller titel. <\/p>\n<p><\/p>\n<p>I princip borde huvudid\u00e9n redan vara klar. I inst\u00e4llningarna f\u00f6r globala genv\u00e4gar f\u00f6r din f\u00f6nsterhanterare st\u00e4ller vi in den \u00f6nskade kombinationen f\u00f6r att k\u00f6ra skriptet.<\/p>\n<p><\/p>\n<h2 id=\"kak-polzovatsya-skriptami\">Hur man anv\u00e4nder skript<\/h2>\n<p><\/p>\n<p>F\u00f6rst m\u00e5ste du installera konsolprogram <em>wmctrl<\/em> och <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>D\u00e4refter m\u00e5ste du ladda ner skripten och l\u00e4gga till dem i <em>$PATH<\/em>. Jag brukar l\u00e4gga dem i <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>Om katalogen <em>~\/bin<\/em> inte existerade, s\u00e5 m\u00e5ste den skapas och du m\u00e5ste starta om (eller logga ut och in igen), annars <em>~\/bin<\/em> kommer inte att hamna i <em>$PATH<\/em>. Om allt \u00e4r gjort korrekt, b\u00f6r skripten vara tillg\u00e4ngliga fr\u00e5n konsolen och autocomplete med Tab b\u00f6r fungera.<\/p>\n<p><\/p>\n<p>Huvudskriptet <strong>showwin<\/strong> tar emot 2 parametrar: den f\u00f6rsta \u00e4r regex som vi ska anv\u00e4nda f\u00f6r att s\u00f6ka efter det \u00f6nskade f\u00f6nstret, och den andra parametern \u00e4r kommandot som ska k\u00f6ras om det \u00f6nskade f\u00f6nstret inte hittades. <\/p>\n<p><\/p>\n<p>Du kan f\u00f6rs\u00f6ka k\u00f6ra skriptet, till exempel:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ showwin \"Mozilla Firefox$\" firefox<\/code><\/pre>\n<p><\/p>\n<p>Om Firefox \u00e4r installerat, b\u00f6r fokus ges till dess f\u00f6nster. \u00c4ven om Firefox inte har k\u00f6rts, b\u00f6r det startas.<\/p>\n<p><\/p>\n<p>Om det lyckades, kan du f\u00f6rs\u00f6ka st\u00e4lla in k\u00f6rning av kommandon f\u00f6r kombinationer. I inst\u00e4llningarna f\u00f6r globala genv\u00e4gar l\u00e4gger vi till:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+F: visa f\u00f6nster &#171;Mozilla Firefox$&#187; firefox<\/li>\n<li>Alt+D: visa f\u00f6nster &#171;Mozilla Firefox (Privat webbrowsing)$&#187; &#171;firefox -private-window&#187;<\/li>\n<li>Alt+C: visa f\u00f6nster &#171;chromium-browser.Chromium-browser N*&#187; chromium-browser<\/li>\n<li>Alt+X: visa f\u00f6nster &#171;chromium-browser.Chromium-browser I*&#187; &#171;chromium-browser -incognito&#187;<\/li>\n<li>Alt+S: visa f\u00f6nster &#171;skype.Skype&#187; skypeforlinux<\/li>\n<li>Alt+E: visa f\u00f6nster &#171;jetbrains-idea&#187; idea.sh<\/li>\n<\/ul>\n<p><\/p>\n<p>Och s\u00e5 vidare. Var och en kan st\u00e4lla in sina egna tangentkombinationer och program som de \u00f6nskar.<br \/>\nOm allt \u00e4r korrekt st\u00e4llt in, b\u00f6r vi enkelt kunna v\u00e4xla mellan f\u00f6nster med de angivna kombinationerna.<\/p>\n<p><\/p>\n<p>Jag kommer att g\u00f6ra besvikna \u00e4lskare av Chrome: normala f\u00f6nster kan s\u00e4rskiljas fr\u00e5n inkognitof\u00f6nster via utdata <em>wmctrl<\/em> Det g\u00e5r inte, de har samma klassnamn och f\u00f6nstertitlar. De f\u00f6reslagna regex-tecknen N* och I* beh\u00f6vs bara f\u00f6r att g\u00f6ra dessa regulj\u00e4ra uttryck olika fr\u00e5n varandra s\u00e5 att olika f\u00f6nster kan tilldelas som prim\u00e4ra.<\/p>\n<p><\/p>\n<p>F\u00f6r att \u00e5terst\u00e4lla huvudf\u00f6nstret fr\u00e5n den f\u00f6reg\u00e5ende kombinationen (i praktiken f\u00f6r regex, som <strong>showwin<\/strong> anv\u00e4ndes senast) m\u00e5ste scriptet anropas. <strong>showwinDetach<\/strong>. Jag har detta script tilldelat en tangentkombination. <em>Alt+Backspace<\/em>. <\/p>\n<p><\/p>\n<p>Scriptet <strong>showwin<\/strong> har en annan funktion. N\u00e4r det anropas med ett enda parameter (i det h\u00e4r fallet \u00e4r parametern bara ett identifieringsnummer), kontrollerar det inte regex alls, utan anser att alla f\u00f6nster \u00e4r l\u00e4mpliga. I sig sj\u00e4lv verkar detta on\u00f6digt, men p\u00e5 s\u00e5 s\u00e4tt kan vi tilldela vilket f\u00f6nster som helst som prim\u00e4rt och snabbt v\u00e4xla till just det f\u00f6nstret.<\/p>\n<p><\/p>\n<p>Jag har st\u00e4llt in f\u00f6ljande kombinationer:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+1: visa f\u00f6nster &#171;CustomKey1&#187;<\/li>\n<li>Alt+2: visa f\u00f6nster &#171;CustomKey2&#187;<\/li>\n<li>\u2026<\/li>\n<li>Alt+0: visa f\u00f6nster &#171;CustomKey0&#187;<\/li>\n<li>Alt+Backspace: showwinDetach<\/li>\n<\/ul>\n<p><\/p>\n<p>S\u00e5ledes kan jag knyta vilka f\u00f6nster som helst till kombinationerna. <em>Alt+1<\/em>&#8230;<em>Alt+0<\/em>Genom att helt enkelt trycka p\u00e5 <em>Alt+1<\/em> binder jag det aktuella f\u00f6nstret till denna kombination. Jag kan avbinda genom att trycka p\u00e5 <em>Alt+1<\/em>, och klicka sedan <em>Alt+Backspace<\/em>. Eller st\u00e4nga f\u00f6nstret, det fungerar ocks\u00e5.<\/p>\n<p><\/p>\n<p>Sedan ber\u00e4ttar jag lite tekniska detaljer. De beh\u00f6ver inte l\u00e4sas, bara prova att st\u00e4lla in och se. Men jag skulle \u00e4nd\u00e5 rekommendera att f\u00f6rst\u00e5 andras skript innan man k\u00f6r dem p\u00e5 sin dator :).<\/p>\n<p><\/p>\n<h2 id=\"kak-razlichat-raznye-okna-odnogo-prilozheniya\">Hur man s\u00e4rskiljer olika f\u00f6nster av samma applikation<\/h2>\n<p><\/p>\n<p>I princip var det allra f\u00f6rsta exemplet \u00abwmctrl -a skype.Skype -x\u00bb fungerande och kan anv\u00e4ndas. Men l\u00e5t oss ta en titt p\u00e5 exemplet med Firefox, d\u00e4r tv\u00e5 f\u00f6nster \u00e4r \u00f6ppna:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">0x04400003  0 Navigator.Firefox                   N\/A Google Translate - Mozilla Firefox\n0x04400218  0 Navigator.Firefox                   N\/A B\u00e4sta inl\u00e4gg p\u00e5 ett dygn \/ Habr - Mozilla Firefox (Privat surfning)<\/code><\/pre>\n<p><\/p>\n<p>Det f\u00f6rsta f\u00f6nstret \u00e4r vanligt l\u00e4ge, och det andra \u00e4r Privat surfning. Dessa f\u00f6nster skulle vilja betraktas som olika applikationer och v\u00e4xla mellan dem med olika tangentkombinationer. <\/p>\n<p><\/p>\n<p>Det beh\u00f6vs en mer avancerad script f\u00f6r att v\u00e4xla mellan f\u00f6nster. Jag anv\u00e4nde en s\u00e5dan l\u00f6sning: skriv ut listan \u00f6ver alla f\u00f6nster, g\u00f6r <em>grep<\/em> med regex, ta den f\u00f6rsta raden med hj\u00e4lp av <em>head<\/em>, h\u00e4mta den f\u00f6rsta kolumnen (detta blir f\u00f6nstrets id) med hj\u00e4lp av <em>cut<\/em>, v\u00e4xla till f\u00f6nstret efter id.<\/p>\n<p><\/p>\n<p>Det borde finnas ett sk\u00e4mt om regulj\u00e4ra uttryck och tv\u00e5 problem, men i praktiken anv\u00e4nder jag inget komplicerat. Jag beh\u00f6ver regex f\u00f6r att kunna ange slutet av raden (tecknet \u00ab$\u00bb) och s\u00e4rskilja \u00abMozilla Firefox$\u00bb fr\u00e5n \u00abMozilla Firefox (Privat surfning)$\u00bb.<\/p>\n<p><\/p>\n<p>Teamet ser ungef\u00e4r ut s\u00e5 h\u00e4r:<\/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>H\u00e4r kan man redan gissa den andra egenskapen hos skriptet: om grep inte ger n\u00e5got resultat, betyder det att det \u00f6nskade programmet inte \u00e4r \u00f6ppet och att man m\u00e5ste starta det genom att utf\u00f6ra kommandot fr\u00e5n den andra parametern. Och sedan kontrollera regelbundet om det \u00f6nskade f\u00f6nstret har \u00f6ppnat sig, s\u00e5 att man kan ge det fokus. Jag ska inte g\u00e5 in p\u00e5 detaljer kring detta, de som beh\u00f6ver kan titta p\u00e5 k\u00e4llkoden.<\/p>\n<p><\/p>\n<h2 id=\"kogda-okna-prilozheniya-ne-razlichimy\">N\u00e4r applikationens f\u00f6nster \u00e4r oskiljaktiga<\/h2>\n<p><\/p>\n<p>S\u00e5, vi har l\u00e4rt oss att ge fokus till det \u00f6nskade applikationsf\u00f6nstret. Men vad h\u00e4nder om mer \u00e4n ett f\u00f6nster f\u00f6r applikationen \u00e4r \u00f6ppet? Vilket av dem ska f\u00e5 fokus? Skriptet ovan kommer f\u00f6rmodligen att ge fokus till det f\u00f6rsta \u00f6ppna f\u00f6nstret. Men vi skulle vilja ha mer flexibilitet. Vi vill kunna komma ih\u00e5g vilket f\u00f6nster vi egentligen beh\u00f6ver och v\u00e4xla till just det f\u00f6nstret.<\/p>\n<p><\/p>\n<p>Id\u00e9n var f\u00f6ljande: Om vi vill komma ih\u00e5g ett visst f\u00f6nster f\u00f6r en tangentkombination, m\u00e5ste vi trycka p\u00e5 denna kombination n\u00e4r det \u00f6nskade f\u00f6nstret \u00e4r i fokus. Vid framtida tryckningar p\u00e5 denna kombination kommer fokus att ges just till det f\u00f6nstret. S\u00e5 l\u00e4nge f\u00f6nstret inte st\u00e4ngs eller vi inte g\u00f6r en \u00e5terst\u00e4llning f\u00f6r denna tangentkombination av skriptet. <strong>showwinDetach<\/strong>.<\/p>\n<p><\/p>\n<p>Skriptets algoritm <strong>showwin<\/strong> ser ungef\u00e4r ut s\u00e5 h\u00e4r:<\/p>\n<p><\/p>\n<ul>\n<li>Kontrollera om vi tidigare har kommit ih\u00e5g id:t f\u00f6r f\u00f6nstret som vi beh\u00f6ver ge fokus.<br \/>\nOm vi har kommit ih\u00e5g och s\u00e5dant f\u00f6nster fortfarande existerar, ger vi fokus till det och avslutar. <\/li>\n<li>Vi kollar vilket f\u00f6nster som just nu har fokus, och om det passar v\u00e5r f\u00f6rfr\u00e5gan, kommer vi att komma ih\u00e5g dess id f\u00f6r att g\u00e5 till det senare och avsluta.<\/li>\n<li>Vi g\u00e5r \u00f6ver till n\u00e5got l\u00e4mpligt f\u00f6nster om det existerar eller \u00f6ppnar det n\u00f6dv\u00e4ndiga programmet.<\/li>\n<\/ul>\n<p><\/p>\n<p>F\u00f6r att ta reda p\u00e5 vilket f\u00f6nster som just nu har fokus kan man anv\u00e4nda konsolverktyget xdotool, genom att omvandla dess utdata till hexadecimalt format:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ printf \"0xx\" `xdotool getwindowfocus`<\/code><\/pre>\n<p><\/p>\n<p>Att komma ih\u00e5g n\u00e5got i bash \u00e4r enklast genom att skapa filer i ett virtuellt filsystem som finns i minnet. I Ubuntu \u00e4r detta standardkopplat i <em>\/dev\/shm\/<\/em>. Jag kan inte s\u00e4ga n\u00e5got om andra distributioner, men jag hoppas att n\u00e5got liknande ocks\u00e5 finns. Man kan titta med kommandot:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ mount -l | grep tmpfs<\/code><\/pre>\n<p><\/p>\n<p>Skriptet kommer att skapa tomma kataloger i denna mapp, s\u00e5dana h\u00e4r: <em>\/dev\/shm\/$USER\/showwin\/$SEARCH_REGEX\/$WINDOW_ID<\/em>. Dessutom kommer det vid varje anrop att skapa en symlink <em>\/dev\/shm\/$USER\/showwin\/showwin_last<\/em> till <em>\/dev\/shm\/$USER\/showwin\/$SEARCH_REGEX<\/em>. Detta kommer att beh\u00f6vas f\u00f6r att vid behov ta bort id:t f\u00f6r f\u00f6nstret f\u00f6r en viss tangentkombination med hj\u00e4lp av skriptet. <strong>showwinDetach<\/strong>.<\/p>\n<p><\/p>\n<h2 id=\"chto-mozhno-uluchshit\">Vad som kan f\u00f6rb\u00e4ttras<\/h2>\n<p><\/p>\n<p>F\u00f6r det f\u00f6rsta m\u00e5ste skripten st\u00e4llas in manuellt. Sannolikt, p\u00e5 grund av behovet att s\u00e4tta sig in i och g\u00f6ra mycket f\u00f6r hand, s\u00e5 m\u00e5nga av er kanske inte ens provar att st\u00e4lla in systemet. Om det fanns en m\u00f6jlighet att bara installera ett paket och enkelt konfigurera allt, s\u00e5 skulle det kanske f\u00e5 viss popularitet. D\u00e5 kanske det \u00e4ven skulle inkluderas i standarddistributioner.<\/p>\n<p><\/p>\n<p>Och, kanske kan det g\u00f6ras enklare. Om man kan ta reda p\u00e5 processens ID genom f\u00f6nstrets ID, och fr\u00e5n processens ID ta reda p\u00e5 vilket kommando som skapade det, s\u00e5 skulle man kunna automatisera inst\u00e4llningarna. Egentligen har jag inte unders\u00f6kt om det jag skrev i detta stycke \u00e4r m\u00f6jligt. Det handlar om att jag personligen \u00e4r n\u00f6jd med hur det fungerar just nu. Men om n\u00e5gon annan \u00e4n jag skulle tycka att tillv\u00e4gag\u00e5ngss\u00e4ttet \u00e4r bekv\u00e4mt och n\u00e5gra f\u00f6rb\u00e4ttrar det, s\u00e5 skulle jag g\u00e4rna anv\u00e4nda den b\u00e4sta l\u00f6sningen.<\/p>\n<p><\/p>\n<p>Ett annat problem, som jag redan har n\u00e4mnt, \u00e4r att i vissa fall g\u00e5r det inte att s\u00e4rskilja f\u00f6nster fr\u00e5n varandra. Jag har hittills sett detta endast med inkognito-l\u00e4get i chrome\/chromium, men kanske finns det liknande n\u00e5gon annanstans. I v\u00e4rsta fall finns alltid alternativet med universella kortkommandon. <em>Alt+1<\/em>&#8230;<em>Alt+0<\/em>. \u00c5terigen, jag anv\u00e4nder Firefox och f\u00f6r mig \u00e4r detta problem inte av stor betydelse.<\/p>\n<p><\/p>\n<p>Men ett betydande problem f\u00f6r mig \u00e4r att jag arbetar med Mac OS och d\u00e4r kunde jag inte st\u00e4lla in n\u00e5got liknande. Jag lyckades tydligen installera verktyget, men det fungerar knappt p\u00e5 Mac OS. Man kan g\u00f6ra n\u00e5got med applikationen <em>wmctrl<\/em> , men det laggar s\u00e5 mycket att det \u00e4r obekv\u00e4mt att anv\u00e4nda, \u00e4ven n\u00e4r det fungerar. Jag har inte heller lyckats st\u00e4lla in kortkommandon s\u00e5 att de fungerar i alla program. Om n\u00e5gon kommer p\u00e5 en l\u00f6sning \u2014 skulle jag vara glad att anv\u00e4nda den. <em>Automator<\/em>Det blev ov\u00e4ntat m\u00e5nga ord f\u00f6r en s\u00e5, till synes, enkel funktionalitet. Jag ville f\u00f6rmedla id\u00e9n utan att \u00f6verbelasta texten, men jag har fortfarande inte kommit p\u00e5 hur jag ska ber\u00e4tta enklare. Kanske skulle det vara b\u00e4ttre i videoformat, men det \u00e4r inte s\u00e5 popul\u00e4rt h\u00e4r.<\/p>\n<p><\/p>\n<h2 id=\"vmesto-zaklyucheniya\">Avslutande<\/h2>\n<p><\/p>\n<p>Jag har ber\u00e4ttat lite om vad som finns under huven p\u00e5 skriptet och hur man st\u00e4ller in det. Jag har inte g\u00e5tt in i detaljer kring sj\u00e4lva skriptet, men det \u00e4r bara 50 rader, s\u00e5 det \u00e4r inte sv\u00e5rt att f\u00f6rst\u00e5.<\/p>\n<p><\/p>\n<p>Jag ber\u00e4ttade lite om vad som finns under huven p\u00e5 skriptet och hur man st\u00e4ller in det. Jag gick inte in p\u00e5 detaljer om sj\u00e4lva skriptet, men det \u00e4r bara 50 rader, s\u00e5 det \u00e4r inte sv\u00e5rt att f\u00f6rst\u00e5. <\/p>\n<p><\/p>\n<p>Jag hoppas att n\u00e5gon annan testar den h\u00e4r id\u00e9n och kanske till och med uppskattar den. Personligen kan jag s\u00e4ga att skriptet skrevs f\u00f6r cirka 3 \u00e5r sedan och det \u00e4r MYCKET praktiskt f\u00f6r mig. S\u00e5 praktiskt att det skapar en allvarlig obehagsk\u00e4nsla n\u00e4r jag arbetar p\u00e5 andras datorer. Och med min arbets-MacBook. <\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/masyamandev\/Showwin-script\">L\u00e4nk till skripten<\/a><\/noindex><\/p>\n<p>K\u00e4lla: <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\/sv\/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=\"sv_SE\" \/>\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\/sv\/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\udd47Alternativ f\u00f6nsterhantering i Linux | ProHoster","description":"Jag \u00e4r en av dem som s\u00e4tter Caps Lock f\u00f6r att v\u00e4xla tangentbordslayout, eftersom jag \u00e4r f\u00f6r lat f\u00f6r att trycka p\u00e5 tv\u00e5 tangenter n\u00e4r jag kan trycka p\u00e5 en.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/55206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=55206"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/55206\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=55206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=55206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=55206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}