Xmonad - 将密钥绑定到命令链

Faw*_*es5 3 keyboard-shortcuts xmonad

我正在为 Xmonad 使用 EZConfig 模块。我想绑定ModMask s首先将我当前聚焦的窗口移动到我的另一个屏幕,然后将我的焦点移动到我的另一个屏幕。

使用 CycleWS 模块,这将通过运行“shiftNextScreen”后跟“nextScreen”来实现

我可以将两个命令绑定到一个键吗?

另外,我试着去

((modMask, xK_s),
     shiftNextScreen nextScreen)
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为 nextScreen 成为 shiftNextScreen 的参数,这没有意义。我根本不知道haskell。

Pre*_*117 5

直到现在似乎没有人能回答你的问题。让我试一试:

TL; 博士

((modMask, xK_s),
     sequence_ [shiftNextScreen, nextScreen])
Run Code Online (Sandbox Code Playgroud)

应该管用。

为什么?

如果您查看http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Actions-CycleWS.html

您会看到以下类型的函数:

nextScreen :: X ()
shiftNextScreen :: X ()
Run Code Online (Sandbox Code Playgroud)

连同 X 是 Monad 和键绑定类型的知识是 (ButtonMask,KeySym), X ()你想要的:

结合nextScreenshiftNextScreen获得类型的结果X ()

如果我们简单地列出如下:

[nextScreen,shiftNextScreen]我们有 type [X ()], close 但还不是我们想要的。

我们知道 X 是一个 monad,对hoogle的快速搜索就会出现sequence_

这给了我们:

sequence_ [shiftNextScreen, nextScreen]
Run Code Online (Sandbox Code Playgroud)

它产生类型X (),因此是键映射右侧的有效操作。