{"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\/da\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","title":{"rendered":"Alternativ vinduesstyring i Linux","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Jeg er en af dem, der s\u00e6tter Caps Lock til skift af layout, fordi jeg er for doven til at trykke p\u00e5 2 taster, n\u00e5r jeg kan klare mig med \u00e9n. Jeg ville endda \u00f8nske, at der var 2 un\u00f8dvendige taster: en til at aktivere det engelske layout og den anden til det russiske. Men den anden un\u00f8dvendige tast \u2014 det er genvejen til kontekstmenuen, som er s\u00e5 un\u00f8dvendig, at mange b\u00e6rbare producenter fjerner den. S\u00e5 jeg m\u00e5 n\u00f8jes med det, jeg har. <\/p>\n<p><\/p>\n<p>Og jeg \u00f8nsker heller ikke at lede efter ikonerne for vinduerne i proceslinjen, n\u00e5r jeg skifter mellem dem, fors\u00f8ge at fange navne ved at scrolle gennem <em>Alt+Tab<\/em>, bladre igennem skrivebordene osv. Jeg vil gerne trykke p\u00e5 en kombination af taster (ideelt set en enkelt, men der er ikke flere ledige un\u00f8dvendige taster tilbage) og straks komme ind i det vindue, jeg har brug for. For eksempel s\u00e5dan her:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+F: Firefox<\/li>\n<li>Alt+D: Firefox (Privat browsing)<\/li>\n<li>Alt+T: Terminal<\/li>\n<li>Alt+M: Lommeregner<\/li>\n<li>Alt+E: IntelliJ Idea<\/li>\n<li>osv.<\/li>\n<\/ul>\n<p><\/p>\n<p>Desuden, n\u00e5r jeg for eksempel trykker p\u00e5 <em>Alt+M<\/em> , vil jeg gerne se lommeregneren, uanset om programmet er \u00e5bent eller ej. Hvis det er \u00e5bent, skal vinduet have fokus, og hvis ikke, skal programmet startes og fokusoverf\u00f8res, n\u00e5r det er indl\u00e6st.<\/p>\n<p><\/p>\n<p>Til de situationer, der ikke d\u00e6kkes af det tidligere scenarie, vil jeg have universelle tastaturkombinationer, som let kan tildeles til ethvert \u00e5bent vindue. For eksempel har jeg tildelt 10 kombinationer fra <em>Alt+1<\/em> op til <em>Alt+0<\/em>, som ikke er bundet til nogen programmer. Jeg kan bare trykke p\u00e5 <em>Alt+1<\/em> og vinduet, der er i fokus, vil f\u00e5 fokus, n\u00e5r jeg trykker p\u00e5 <em>Alt+1<\/em>.<\/p>\n<p><\/p>\n<p>Under artiklen er der en beskrivelse af et par flere funktioner og et svar p\u00e5, hvordan man kan g\u00f8re det. Men jeg advarer straks om, at en s\u00e5dan tilpasning 'til sig selv' kan skabe en st\u00e6rk afh\u00e6ngighed og endda afv\u00e6nning, n\u00e5r man skal bruge Windows, Mac OS eller endda en fremmed computer med Linux.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Hvis man t\u00e6nker over det, bruger vi ikke s\u00e5 mange programmer i hverdagen. Browser, terminal, IDE, en eller anden messenger, filh\u00e5ndterer, lommeregner, og det er n\u00e6sten det hele. Det kr\u00e6ver ikke s\u00e5 mange tastaturkombinationer for at d\u00e6kke 95 % af de daglige opgaver.<\/p>\n<p><\/p>\n<p>For programmer med flere \u00e5bne vinduer kan et af dem tildeles som prim\u00e6rt. For eksempel, hvis flere vinduer af IntelliJ Idea er \u00e5bne, tildeles de til <em>Alt+E<\/em>. Under normale forhold, n\u00e5r man trykker p\u00e5 <em>Alt+E<\/em> der vil \u00e5bnes et vindue fra det p\u00e5g\u00e6ldende program, sandsynligvis det, der var \u00e5bent f\u00f8rst. Men hvis du klikker p\u00e5 <em>Alt+E<\/em> n\u00e5r et af vinduerne i det p\u00e5g\u00e6ldende program allerede er i fokus, s\u00e5 vil dette vindue blive tildelt som hovedvindue, og det vil modtage fokus ved de efterf\u00f8lgende tryk p\u00e5 kombinationen. <\/p>\n<p><\/p>\n<p>Hovedvinduet kan omassigneres. For at g\u00f8re dette skal du f\u00f8rst nulstille kombinationen og s\u00e5 tildele et andet vindue som hovedvindue. For at nulstille kombinationen skal du trykke p\u00e5 kombinationen selv og derefter p\u00e5 en speciel nulstillingskombination, som jeg har tildelt til <em>Alt+Backspace<\/em>. Dette vil kalde et script, som annullerer tildelingen af hovedvinduet til den forrige kombination. Derefter kan du tildele et nyt hovedvindue, som beskrevet i det foreg\u00e5ende afsnit. Nulstillingen af det knyttede vindue til universelle kombinationer foreg\u00e5r p\u00e5 samme m\u00e5de.<\/p>\n<p><\/p>\n<p>Indledningen blev lang, men jeg ville f\u00f8rst forklare, hvad vi vil g\u00f8re, og derefter hvordan man g\u00f8r det.<\/p>\n<p><\/p>\n<h2 id=\"dlya-teh-komu-nadoelo-chitat\">For dem, der er tr\u00e6tte af at l\u00e6se<\/h2>\n<p><\/p>\n<p>Kort sagt er linket til scripts nederst i artiklen.<\/p>\n<p><\/p>\n<p>Men selvom, vil du ikke kunne installere og bruge det straks. Du skal f\u00f8rst forst\u00e5, hvordan scriptet finder det n\u00f8dvendige vindue. Uden dette vil du ikke kunne angive, hvor fokus skal rettes hen. Og du skal forst\u00e5, hvad du skal g\u00f8re, hvis det passende vindue ikke findes.<\/p>\n<p><\/p>\n<p>Og jeg vil ikke fokusere p\u00e5, hvordan man indstiller udf\u00f8relsen af scripts ved at trykke p\u00e5 tastkombinationer. For eksempel i KDE er det i Systemindstillinger \u2192 Genveje \u2192 Brugerdefinerede genveje. Andre vinduesledere burde ogs\u00e5 have noget lignende.<\/p>\n<p><\/p>\n<h2 id=\"znakomstvo-s-wmctrl\">Introduktion til wmctrl<\/h2>\n<p><\/p>\n<p><em>Wmctrl<\/em> er et kommandolinjev\u00e6rkt\u00f8j til interaktion med X Window Manager. Dette er det centrale program for scriptet. Lad os hurtigt se p\u00e5, hvordan man kan bruge det.<\/p>\n<p><\/p>\n<p>F\u00f8rst skal vi vise en liste over \u00e5bne vinduer:<\/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 Overs\u00e6tter - Mozilla Firefox\n0x04400218  0 Navigator.Firefox                   N\/A Bedste offentligg\u00f8relser for dagen \/ Habr - Mozilla Firefox (Privat browsing)\n...<\/code><\/pre>\n<p><\/p>\n<p>Mulighed <em>-l<\/em> viser en liste over alle \u00e5bne vinduer, og <em>-x<\/em> tilf\u00f8jer klassens navn til output (<em>skype.Skype<\/em>, <em>Navigator.Firefox<\/em> osv.). Vi har brug for vinduets id (kolonne 1), klassens navn (kolonne 3) og vinduets navn (den sidste kolonne).<\/p>\n<p><\/p>\n<p>Du kan pr\u00f8ve at aktivere et vindue ved hj\u00e6lp af muligheden <em>-a<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ wmctrl -a skype.Skype -x<\/code><\/pre>\n<p><\/p>\n<p>Hvis alt gik efter planen, skal Skype-vinduet vises p\u00e5 sk\u00e6rmen. Hvis i stedet for muligheden <em>-x<\/em> bruge muligheden <em>-i<\/em>, kan du i stedet for klassens navn angive vinduets id. Problemet med id er, at vinduets id \u00e6ndrer sig ved hvert programstart, og vi kan ikke vide det p\u00e5 forh\u00e5nd. P\u00e5 den anden side, angiver denne attribut entydigt vinduet, hvilket kan v\u00e6re vigtigt, n\u00e5r applikationen \u00e5bner mere end \u00e9t vindue. Mere om dette senere.<\/p>\n<p><\/p>\n<p>P\u00e5 dette tidspunkt skal vi huske, at vi vil s\u00f8ge efter det \u00f8nskede vindue ved hj\u00e6lp af regex i outputtet <em>wmctrl -lx<\/em>. Men det betyder ikke, at vi n\u00f8dvendigvis skal bruge noget kompliceret. Ofte er klassens navn eller vinduets titel tilstr\u00e6kkeligt. <\/p>\n<p><\/p>\n<p>I princippet skal den grundl\u00e6ggende id\u00e9 allerede v\u00e6re klar. I indstillingerne for globale genvejstaster\/shortcuts til din vinduesbehandler konfigurerer vi den \u00f8nskede kombination til at k\u00f8re scriptet.<\/p>\n<p><\/p>\n<h2 id=\"kak-polzovatsya-skriptami\">S\u00e5dan bruger du scripts<\/h2>\n<p><\/p>\n<p>F\u00f8rst skal du installere kommandolinjev\u00e6rkt\u00f8jerne <em>wmctrl<\/em> og <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>Dern\u00e6st skal du downloade scripts og tilf\u00f8je dem til <em>$PATH<\/em>. Jeg l\u00e6gger dem normalt 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>Hvis kataloget <em>~\\\/bin<\/em> ikke eksisterede, skal det oprettes og genstartes (eller logges ind igen), ellers <em>~\\\/bin<\/em> vil det ikke blive registreret i <em>$PATH<\/em>. Hvis alt er gjort korrekt, skal scriptsne v\u00e6re tilg\u00e6ngelige fra konsollen og autoslutte ved at trykke p\u00e5 Tab.<\/p>\n<p><\/p>\n<p>Hovedscriptet <strong>showwin<\/strong> modtager 2 parametre: den f\u00f8rste er regex, som vi vil bruge til at finde det \u00f8nskede vindue, og den anden parameter er kommandoen, der skal udf\u00f8res, hvis det \u00f8nskede vindue ikke blev fundet. <\/p>\n<p><\/p>\n<p>Du kan pr\u00f8ve at k\u00f8re scriptet for eksempel:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ showwin \"Mozilla Firefox$\" firefox<\/code><\/pre>\n<p><\/p>\n<p>Hvis Firefox er installeret, skal fokus overf\u00f8res til dets vindue. Selv hvis Firefox ikke var startet, skal det starte.<\/p>\n<p><\/p>\n<p>Hvis det lykkes, kan du pr\u00f8ve at konfigurere udf\u00f8relsen af kommandoer p\u00e5 kombinationer. I indstillingerne for globale genvejstaster\/shortcuts tilf\u00f8jer vi:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+F: vis vindue &#171;Mozilla Firefox$&#187; firefox<\/li>\n<li>Alt+D: vis vindue &#171;Mozilla Firefox (Privat browsing)$&#187; &#171;firefox -private-window&#187;<\/li>\n<li>Alt+C: vis vindue &#171;chromium-browser.Chromium-browser N*&#187; chromium-browser<\/li>\n<li>Alt+X: vis vindue &#171;chromium-browser.Chromium-browser I*&#187; &#171;chromium-browser -incognito&#187;<\/li>\n<li>Alt+S: vis vindue &#171;skype.Skype&#187; skypeforlinux<\/li>\n<li>Alt+E: vis vindue &#171;jetbrains-idea&#187; idea.sh<\/li>\n<\/ul>\n<p><\/p>\n<p>Og s\u00e5 videre. Hver kan konfigurere genvejstastkombinationer og software, som det passer dem.<br \/>\nHvis alt er gjort korrekt, kan vi skifte mellem vinduer med de angivne kombinationer ved blot at trykke p\u00e5 tasterne.<\/p>\n<p><\/p>\n<p>Jeg vil skuffe elskere af Chrome: et almindeligt vindue kan ikke skelnes fra inkognito-vinduet ud fra output. <em>wmctrl<\/em> Det er ikke muligt, da de har samme klasse navne og vinduestitler. I de foresl\u00e5ede regex er symbolerne N* og I* kun n\u00f8dvendige for at adskille de forskellige regex'er fra hinanden, s\u00e5 de kan tildeles forskellige hovedvinduer.<\/p>\n<p><\/p>\n<p>For at nulstille det prim\u00e6re vindue fra den tidligere kombination (faktisk for regex'en, som <strong>showwin<\/strong> blev kaldt sidst) skal du kalde scriptet <strong>showwinDetach<\/strong>. Jeg har dette script tildelt en tastekombination. <em>Alt+Backspace<\/em>. <\/p>\n<p><\/p>\n<p>Scriptet <strong>showwin<\/strong> har en funktion mere. N\u00e5r det kaldes med et enkelt parameter (i dette tilf\u00e6lde er parameteren blot et id), tjekker det slet ikke regex'en, men anser alle vinduer som passende. Dette virker m\u00e5ske uv\u00e6sentligt, men p\u00e5 denne m\u00e5de kan vi tildele ethvert vindue som hovedvindue og hurtigt skifte til pr\u00e6cis dette vindue.<\/p>\n<p><\/p>\n<p>Jeg har indstillet s\u00e5danne kombinationer:<\/p>\n<p><\/p>\n<ul>\n<li>Alt+1: vis vindue &#171;CustomKey1&#187;<\/li>\n<li>Alt+2: vis vindue &#171;CustomKey2&#187;<\/li>\n<li>\u2026<\/li>\n<li>Alt+0: vis vindue &#171;CustomKey0&#187;<\/li>\n<li>Alt+Backspace: showwinDetach<\/li>\n<\/ul>\n<p><\/p>\n<p>S\u00e5ledes kan jeg knytte ethvert vindue til kombinationerne. <em>Alt+1<\/em>\u2026<em>Alt+0<\/em>Ved blot at trykke <em>Alt+1<\/em> binder jeg det aktuelle vindue til denne kombination. Jeg kan annullere bindingen ved at trykke <em>Alt+1<\/em>, og derefter <em>Alt+Backspace<\/em>. Eller lukke vinduet, det fungerer ogs\u00e5.<\/p>\n<p><\/p>\n<p>Derudover vil jeg fort\u00e6lle lidt om tekniske detaljer. De kan ignoreres, og man kan bare pr\u00f8ve at indstille det og se. Men jeg vil alligevel anbefale at s\u00e6tte sig ind i andres scripts, f\u00f8r man k\u00f8rer dem p\u00e5 sin egen computer :).<\/p>\n<p><\/p>\n<h2 id=\"kak-razlichat-raznye-okna-odnogo-prilozheniya\">Hvordan skelner man mellem forskellige vinduer af samme applikation<\/h2>\n<p><\/p>\n<p>Som udgangspunkt var det f\u00f8rste eksempel \"wmctrl -a skype.Skype -x\" funktionelt og kan anvendes. Men lad os kigge p\u00e5 eksemplet med Firefox, hvor 2 vinduer er \u00e5bne:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">0x04400003  0 Navigator.Firefox                   N\/A Google Overs\u00e6tter - Mozilla Firefox\n0x04400218  0 Navigator.Firefox                   N\/A Bedste indl\u00e6g i d\u00f8gnet \/ Habr - Mozilla Firefox (Privat browsing)<\/code><\/pre>\n<p><\/p>\n<p>Det f\u00f8rste vindue \u2014 almindelig tilstand, mens det andet \u2014 Privat browsing. Disse vinduer \u00f8nsker man at betragte som forskellige applikationer og skifte mellem dem med forskellige tastekombinationer. <\/p>\n<p><\/p>\n<p>Det er n\u00f8dvendigt at komplicere scriptet, der skifter mellem vinduer. Jeg brugte den l\u00f8sning: at udskrive en liste over alle vinduer, lave <em>grep<\/em> ved hj\u00e6lp af regex, tage den f\u00f8rste linje med <em>head<\/em>, hente den f\u00f8rste kolonne (det vil v\u00e6re vinduets id) med <em>cut<\/em>, skifte til vinduet efter id.<\/p>\n<p><\/p>\n<p>Her burde v\u00e6re en joke om regul\u00e6re udtryk og to problemer, men i virkeligheden bruger jeg ikke noget kompliceret. Jeg har brug for regul\u00e6re udtryk for at kunne angive slutningen p\u00e5 en linje (symbolet \u201e$\u201c) og skelne mellem \u201eMozilla Firefox$\u201c og \u201eMozilla Firefox (Private Browsing)$\u201c.<\/p>\n<p><\/p>\n<p>Kommandoen ser s\u00e5dan ud:<\/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>Her kan man allerede g\u00e6tte den anden egenskab ved scriptet: hvis grep ikke returnerer noget, betyder det, at den n\u00f8dvendige applikation ikke er \u00e5bnet, og den skal startes ved at udf\u00f8re kommandoen fra det andet parameter. Og derefter tjekke periodisk, om det \u00f8nskede vindue er \u00e5bnet, s\u00e5 fokus kan overf\u00f8res til det. Jeg vil ikke g\u00e5 n\u00e6rmere ind i det, dem der har brug for det, kan se kildekoden.<\/p>\n<p><\/p>\n<h2 id=\"kogda-okna-prilozheniya-ne-razlichimy\">N\u00e5r applikationsvinduer ikke kan skelnes<\/h2>\n<p><\/p>\n<p>S\u00e5 vi har l\u00e6rt at overf\u00f8re fokus til vinduet for den \u00f8nskede applikation. Men hvad hvis der er \u00e5bnet mere end \u00e9t vindue for applikationen? Hvilket af dem skal vi overf\u00f8re fokus til? Scriptet ovenfor vil sandsynligvis overf\u00f8re fokus til det f\u00f8rste \u00e5bne vindue. Vi ville dog gerne have mere fleksibilitet. Det ville v\u00e6re rart at kunne huske, hvilket specifikt vindue vi har brug for, og skifte til netop det vindue.<\/p>\n<p><\/p>\n<p>Ideen var s\u00e5dan: Hvis vi vil huske et bestemt vindue for tastaturkombinationen, skal vi trykke p\u00e5 denne kombination, n\u00e5r det \u00f8nskede vindue er i fokus. Fremover vil fokus blive givet til netop dette vindue, indtil vinduet lukkes, eller vi nulstiller denne kombination af scriptet. <strong>showwinDetach<\/strong>.<\/p>\n<p><\/p>\n<p>Algoritmen for scriptet <strong>showwin<\/strong> ser cirka s\u00e5dan ud:<\/p>\n<p><\/p>\n<ul>\n<li>Tjek, om vi tidligere har gemt id'et for det vindue, som fokus skal overf\u00f8res til.<br \/>\nHvis vi har gemt det, og vinduet stadig eksisterer, s\u00e5 overf\u00f8rer vi fokus til det og afslutter. <\/li>\n<li>Vi ser, hvilket vindue der lige nu er i fokus, og hvis det passer til vores foresp\u00f8rgsel, s\u00e5 husker vi dets id for at kunne skifte til det senere og afslutter.<\/li>\n<li>Vi g\u00e5r over til et passende vindue, hvis det eksisterer, eller \u00e5bner den n\u00f8dvendige applikation.<\/li>\n<\/ul>\n<p><\/p>\n<p>For at finde ud af, hvilket vindue der er i fokus nu, kan vi bruge konsolv\u00e6rkt\u00f8jet xdotool og omdanne dets output til hexadecimalt format:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ printf \"0xx\" `xdotool getwindowfocus`<\/code><\/pre>\n<p><\/p>\n<p>At gemme noget i bash er nemmest ved at oprette filer i et virtuelt filsystem, der ligger i hukommelsen. I Ubuntu er dette som standard tilsluttet i <em>\/dev\/shm\/<\/em>. Jeg kan ikke sige noget om andre distributioner, men jeg h\u00e5ber, at noget lignende ogs\u00e5 findes. Du kan tjekke med kommandoen:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ mount -l | grep tmpfs<\/code><\/pre>\n<p><\/p>\n<p>Scriptet vil oprette tomme mapper i denne mappe, som disse: <em>\/dev\/shm\/$USER\/showwin\/$SEARCH_REGEX\/$WINDOW_ID<\/em>. Derudover vil det ved hver opkald oprette et symlink <em>\/dev\/shm\/$USER\/showwin\/showwin_last<\/em> og f\u00e5 en fungerende kommando. <em>\/dev\/shm\/$USER\/showwin\/$SEARCH_REGEX<\/em>. Dette er n\u00f8dvendigt for at kunne slette vinduets id for en bestemt kombination ved hj\u00e6lp af scriptet <strong>showwinDetach<\/strong>.<\/p>\n<p><\/p>\n<h2 id=\"chto-mozhno-uluchshit\">Hvad kan forbedres<\/h2>\n<p><\/p>\n<p>For det f\u00f8rste skal scripts konfigureres manuelt. Sikkert p\u00e5 grund af behovet for at s\u00e6tte sig ind i og g\u00f8re meget med h\u00e5nden, vil mange af jer m\u00e5ske slet ikke pr\u00f8ve at konfigurere systemet. Hvis der var mulighed for blot at installere en pakke og konfigurere det hele lettere, kunne det m\u00e5ske have opn\u00e5et en vis popularitet. Og hvem ved, m\u00e5ske ville det endda blive inkluderet i de standard distributioner.<\/p>\n<p><\/p>\n<p>Og m\u00e5ske kan det g\u00f8res nemmere. Hvis man kan finde ud af proces-id\u2019et ud fra vinduets id, og derefter finde ud af hvilken kommando der skabte det ud fra proces-id\u2019et, kunne man automatisere konfigurationen. Jeg har faktisk ikke unders\u00f8gt, om det jeg skrev i dette afsnit er muligt. Det er bare s\u00e5dan, at jeg personligt er tilfreds med, hvordan det fungerer nu. Men hvis nogen ud over mig finder denne tilgang nyttig og forbedrer den, vil jeg gladly bruge den bedste l\u00f8sning.<\/p>\n<p><\/p>\n<p>Et andet problem, som jeg allerede har n\u00e6vnt, er, at man nogle gange ikke kan skelne mellem vinduerne. Jeg har kun observeret dette med incognito i chrome\/chromium, men m\u00e5ske findes der lignende situationer andre steder. I v\u00e6rste fald er der altid en mulighed for universelle kombinationer <em>Alt+1<\/em>\u2026<em>Alt+0<\/em>. Igen, jeg bruger Firefox, og for mig er dette problem ikke v\u00e6sentligt.<\/p>\n<p><\/p>\n<p>Men et betydeligt problem for mig er, at jeg arbejder p\u00e5 Mac OS og ikke har v\u00e6ret i stand til at konfigurere noget lignende der. Jeg kunne tilsyneladende installere v\u00e6rkt\u00f8jet, <em>wmctrl<\/em> men det fungerer ikke ordentligt p\u00e5 Mac OS. Man kan lave noget med appen <em>Automator<\/em>, men den er s\u00e5 langsom, at det ikke er behageligt at bruge den, selv n\u00e5r den fungerer. Jeg kunne heller ikke konfigurere tastekombinationer, s\u00e5 de fungerede i alle programmer. Hvis nogen finder en l\u00f8sning \u2014 vil jeg v\u00e6re glad for at bruge den.<\/p>\n<p><\/p>\n<h2 id=\"vmesto-zaklyucheniya\">Afslutning<\/h2>\n<p><\/p>\n<p>Det er blevet til uventet mange ord for en s\u00e5 tilsyneladende simpel funktionalitet. Jeg \u00f8nskede at formidle ideen og ikke overbelaste teksten, men jeg har ikke fundet ud af, hvordan man kan fort\u00e6lle det enklere. M\u00e5ske ville det v\u00e6re bedre i videoformat, men her er det ikke s\u00e5 popul\u00e6rt.<\/p>\n<p><\/p>\n<p>Jeg har kort fortalt om, hvad der gemmer sig bag scriptet, og hvordan man konfigurerer det. Jeg gik ikke ind i detaljerne om selve scriptet, men det er kun 50 linjer langt, s\u00e5 det er ikke sv\u00e6rt at forst\u00e5. <\/p>\n<p><\/p>\n<p>Jeg h\u00e5ber, at nogle andre ogs\u00e5 vil pr\u00f8ve denne id\u00e9 og m\u00e5ske endda s\u00e6tte pris p\u00e5 den. Jeg kan sige om mig selv, at scriptet blev skrevet for cirka 3 \u00e5r siden, og det har v\u00e6rt MEGET praktisk for mig. S\u00e5 praktisk, at det skaber alvorlig ubehag, n\u00e5r jeg arbejder med andres computere. Og med min arbejds-MacBook. <\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/masyamandev\/Showwin-script\">Link til scripts<\/a><\/noindex><\/p>\n<p>Kilde: <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.3 - 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\/da\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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 vinduesh\u00e5ndtering i Linux | ProHoster","description":"Jeg er en af dem, der har indstillet Caps Lock til at skifte layout, fordi jeg er for doven til at trykke p\u00e5 2 taster, n\u00e5r jeg kan trykke p\u00e5 \u00e9n.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/alternativnoe-upravlenie-oknami-v-linux","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/55206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=55206"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/55206\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=55206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=55206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=55206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}