Løser problemet med å bytte ved å bruke alt+shift i Linux, i Electron-applikasjoner

Hei kollegaer!

Jeg vil dele min løsning på problemet som er angitt i tittelen. Jeg ble inspirert til å skrive denne artikkelen av en kollega brnovk, som ikke var lat og tilbød en delvis (for meg) løsning på problemet. Jeg laget min egen "krykke" som hjalp meg. Jeg deler med deg.

Beskrivelse av problemet

Jeg brukte Ubuntu 18.04 til jobb og la nylig merke til at når du bytter layout med alt+shift i applikasjoner som Visual Studio Code, Skype, Slack og andre som ble opprettet med Electron, oppstår følgende problem: fokus fra inndatafeltet går til toppen panelet i vinduet (menyen). Av andre grunner flyttet jeg til Fedora + KDE og innså at problemet ikke hadde forsvunnet. Mens jeg lette etter en løsning, fant jeg en fantastisk artikkel Hvordan fikse Skype selv. Mange takk kamerat brnovk, som snakket i detalj om problemet og delte sin metode for å løse det. Men metoden angitt i artikkelen løste problemet med bare ett program, nemlig Skype. For meg var det også kritisk å forstå Visual Studio Code, fordi å skrive meldinger med en hoppende meny, selv om det er irriterende, er ikke så mye hvis du er involvert i utvikling. I tillegg foreslo en kollega en løsning der applikasjonsmenyen forsvinner helt, og jeg vil egentlig ikke miste menyen i VS Code.

Prøvde å forstå hva som er galt

Så jeg bestemte meg for å ta meg tid til å finne ut hva som foregikk. Nå skal jeg kort beskrive veien jeg tok, kanskje noen som er mer kunnskapsrike i denne saken vil hjelpe med å forklare vanskelighetene jeg møtte.

Jeg åpnet Visual Studio Code og begynte å trykke på forskjellige Alt+<%something%>-kombinasjoner for å se hvordan applikasjonen reagerte. I nesten alle tilfeller fungerte alle kombinasjoner unntatt Alt+Shift uten å miste fokus. Det virket som om noen spiste den trykket Shift, som fulgte etter å ha holdt nede Alt, og applikasjonen mente at jeg trykket Alt, så ikke trykket på noe, slapp Alt og det kastet gledelig fokuset mitt inn i menyen, noe som virket ganske logisk å den.

Jeg åpnet innstillingene for å bytte tastaturoppsett (du vet, denne lange listen med avmerkingsbokser og alle slags innstillinger for taster) og satte den til å bytte oppsett ved hjelp av Alt-knappen, uten ekstra klikk.

Løser problemet med å bytte ved å bruke alt+shift i Linux, i Electron-applikasjoner

Etter det sluttet Alt+Tab for å bytte vinduer å fungere. Bare Tab fungerte, det vil si at noen "spiste" min Alt igjen. Det var ingen spørsmål om hvem denne "noen" var, men jeg hadde ingen anelse om hva som kunne gjøres med ham.

Men siden problemet måtte løses på en eller annen måte, kom en løsning til tankene:

  1. I innstillingene, deaktiver hurtigtasten for å bytte tastaturoppsett (fjern merket for alle avmerkingsboksene i delen Bytt til en annen layout);
  2. Lag din egen hurtigtast som ville bytte layout for meg

Beskrivelse av løsningen

La oss først installere et program som lar deg tilordne kommandoer til Xbindkeys-tastene. Dessverre tillot ikke standardverktøy meg å lage en hurtigtast for en kombinasjon som Alt+Shift gjennom et vakkert grensesnitt. Kan gjøres for Alt+S, Alt+1, Alt+shift+Y osv. osv., men dette er ikke egnet for vår oppgave.

sudo dnf install xbindkeysrc

Mer informasjon om det er tilgjengelig på ArchWiki
Deretter vil vi lage en eksempelinnstillingsfil for programmet. Eksemplet er ganske kort, med noen få kommandoer, akkurat det du trenger for å finne ut hvordan du jobber med det:

xbindkeys -d > ~/.xbindkeysrc

Som du kan se fra eksemplet i filen, må vi angi hurtigtasten vi vil bruke og kommandoen som skal utføres. Ser enkelt ut.


# Examples of commands:
"xbindkeys_show"
  control+shift + q
# set directly keycode (here control + f with my keyboard)
"xterm"
  c:41 + m:0x4

Som en hurtigtast kan du bruke menneskelig lesbar skrift eller bruke nøkkelkoder. Det fungerte for meg bare med koder, men ingen forbyr deg å eksperimentere litt.

For å få kodene må du bruke kommandoen:

xbindkeys -k

Et lite "X"-vindu åpnes. Du trenger bare å trykke på tastene når fokus er på dette vinduet! Bare i dette tilfellet vil du se noe slikt i terminalen:


[podkmax@localhost ~]$ xbindkeys -k
Press combination of keys or/and click under the window.
You can use one of the two lines after "NoCommand"
in $HOME/.xbindkeysrc to bind a key.
"(Scheme function)"
    m:0x4 + c:39
    Control + s

I mitt tilfelle ser Alt+Shift-tastkombinasjonen slik ut:

m:0x8 + c:50

Nå må vi sørge for at når du klikker på denne kombinasjonen, endres layouten. Jeg fant bare en fungerende kommando for å spesifisere oppsettet:


setxkbmap ru
setxkbmap us

Som du kan se fra eksempelet, kan det bare aktivere en eller annen layout, så ingenting kom til meg annet enn å skrive et manus.


vim ~/layout.sh
#!/bin/bash
LAYOUT=$(setxkbmap -print | awk -F + '/xkb_symbols/ {print $2}')
if [ "$LAYOUT" == "ru" ]
        then `/usr/bin/setxkbmap us`
        else `/usr/bin/setxkbmap ru`
fi

Nå, hvis .xbindkeysrc- og layout.sh-filene er plassert i samme katalog, ser den endelige visningen av .xbindkeysrc-filen slik ut:


# Examples of commands:

"xbindkeys_show"
  control+shift + q

# set directly keycode (here control + f with my keyboard)
"xterm"
  c:41 + m:0x4

# specify a mouse button
"xterm"
  control + b:2
#А вот то, что добавил я
"./layout.sh"
  m:0x8 + c:50

Etter det tar vi i bruk endringene:


xbindkeys -p

Og du kan sjekke. Ikke glem å deaktivere eventuelle alternativer for å bytte layout i standardinnstillingene.

Total

Kolleger, jeg håper at denne artikkelen kan hjelpe noen raskt å bli kvitt et irriterende problem. Personlig brukte jeg hele fridagen min på å prøve å finne ut og løse problemet på en eller annen måte, slik at jeg ikke lenger ble distrahert av det i arbeidstiden. Jeg skrev denne artikkelen for å spare tid og nerver. Mange av dere bruker en alternativ metode for å bytte layout og forstår ikke hva problemet er. Jeg personlig liker å bytte med Alt+Shift. Og det er slik jeg vil at det skal fungere. Hvis du deler min mening og står overfor dette problemet, bør denne artikkelen hjelpe deg.

Kilde: www.habr.com

Legg til en kommentar