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

时间:2017-12-15 12:31:37

标签: haskell xmonad

我最近决定从i3wm切换到xmonad。我找到this configuration并决定尝试一下。配置可以直接开箱即用。

问题是,我无法切换桌面工作区,因为我不使用英文键盘布局。我在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)]]

然而,这不起作用。所以我尝试绑定至少一个密钥(根据this answer),看看这是否至少有效(上面的代码被注释掉了):

    , ((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。

你可以告诉我我做错了什么吗?感谢。

编辑:

Here是最小配置文件。

当我和另一台机器试试运气时,我也取得了一些进展。与

[((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)]]

我得到了不同的错误消息(对于所有caron键):

  

不在范围内:â\ 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 */

1 个答案:

答案 0 :(得分:2)

在你的最小配置中,

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")
        ]
    }

(或类似的。)

对于您的其他问题,xK_ecaron可提供Graphics.X11.ExtraTypes.XorgDefault。您可以查看所有可用键盘的列表(以及要导入的模块以获取它们)here,或者您可以搜索特定的一个on Hoogle