Eu tenho emparelhamento meu laptop com um teclado sem fio da Apple quando estou ligado a mesa. Toda vez que eu conecto / desconecto, eu uso o Gnome Tweak Tool para trocar / desmembrar as teclas Alt e Win.
Eu queria uma maneira rápida de alternar isso da linha de comando, então escrevi uma função Bash que aproveita gsettings
. A configuração relevante,
$ gsettings get org.gnome.desktop.input-sources xkb-options
é uma lista que pode estar vazia (caso em que é representada com uma anotação @as
type),
@as []
pode conter um único valor,
['caps:ctrl_modifier']
ou pode conter vários valores,
['caps:ctrl_modifier', 'shift:both_capslock']
Meu toggle adiciona / remove a entrada 'altwin:swap_alt_win'
da / da lista, mas como é apenas Bash, recorre a truques de expansão de parâmetro (como substituição de padrões ) para manter uma lista bem formada.
super_swap() {
local old new swap
old=$(gsettings get org.gnome.desktop.input-sources xkb-options)
old="${old/#@as /}" # remove type annotation
swap="'altwin:swap_alt_win'"
if grep -q "$swap" <<< "$old"; then
new="${old//$swap}" # remove swap
else
new="${old/%]/, $swap]}" # append swap
fi
new="${new/#[, /[}" # remove leading comma
new="${new/%, ]/]}" # remove trailing comma
new="${new//, ,/,}" # remove embedded comma
gsettings set org.gnome.desktop.input-sources xkb-options "$new"
}
Isso funciona, e eu não tenho vergonha disso, mas gostaria de pensar que há um jeito melhor. Existe?
Eu dei uma olhada no código-fonte do Gnome Tweak Tool. Eu suponho que se eu desmembrar minhas habilidades em Python, eu poderia construir uma solução mais limpa, mas isso parece ser muito trabalhoso para o que estou tentando fazer aqui.