我在配置文件中使用了一些键映射xmonad.hs
:
...
, modMask = mod4Mask -- Rebind Mod to the Windows key
...
[ ((controlMask, xK_Print), spawn "sleep 0.2; scrot -s")
, ((0, xK_Print), spawn "scrot")
, ((controlMask, xK_f), spawn "firefox")
]
firefox
按 时将运行第三个映射ctrl+f。我想做一些更复杂的事情:
if (firefox is running):
focus and maximize firefox window:
else:
run firefox
而且我想ctrl+f改成win+f.我怎样才能做到这一点?
答案1
看着XMonad 的贡献包, 你会找到XMonad.Actions.WindowGo
,它导出以下功能:
runOrRaiseMaster :: String -> Query Bool -> X ()
它接受程序的字符串参数跑步,例如“火狐”;以及使用的布尔查询查明它是否已经在运行,通过 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”匹配的窗口,它将被集中和设置为主控,即取决于您最近的布局, 将大窗户
- 如果没有窗口匹配,则 Firefox 将产生的和设置为主控。
可以通过Full
调用后选择布局来模拟最大化runOrRaiseMaster
,正如这里所描述的:
("M-<F1>", sendMessage $ JumpToLayout "Full")
(请注意,此示例还演示了XMonad.Util.EZConfig
允许更简单的键绑定定义)
组合这两件事也是可能的。两者都是类型X ()
,即它们是在 X Monad 中。使用>>
,其类型为(用:t (>>)
in进行检查ghci
)
(>>) :: Monad m => m a -> m b -> m b
我们也有两种类型(runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")
的组合,因此它可以绑定到一个键。X ()
X ()
)
编辑代码行中缺少>>
编辑2 modm
-> modMask
。
编辑3 这xmonad.hs
希望有效。