Como posso alternar entre os layouts de teclado xkb no Sway a partir da linha de comando? Meus layouts estão configurados assim:
input type:keyboard {
xkb_layout pl,es
xkb_options grp:win_space_toggle,compose:caps
}
Eu gostaria de poder ter um comando que mude para o próximo layout (para pl
se o atual for es
, para es
se o atual for pl
).
Observação: Existe um comando swaymsg "input type:keyboard xkb_switch_layout <index>"
que permite alterar o layout especificando seu índice. Não sei como usar isso para passar para o próximo, pois não sei como obter o índice atual.
Responder1
Usando o sway versão 1.5.1, posso fornecer next
para o xkb_switch_layout
. Portanto, você não precisa mais obter o índice atual e o número total de itens.
swaymsg input "1:1:AT_Translated_Set_2_keyboard" xkb_switch_layout next
Infelizmente, não posso usar type:keyboard
em vez do identificador. Você pode encontrar seu identificador com swaymsg -t get_inputs
. Se você quiser ver todos os layouts disponíveis e o índice do layout atual, você precisará adicionar --raw
.
Responder2
Você pode recuperar o índice de layout de teclado atual de sua entrada executando swaymsg -t get_inputs
, que fornecerá um JSON contendo uma matriz de entradas e suas configurações associadas.
As chaves que você está procurando são xkb_active_layout_index
e xkb_layout_names
.
Aqui está um exemplo da saída fornecida pelo comando em meu sistema (cortado para mostrar a parte relevante):
(...)
{
"identifier": "16700:8467:Dell_KB216_Wired_Keyboard",
"name": "Dell KB216 Wired Keyboard",
"vendor": 16700,
"product": 8467,
"type": "keyboard",
"xkb_layout_names": [
"English (US)",
"Romanian (standard)"
],
"xkb_active_layout_index": 0,
"xkb_active_layout_name": "English (US)",
"libinput": {
"send_events": "enabled"
}
},
(...)
Para simular o comportamento da alternância do sway, você pode usar o seguinte código:
inputid="YOUR_KEYBOARD_INPUT_IDENTIFIER"
inputdata=$(swaymsg -t get_inputs | jq ".[] | select(.identifier==\"$inputid\")")
index=$(echo "$inputdata" | jq ".xkb_active_layout_index")
layoutcount=$(echo "$inputdata" | jq ".xkb_layout_names | length")
swaymsg input "$inputid" xkb_switch_layout $((($index + 1) % $layoutcount))
Usando o sway versão 1.4
Responder3
Você já tem a configuração correta. Super+Space deve mudar o layout do seu teclado (é isso que win_space_toggle
significa). Existem outras configurações de teclas para alternar layouts de teclado, você pode encontrá-las nas páginas de manual: man 7 xkeyboard-config
.