Configuration 如何动态更改xmobar配置
我想通过使用组合键在xmobar配置之间动态切换。我天真地在我的其他关键MOD上标记了以下内容:Configuration 如何动态更改xmobar配置,configuration,xmonad,xmobar,Configuration,Xmonad,Xmobar,我想通过使用组合键在xmobar配置之间动态切换。我天真地在我的其他关键MOD上标记了以下内容: , ((controlMask, xK_l), xmproc <- spawnPipe "/usr/bin/xmobar /home/tony/.xmobarLrc") , ((controlMask, xK_w), xmproc <- spawnPipe "/usr/bin/xmobar /home/tony/.xmobarWrc") ,((controlMask,xK_l),xmp
, ((controlMask, xK_l), xmproc <- spawnPipe "/usr/bin/xmobar /home/tony/.xmobarLrc")
, ((controlMask, xK_w), xmproc <- spawnPipe "/usr/bin/xmobar /home/tony/.xmobarWrc")
,((controlMask,xK_l),xmproc嗯,做你想做的事情是相当复杂的。你可以从中使用可扩展的状态模块
为此,您必须在xmonad配置文件的顶部添加一个:
{-#语言派生数据类型化}
您需要它为存储xmobar句柄的数据类型派生可类型实例
newtype XMobarHandle = XMobarHandle { xmhandle :: Maybe Handle } deriving Typeable
instance ExtensionClass XMobarHandle where
initialValue = XMobarHandle Nothing
现在您可以定义键绑定,它从可扩展状态检索当前xmobar句柄,如果它不是空的话关闭它,生成一个新句柄并将其置于状态
((controlMask, xK_l), do
mh <- xmhandle `fmap` XS.get
maybe (return ()) (io . hClose) mh
xmproc <- spawnPipe "/usr/bin/xmobar /home/tony/.xmobarLrc"
XS.put $ XMobarHandle (Just xmproc)
)
您还必须编辑日志钩子。在这里,您必须从可扩展状态中提取句柄,就像在keybind中一样,并将其作为函数xmobarlog的参数。感谢您不厌其烦地给出如此全面的答案。虽然细节超出了lego Haskell编码器的范围,但原理很清楚,您的解释也很有帮助这个过程很简单。
import XMonad.Util.Run
import System.IO
import qualified XMonad.Util.ExtensibleState as XS