Ciao, colleghi!
Voglio condividere la mia soluzione al problema indicato nel titolo. Ho preso spunto per scrivere questo articolo da un collega
Descrizione del problema
Ho usato Ubuntu 18.04 per lavoro e recentemente ho notato che quando si cambia layout utilizzando alt+shift in applicazioni come Visual Studio Code, Skype, Slack e altre create utilizzando Electron, si verifica il seguente problema: il focus dal campo di input va in alto pannello della finestra (menu). Per altri motivi sono passato a Fedora + KDE e ho capito che il problema non era scomparso. Mentre cercavo una soluzione, ho trovato un articolo meraviglioso
Ho cercato di capire cosa c'è che non va
Quindi, ho deciso di prendermi il tempo per capire cosa stava succedendo. Ora descrivo brevemente il percorso che ho intrapreso, magari qualcuno più esperto in materia mi aiuterà a spiegare le difficoltà che ho incontrato.
Ho aperto Visual Studio Code e ho iniziato a premere diverse combinazioni Alt+<%qualcosa%> per vedere come rispondeva l'applicazione. In quasi tutti i casi, tutte le combinazioni tranne Alt+Shift hanno funzionato senza perdere il focus. Sembrava che qualcuno stesse mangiando il tasto Shift premuto, che seguiva dopo aver tenuto premuto Alt, e l'applicazione pensava che avessi premuto Alt, poi non avevo premuto nulla, ha rilasciato Alt e con gioia ha focalizzato la mia attenzione sul suo menu, il che sembrava abbastanza logico Esso.
Ho aperto le impostazioni per cambiare layout di tastiera (sai, questo lungo elenco con caselle di controllo e tutti i tipi di impostazioni per i tasti) e l'ho impostato per cambiare layout utilizzando il pulsante Alt, senza ulteriori clic.
Successivamente, Alt+Tab per cambiare finestra ha smesso di funzionare. Ha funzionato solo Tab, cioè qualcuno ha “mangiato” di nuovo il mio Alt. Non c'erano più domande su chi fosse questo "qualcuno", ma non avevo idea di cosa si potesse fare con lui.
Ma poiché il problema doveva essere risolto in qualche modo, mi è venuta in mente una soluzione:
- Nelle impostazioni, disabilita il tasto di scelta rapida per cambiare layout di tastiera (deseleziona tutte le caselle di controllo nella sezione Passa a un altro layout);
- Crea il tuo tasto di scelta rapida che cambierebbe il layout per me
Descrizione della soluzione
Per prima cosa installiamo un programma che ti permetta di assegnare comandi ai tasti Xbindkeys. Sfortunatamente, gli strumenti standard non mi permettevano di creare un tasto di scelta rapida per una combinazione come Alt+Shift attraverso una bella interfaccia. Può essere fatto con Alt+S, Alt+1, Alt+shift+Y, ecc. ecc., ma questo non è adatto al nostro compito.
sudo dnf install xbindkeysrc
Maggiori dettagli a riguardo sono disponibili su
Successivamente, creeremo un file di impostazioni di esempio per il programma. L'esempio è piuttosto breve, con pochi comandi, proprio quello che ti serve per capire come lavorarci:
xbindkeys -d > ~/.xbindkeysrc
Come puoi vedere dall'esempio nel file, dobbiamo indicare il tasto di scelta rapida che vogliamo utilizzare e il comando che deve essere eseguito. Sembra semplice.
# Examples of commands:
"xbindkeys_show"
control+shift + q
# set directly keycode (here control + f with my keyboard)
"xterm"
c:41 + m:0x4
Come tasto di scelta rapida, puoi utilizzare la scrittura leggibile dall'uomo o utilizzare codici chiave. A me ha funzionato solo con i codici, ma nessuno ti vieta di sperimentare un po'.
Per ottenere i codici è necessario utilizzare il comando:
xbindkeys -k
Si aprirà una piccola finestra "X". Devi solo premere i tasti quando il focus è su questa finestra! Solo in questo caso vedrai qualcosa di simile nel terminale:
[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
Nel mio caso, la combinazione di tasti Alt+Maiusc è simile alla seguente:
m:0x8 + c:50
Ora dobbiamo assicurarci che quando si fa clic su questa combinazione, il layout cambi. Ho trovato un solo comando funzionante per specificare il layout:
setxkbmap ru
setxkbmap us
Come puoi vedere dall'esempio, può abilitare solo l'uno o l'altro layout, quindi non mi è venuto in mente altro che scrivere uno script.
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
Ora, se i file .xbindkeysrc e layout.sh si trovano nella stessa directory, la visualizzazione finale del file .xbindkeysrc sarà simile alla seguente:
# 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
Successivamente applichiamo le modifiche:
xbindkeys -p
E puoi controllare. Non dimenticare di disabilitare tutte le opzioni per cambiare layout nelle impostazioni standard.
risultato
Colleghi, spero che questo articolo possa aiutare qualcuno a liberarsi rapidamente di un fastidioso problema. Personalmente ho trascorso l'intera giornata libera cercando di capire e risolvere in qualche modo il problema, in modo da non esserne più distratto durante l'orario di lavoro. Ho scritto questo articolo per risparmiare tempo e nervi a qualcuno. Molti di voi utilizzano un metodo alternativo per cambiare layout e non capiscono quale sia il problema. Personalmente mi piace cambiare con Alt+Shift. Ed è così che voglio che funzioni. Se condividi la mia opinione e ti trovi di fronte a questo problema, questo articolo dovrebbe aiutarti.
Fonte: habr.com