考虑到我对Haskell的有限(零)知识,xmonad.hs可能具有挑战性。
我正在寻找如何修改我的配置文件,以允许“真”全屏使用,例如VLC观看视频。
我现在的xmonad.hs:
import XMonad
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Util.Run(spawnPipe)
import XMonad.Util.EZConfig(additionalKeys)
import Graphics.X11.ExtraTypes.XF86
import System.IO
main = do
xmproc <- spawnPipe "xmobar /home/user/.xmobarrc"
xmonad $ defaultConfig
{ terminal = "urxvt",
manageHook = manageDocks <+> manageHook defaultConfig
, layoutHook = avoidStruts $ layoutHook defaultConfig
, logHook = dynamicLogWithPP xmobarPP
{ ppOutput = hPutStrLn xmproc
, ppTitle = xmobarColor "green" "" . shorten 50
}
} `additionalKeys`
[ ((0 , xF86XK_AudioLowerVolume), spawn "amixer set Master on && amixer set Headphone on && amixer set Master 2-"),
((0 , xF86XK_AudioRaiseVolume), spawn "amixer set Master on && amixer set Headphone on && amixer set Master 2+"),
((0 , xF86XK_AudioMute), spawn "amixer set Master toggle && amixer set Headphone toggle")
]目前,我的xmobar在观看视频时是可见的,我在窗口上有一个红色边框,显示视频。
我如何修改这个配置,例如允许Mod-b在全屏模式和普通模式之间切换?
发布于 2013-12-08 00:40:39
虽然我对此一点都不确定,但我认为当你试图全屏地屏蔽一个瓷砖窗口时,你的问题就会出现。在你的配置中,一行写着
manageHook = manageDocks <+> ...告诉xmonad,您不希望您的平铺窗口重叠xmobar。因此,xmonad试图遵守这一点,即使是在全屏蔽窗口时,他们被平铺。因此,解决方案分为三部分:
<+>结合了管理钩子的选项。那句话
(className =?"Vlc“-> doFloat)
意思是“如果窗口是VLC窗口,默认情况下让它浮动”。xmonad-contrib模块的XMonad.Hooks.ManageHelpers包。这个模块包含了许多聪明的帮助函数来定制xmonad应该如何处理您的窗口。例如,使用它,您可以添加一条规则:
(isFullscreen -> doFullFloat)
这意味着“如果窗口试图成为全屏,自动浮动并使其覆盖整个屏幕”--这正是您想要的效果。将它添加到管理钩子中的方式与类名一样:
manageHook = manageDocks <+> (isFullscreen -> doFullFloat) <+> manageHook defaultConfig
然后,当你全屏时,VLC应该表现得很好,不管你是否让它浮动!作为一个小提示:当您开始在管理钩子中获得许多不同的选项,并且厌倦了将它们与<+>结合时,您也可以将其写成
manageHook = composeAll [
manageDocks,
isFullscreen --> doFullFloat,
className =? "Vlc" --> doFloat,
manageHook defaultConfig
]此composeAll将自动将列表中的每个项与<+>运算符结合起来。
请询问是否有一些配置,您不确定这意味着什么。我敢打赌这里的很多人都很乐意把Haskell代码翻译成一种人类语言。我知道要疯狂地复制和粘贴配置是多么令人沮丧,而不是真正知道它是如何工作的。(就在最近,我开始了解xmonad配置是如何工作的,这是一种美丽。)
编辑:关于您的窗口边框完全屏蔽窗口。有一个模块XMonad.Layout.NoBorders提供了整洁的函数smartBorders,它可以修改布局挂钩,这样它就不会在看起来完全屏蔽的窗口上绘制边框。也可以更改布局挂钩以使用此函数,方法是将配置中的行更改为
layoutHook = smartBorders . avoidStruts $ layoutHook defaultConfig.将几个函数合并为一个函数,在本例中,它将smartBorders和avoidStruts结合起来,从而使您得到两者的好处。然后将默认的布局钩子传递给它们,以创建修改过的、更好的布局挂钩。
不幸的是,我无法测试它的工作效果,因为我运行的是没有边界的XMonad。
发布于 2014-12-25 11:09:35
尝试在您的.xmobarrc中设置.xmobarrc,拥有avoidStruts (您已经拥有它),以及切换struts的键盘快捷方式,例如:
((mod4Mask .|. shiftMask, xK_f), sendMessage ToggleStruts)发布于 2013-12-07 21:21:55
这就是我在配置中所拥有的内容(稍微修改一下格式,使其更像您的配置):
main = do
config <- statusBar "xmobar" myPP toggleXMobarKey myConfig
xmonad config
myPP = xmobarPP { -- your PP customizations...
ppOutput = hPutStrLn xmproc
, ppTitle = xmobarColor "green" "" . shorten 50
}
toggleXMobarKey XConfig { XMonad.modMask = modMask } = (modMask, xK_b)
myConfig = defaultConfig { -- put your config here...
-- not including your logHook
}https://stackoverflow.com/questions/20446348
复制相似问题