Salve, colleghi!
Voglio condividere la mia soluzione per il problema descritto nel titolo. Sono stato ispirato a scrivere questo articolo da un collega , che non ha esitato a proporre una soluzione parziale (per me). Ho creato il mio "workaround", che mi ha aiutato. Condivido con voi.
Descrizione del problema
Ho utilizzato Ubuntu 18.04 per il lavoro e recentemente ho notato che, quando cambio layout con alt+shift in applicazioni come Visual Studio Code, Skype, Slack e altre create con Electron, si verifica il seguente problema: il focus del campo di input passa alla barra del menu in alto. Per altri motivi sono passato a Fedora + KDE e ho capito che il problema persiste. In cerca di una soluzione, ho trovato un ottimo articolo . Un enorme grazie all'amico , che ha descritto in dettaglio il problema e ha condiviso il suo modo di risolverlo. Tuttavia, il metodo indicato nell'articolo risolveva la questione solo con un'applicazione, precisamente Skype. Per me era altrettanto fondamentale capire come funziona Visual Studio Code, perché mentre scrivere messaggi con un menu a comparsa può essere fastidioso, non è così grave quando si tratta di sviluppo. Inoltre, un collega ha proposto una soluzione in cui il menu dell'applicazione scompare completamente, ma a me non piacerebbe perdere il menu in VS Code.
Ho cercato di capire quale fosse il problema
Così, ho deciso di dedicare del tempo per capire qual è il problema. Ora descriverò brevemente il percorso che ho seguito, forse qualcuno più esperto in materia potrà aiutare a chiarire le difficoltà che ho incontrato.
Ho aperto Visual Studio Code e ho iniziato a premere diverse combinazioni di Alt+, osservando la reazione dell'applicazione. In quasi tutti i casi, tutte le combinazioni, eccetto Alt+Shift, hanno funzionato senza perdere il focus. Sembrava che qualcuno stesse mangiando la pressione di Shift, che seguiva la pressione e il mantenimento di Alt, e l'applicazione pensava che avessi premuto Alt, poi non premesso nulla, rilasciato Alt e lei felice riportava il mio focus nel suo menu, cosa che le sembrava del tutto logica.
Ho aperto le impostazioni per il cambio della disposizione della tastiera (sai quel lungo elenco con le caselle di controllo e tutte le varie impostazioni per i tasti) e ho impostato il cambio della disposizione con il tasto Alt, senza alcuna pressione aggiuntiva.

Dopo questo, Alt+Tab ha smesso di funzionare per cambiare le finestre. Funzionava solo Tab, quindi qualcuno stava di nuovo "mangiando" il mio Alt. Chi fosse questo "qualcuno" non rimaneva più alcun dubbio, ma non ho idea di cosa si possa fare con lui.
Ma poiché dovevo risolvere il problema in qualche modo, mi è venuta in mente la soluzione:
- Nelle impostazioni disattivare la shortcut per cambiare la disposizione della tastiera (deselezionare tutte le caselle nella sezione Passa a un'altra disposizione);
- Crea una scorciatoia per cambiare il layout della tastiera
Descrizione della soluzione
Iniziamo installando un programma che consente di assegnare comandi ai tasti, Xbindkeys. Sfortunatamente, gli strumenti di base non mi hanno permesso di creare una scorciatoia per combinazioni come Alt+Shift tramite un'interfaccia gradevole. Posso farlo per Alt+S, Alt+1, Alt+Shift+Y e così via, ma non si adatta al nostro scopo.
sudo dnf install xbindkeysrc Maggiori dettagli sono disponibili su
Successivamente, creeremo un esempio di file di configurazione per il programma. L'esempio è piuttosto breve, con alcuni comandi, proprio quello che serve per capire come lavorarci:
xbindkeys -d > ~/.xbindkeysrcCome si vede dall'esempio nel file, dobbiamo specificare la scorciatoia 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 scorciatoia si può usare una scrittura comprensibile o codici di tasti. A me ha funzionato solo con i codici, ma nessuno vieta di sperimentare un po'.
Per ottenere i codici bisogna utilizzare il comando:
xbindkeys -kSi aprirà una piccola finestra "X". È necessario premere i tasti solo quando questa finestra è a fuoco! Solo in questo modo vedrete nel terminale qualcosa del genere:
[podkmax@localhost ~]$ xbindkeys -k
Premere una combinazione di tasti e/o cliccare sotto la finestra.
È possibile utilizzare una delle due righe dopo "NoCommand"
in $HOME/.xbindkeysrc per associare un tasto.
"(Funzione dello schema)"
m:0x4 + c:39
Control + s
Nel mio caso, la combinazione per i tasti Alt+Shift appare così:
m:0x8 + c:50Ora dobbiamo fare in modo che, premendo questa combinazione, avvenga esattamente il cambio della disposizione. Ho trovato solo un comando funzionante per specificare la disposizione:
setxkbmap ru
setxkbmap us
Come si può vedere dall'esempio, può solo attivare una o l'altra disposizione, 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, il file .xbindkeysrc finale appare così:
# 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
Dopo di ciò, applichiamo le modifiche:
xbindkeys -p
E si può controllare. Non dimenticate di disabilitare qualsiasi opzione per il cambio di disposizione nelle impostazioni di sistema.
Risultato
Colleghi, spero che questo articolo possa aiutare rapidamente qualcuno a liberarsi da questo fastidioso problema. Personalmente, ho passato tutto il mio giorno libero a cercare di capire e risolvere il problema almeno in parte, per non essere più distratto da questo durante l'orario di lavoro. Ho scritto questo articolo con l'obiettivo di risparmiare tempo e nervi a qualcuno. Molti di voi utilizzano metodi alternativi per cambiare la disposizione dei tasti e non capiscono qual è il problema. A me piace cambiare usando Alt+Shift. E voglio che funzioni esattamente in questo modo. Se condividi la mia opinione e hai affrontato questo problema, questo articolo dovrebbe aiutarti.
Fonte: habr.com
