Keyboard-Layout
如何從外殼切換 Sway 中的鍵盤佈局?
如何從命令行在 Sway 中的 xkb 鍵盤佈局之間切換?我的佈局配置如下:
input type:keyboard { xkb_layout pl,es xkb_options grp:win_space_toggle,compose:caps }
我希望能夠有一個切換到下一個佈局的命令(
pl
如果目前佈局是es
,es
則切換到目前佈局pl
)。注意:有一個命令
swaymsg "input type:keyboard xkb_switch_layout <index>"
允許您更改指定其索引的佈局。我不知道如何使用它來切換到下一個,因為我不知道如何獲取目前索引。
使用 sway 版本 1.5.1,我可以
next
提供xkb_switch_layout
. 因此您不再需要獲取目前索引和總項目數。swaymsg input "1:1:AT_Translated_Set_2_keyboard" xkb_switch_layout next
不幸的是,我不能用它
type:keyboard
來代替標識符。您可以使用 找到您的標識符swaymsg -t get_inputs
。如果您想查看所有可用的佈局和目前佈局的索引,您需要添加--raw
.
您可以通過執行檢索輸入的目前鍵盤佈局索引
swaymsg -t get_inputs
,這將為您提供一個包含輸入數組及其相關設置的 JSON。您要查找的鍵是
xkb_active_layout_index
和xkb_layout_names
。這是我係統上命令給出的輸出範例(裁剪以顯示相關部分):
(...) { "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" } }, (...)
要模擬 sway 的切換行為,可以使用以下程式碼:
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))
使用搖擺版本 1.4