真棒:键盘布局开关

itu*_*tun 8 keyboard-shortcuts keyboard-layout awesome

我在 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),
Run Code Online (Sandbox Code Playgroud)

它有效,但是键盘行为存在严重问题。当我切换到 ru 布局时,我的键盘绑定不起作用。很棒的绑定不起作用。例如,vim 快捷方式也不起作用等等。我该如何解决这个问题?

Pab*_*aga 4

您的键盘绑定不起作用,因为您的键盘不再具有这些键符号。

例如,如果您想让Alt+F做某事,那么您需要在某个键上输入“F”。但如果您单独加载“ru” ,则根本没有“F”(也没有任何拉丁字母)。

我认为,特别是当您需要处理多个布局时,最好让 X11(通过 setxkbmap)为您完成这项工作;正如您所发现的,窗口管理器的执行方式要有限得多。

您也可以尝试,因为可怕的小部件似乎调用 setxkbmap,将“ru”更改为“ru,us”,例如:

kbdcfg.layout = { { "us", "" }, { "ru,us", "phonetic" } }
Run Code Online (Sandbox Code Playgroud)

这样,“us”布局在加载时将堆叠在“ru”布局的顶部,并且“us”布局的键系统虽然仍然不能直接输入,但将被处理键绑定的 X11 层看到。