繁体   English   中英

如何在xmonad中重新绑定工作区切换为重音键?

[英]How to rebind workspace switching to accented keys in xmonad?

我最近决定从i3wm切换到xmonad。 我找到了此配置,并决定尝试一下。 该配置可以直接使用,没有任何问题。

问题是,我无法切换桌面工作区,因为我不使用英文键盘布局。 我在F键行下加了重音符号而不是数字。

因此,我搜索了这些密钥的xK_名称,并将其放入配置文件中,如下所示:

[((m .|. modMask, k), windows $ f i)
    | (i, k) <- zip (XMonad.workspaces conf) [xK_plus, xK_ecaron, xK_scaron, xK_ccaron, xK_rcaron, xK_zcaron, xK_yacute, xK_aacute, xK_iacute]
    , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]

但是,这没有用。 因此,我尝试绑定至少一个键(根据此答案 ),以查看它是否至少有效(上面的代码已注释掉):

    , ((0 .|. modMask, xK_plus), windows $ W.greedyView "1")
    , ((shiftMask .|. modMask, xK_plus), windows $ W.shift "1")

但事实并非如此。 在这两种情况下,错误消息均为:

xmonad.hs:292:9:输入â\\ 200 \\ 230,â\\ 200 \\ 231解析错误

引用此行: , ((0 .|. modMask, xK_plus), windows $ W.greedyView "1") ,特别是| 如果我没有记错的话。

当我尝试

[((m .|. modMask, k), windows $ f i)
    | (i, k) <- zip (XMonad.workspaces conf) [xK_1, xK_2, xK_3, xK_4, xK_5, xK_6, xK_7, xK_8, xK_9]
    , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]

但是,当我尝试时,它没有任何问题

    , ((0 .|. modMask, xK_1), windows $ W.greedyView "1")
    , ((shiftMask .|. modMask, xK_1), windows $ W.shift "1")

抛出相同的错误。

我正在使用捷克QWERTY布局和xmonad 0.12。

你能告诉我我在做什么错吗? 谢谢。

编辑:

是最小的配置文件。

在另一台机器上尝试运气时,我也取得了一些进步。

[((m .|. modMask, k), windows $ f i)
    | (i, k) <- zip (XMonad.workspaces conf) [xK_plus, xK_ecaron, xK_scaron, xK_ccaron, xK_rcaron, xK_zcaron, xK_yacute, xK_aacute, xK_iacute]
    , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]

我得到了不同的错误消息,上面说(对于所有纸箱钥匙):

不在范围内:â\\ 200 \\230xK_ecaronâ\\ 200 \\ 231

也许您的意思是â\\ 200 \\230xK_macronâ\\ 200 \\ 231(从XMonad导入)

由于建议的解决方案是完全不同的键,因此我简单地删除了所有xK_〜caron并进行了令人惊讶的编译。 现在我可以切换工作区,但切换到与第二工作区ý关键是7日在该行是有点儿奇怪。

现在我不明白为什么不接受caron密钥,因为xK_ecaron是完全有效的密钥:

~ $ cat /usr/include/X11/keysymdef.h |grep ecaron
#define XK_ecaron                        0x01ec  /* U+011B LATIN SMALL LETTER E WITH CARON */

在您的最小配置中,

import XMonad
import qualified XMonad.StackSet as W

--bind xK_plus to workspace 1
    , ((0 .|. modMask, xK_plus), windows $ W.greedyView "1")
    , ((shiftMask .|. modMask, xK_plus), windows $ W.shift "1")

main = xmonad def
    { terminal    = "gnome-terminal"
    }

...您的文件中间没有任何键绑定。 这些必须出现在绑定列表中。 逗号是列表元素的分隔符。 所以:

main = xmonad def
    { terminal    = "gnome-terminal"
    , keys        = \conf@(XConfig { modMask = modMask }) -> keys def conf `mappend` M.fromList
        [ ((0 .|. modMask, xK_plus), windows $ W.greedyView "1")
        , ((shiftMask .|. modMask, xK_plus), windows $ W.shift "1")
        ]
    }

(或类似)。

对于您的其他问题,可以从Graphics.X11.ExtraTypes.XorgDefault获得xK_ecaron 您可以在此处查看所有可用的keyyms的列表(以及要导入的模块以获取它们),也可以在Hoogle上搜索特定的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM