Ton*_*tin 5 configuration xmonad xmobar
我想通过使用组合键在动态切换xmobar配置.我天真地将以下内容标记到我的其他关键mods:
, ((controlMask, xK_l), xmproc <- spawnPipe "/usr/bin/xmobar /home/tony/.xmobarLrc")
, ((controlMask, xK_w), xmproc <- spawnPipe "/usr/bin/xmobar /home/tony/.xmobarWrc")
Run Code Online (Sandbox Code Playgroud)
和< - 的编译器barfs.您可以在代码中阅读我的意图.我不是Haskell专家,我正在慢慢地通过lego方法建立我想要的环境,但这在我这里失败了.
我哪里错了?
TIA
小智 3
嗯,做你想做的事情是相当复杂的。您可以使用xmonad-contrib 库中的可扩展状态模块。
为此,您必须在 xmonad 配置文件的顶部添加LANGUAGE pragma :
{-# 语言 DeriveDataTypeable #-}
您需要它来派生存储 xmobar 句柄的数据类型的Typeable实例。
newtype XMobarHandle = XMobarHandle { xmhandle :: Maybe Handle } deriving Typeable
instance ExtensionClass XMobarHandle where
initialValue = XMobarHandle Nothing
Run Code Online (Sandbox Code Playgroud)
现在您可以定义键绑定,它从可扩展状态检索当前的 xmobar 句柄,如果不是Nothing则关闭它,生成一个新句柄并将其放入该状态。
((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)
)
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以为绑定中的 do 块创建一个函数。另一个键的绑定留作练习!
为了使其编译,您仍然需要此代码中使用的模块的导入语句。(不过我可能忘记了!)
import XMonad.Util.Run
import System.IO
import qualified XMonad.Util.ExtensibleState as XS
Run Code Online (Sandbox Code Playgroud)
您还必须编辑您的 logHook。在那里,您必须像在按键绑定中一样从可扩展状态中提取句柄,并将其作为函数xmobarlog的参数。
| 归档时间: |
|
| 查看次数: |
396 次 |
| 最近记录: |