如何将工作区切换重新绑定到 xmonad 中的重音键?
How to rebind workspace switching to accented keys in 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: parse error on input â00,â01
其中指的是这一行: , ((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 键):
Not in scope: â00xK_ecaronâ01
Perhaps you meant â00xK_macronâ01 (imported from XMonad)
由于建议的解决方案是完全不同的密钥,我简单地继续删除所有 xK_~caron 并且它令人惊讶地编译。现在我可以切换工作区,但是使用 ý
键切换到第二个工作区有点奇怪。
现在我不明白为什么不接受 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")
]
}
(或类似的。)
对于您的其他问题,xK_ecaron
可从 Graphics.X11.ExtraTypes.XorgDefault
获得。您可以看到所有可用键符的列表(以及导入哪个模块来获取它们)here, or you can search for a specific one on Hoogle.
我最近决定从 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: parse error on input â00,â01
其中指的是这一行: , ((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 键):
Not in scope: â00xK_ecaronâ01
Perhaps you meant â00xK_macronâ01 (imported from XMonad)
由于建议的解决方案是完全不同的密钥,我简单地继续删除所有 xK_~caron 并且它令人惊讶地编译。现在我可以切换工作区,但是使用 ý
键切换到第二个工作区有点奇怪。
现在我不明白为什么不接受 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")
]
}
(或类似的。)
对于您的其他问题,xK_ecaron
可从 Graphics.X11.ExtraTypes.XorgDefault
获得。您可以看到所有可用键符的列表(以及导入哪个模块来获取它们)here, or you can search for a specific one on Hoogle.