在使用程序员 Dvorak 键盘布局(带有数字键位的Shift)的 xmonad 中切换工作区。

8

其实我并没有使用Dvorak,而是Neo2,但由于我使用的是矩阵式键盘(Truly Ergonomic),我也把数字键位换了位置。

因此,在我的xmonad.hs中,这个构造不符合人体工学:

-- mod-[1..9], Switch to workspace N
-- mod-shift-[1..9], Move client to workspace N
--
[((m .|. modMask, k), windows $ f i)
    | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
    , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]

我想改变这个设置,以便能够通过按2到0的键来访问1到9号工作区。

我该如何实现?我已经尝试将第三行更改为:

    | (i, k) <- zip (XMonad.workspaces conf) [xK_2 .. xK_0]

但是我无法访问第九个工作区,我该如何更改呢?能否简要解释一下,以便了解这个结构(我多年前学过Haskell,现在大部分都忘记了)。


请分享您的配置。我无法在任何地方找到一个可用的替代品。谢谢 :) - matiu
1个回答

8

您的问题是xK_2xK_0大,因此列表[xK_2 .. xK_0]为空:

Prelude XMonad> xK_2
50
Prelude XMonad> xK_0
48
Prelude XMonad> [xK_2 .. xK_0]
[]

你需要使用比那更长的列表。至少有两种合理的方法可以实现这一点;一种方法是手动指定所有键:

Prelude XMonad> [xK_2, xK_3, xK_4, xK_5, xK_6, xK_7, xK_8, xK_9, xK_0]
[50,51,52,53,54,55,56,57,48]

我可能会使用更短的内容:
Prelude XMonad> [xK_2 .. xK_9] ++ [xK_0]
[50,51,52,53,54,55,56,57,48]

记得如果它是更大表达式的一部分,要添加一些括号。

1
争议:[a..b]枚举类型算术序列,而不是列表推导式。 - Mechanical snail
谢谢。与我想象的相似。 - erik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接