私はgnome(debianシステム)でウィンドウマネージャとしてAwesomeを使用しており、次のコードでキーボードレイアウトを切り替えるウィジェットを作成しました。
-- Keyboard map indicator and changer
kbdcfg = {}
kbdcfg.cmd = "setxkbmap"
kbdcfg.layout = { { "us", "" }, { "ru", "phonetic" } }
kbdcfg.current = 1 -- us is our default layout
kbdcfg.widget = widget({ type = "textbox", align = "right" })
kbdcfg.widget.text = " " .. kbdcfg.layout[kbdcfg.current][1] .. " "
kbdcfg.switch = function ()
kbdcfg.current = kbdcfg.current % #(kbdcfg.layout) + 1
local t = kbdcfg.layout[kbdcfg.current]
kbdcfg.widget.text = " " .. t[1] .. " "
os.execute( kbdcfg.cmd .. " " .. t[1] .. " " .. t[2] )
end
-- Mouse bindings
kbdcfg.widget:buttons(awful.util.table.join(
awful.button({ }, 1, function () kbdcfg.switch() end)
))
-- Alt + Right Shift switches the current keyboard layout
awful.key({ "Mod1" }, "Shift_R", function () kbdcfg.switch() end),
動作しますが、キーボードの動作に深刻な問題があります。 ruレイアウトに切り替えると、キーバインディングは機能しません。素晴らしいバインディングは機能しません。たとえば、vimショートカットは機能しません。この問題をどのように解決できますか?
ベストアンサー1
キーボードに対応するキー記号がなくなったため、キーバインディングは機能しません。
たとえば、Alt+がF何をするには、特定のキーに「F」と入力する必要があります。しかし、「ru」をロードするとホロ、それでは「F」がまったくありません(ラテン文字でもない)。
私の考えでは、特に複数のレイアウトを処理する必要がある場合は、X11(setxkbmapを介して)にこれを実行させる方が良いと思います。ウィンドウマネージャはこれを行う方法がはるかに制限されています。
恐ろしいウィジェットは、次のように「ru」を「ru、us」に変更してsetxkbmapを呼び出すように見えるので、試してみることもできます。
kbdcfg.layout = { { "us", "" }, { "ru,us", "phonetic" } }
このように、「us」レイアウトは読み込まれたときに「ru」レイアウトの上に積み重ねられ、「us」レイアウトのキーシステムはまだ直接入力にアクセスできませんが、キーバインディングを処理するX11レイヤーで見ることができます。