如何從命令列在 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>"
允許您更改指定其索引的佈局。我不知道如何使用它切換到下一個,因為我不知道如何獲取當前索引。
答案1
使用 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
.
答案2
您可以透過執行檢索輸入的目前鍵盤佈局索引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
答案3
您已經擁有正確的配置。 Super+Space 應該改變你的鍵盤佈局(這就是win_space_toggle
意思)。還有其他用於切換鍵盤佈局的按鍵配置,您可以在手冊頁中找到它們:man 7 xkeyboard-config
。