查看XMonad的contrib软件包,您会发现XMonad.Actions.WindowGo
,该软件包导出以下功能:
runOrRaiseMaster :: String -> Query Bool -> X ()
它使用要运行的程序的字符串参数,例如“ firefox”;以及一个布尔查询,用于通过X11属性来查找它是否已经在运行(className =? "Firefox")
(例如,有关变体,请参见XMonad.Actions.WindowGo
页面顶部)。
因此,您所需runOrRaiseMaster "firefox" (className =? "Firefox")
要做的就是绑定到所需的密钥,如中所述XMonad.Doc.Extending
,通过
((modMask, xK_f ), runOrRaiseMaster "firefox" (className =? "Firefox"))
作为Data.Map
配置键绑定的一部分(详细信息因您的设置方式而异,即整个设置xmonad.hs
,请参见添加键绑定)。
请注意,在XMonad 中最大化窗口并没有真正意义。当你做一些事情,作为解释,你就会有Mod4+ f行为如下:
- 如果有一个与“ Firefox”匹配的类名的窗口,它将被聚焦并设置为master,即,根据您最近的布局,将是大窗口
- 如果没有窗口的比赛,火狐将催生并设置为主。
可以通过Full
在调用后选择布局来模拟最大化runOrRaiseMaster
,如下所述:
("M-<F1>", sendMessage $ JumpToLayout "Full")
(请注意,此示例还演示了XMonad.Util.EZConfig
允许更轻松的键绑定定义)
结合这两件事也是可能的。两者都是类型X ()
,即它们在X Monad中。使用>>
,类型为(使用:t (>>)
中检查ghci
)
(>>) :: Monad m => m a -> m b -> m b
我们也(runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")
可以将两种X ()
类型的类型组合在一起X ()
,因此可以将其绑定到键上。
编辑)
代码行中缺少>>
编辑2- modm
> modMask
。
Edit3 这xmonad.hs
有望工作。
(为什么不为您学习Haskell带来的好处?)