首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态更改xmobar配置

如何动态更改xmobar配置
EN

Stack Overflow用户
提问于 2013-10-10 00:51:28
回答 1查看 719关注 0票数 5

我想要切换之间的xmobar配置动态使用键组合。我天真地将以下内容标记在我的其他关键模块上:

代码语言:javascript
复制
, ((controlMask, xK_l), xmproc <- spawnPipe "/usr/bin/xmobar /home/tony/.xmobarLrc")
, ((controlMask, xK_w), xmproc <- spawnPipe "/usr/bin/xmobar /home/tony/.xmobarWrc")

编译器在<-。你也许可以在代码中读懂我的意图。我不是Haskell专家,我正在用乐高的方法慢慢地建立我想要的环境,但是我在这里失败了。

我哪里出问题了?

提亚

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-11 20:33:11

好吧,做你想做的事很复杂。您可以使用xmonad-contrib图书馆中的可扩展状态模块。

为此,必须在xmonad配置文件的顶部添加一个语言语用

{-#语言DeriveDataTypeable #-}

您需要它来派生存储xmobar句柄的数据类型的可键入实例。

代码语言:javascript
复制
newtype XMobarHandle = XMobarHandle { xmhandle :: Maybe Handle } deriving Typeable

instance ExtensionClass XMobarHandle where
        initialValue = XMobarHandle Nothing

现在您可以定义键绑定,它从可扩展状态检索当前xmobar句柄,如果不是,关闭它,生成一个新句柄并将其放入状态。

代码语言:javascript
复制
((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)
)

如果愿意,可以在绑定中为do块创建一个函数。另一个键的绑定是作为练习留下的!

要使其编译,您仍然需要用于此代码中的模块的导入语句。(不过,我可能忘了一个!)

代码语言:javascript
复制
import           XMonad.Util.Run
import           System.IO
import qualified XMonad.Util.ExtensibleState         as XS

你也必须编辑你的logHook。在这里,您必须从可扩展状态中提取句柄,就像在keybind中一样,并将其作为函数xmobarlog的参数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19285278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档