新加入xmonad/ xmobar /haskell,尝试获取当前工作区的名称以显示在xmobar中。到目前为止,我有一个xmonad.hs:
module Main where
import XMonad
import XMonad.Hooks.SetWMName
import XMonad.Hooks.DynamicLog
import XMonad.Actions.WorkspaceNames
import XMonad.Util.EZConfig(additionalKeys)
import XMonad.Prompt
import XMonad.Util.EZConfig
main = xmonad =<< xmobar myConfig
myConfig = defaultConfig { startupHook = setWMName "LG3D" , logHook = myLogHook } `additionalKeys` [ ((mod4Mask, xK_r ), renameWorkspace defaultXPConfig) ]
myLogHook = workspaceNamesPP xmobarPP >>= dynamicLogString >>= xmonadPropLog这似乎允许我更改工作区的名称(至少出现带有"Workspace name:“的提示符,并接受我的输入)。
但是,xmobar不显示名称。
发布于 2015-07-21 23:05:15
您正在混合两种不同的方式将信息发送到xmobar。
在此:
main = xmonad =<< xmobar myConfig您正在使用xmobar方便函数。您可以单击文档上的源链接来查看如何定义它。它使用statusBar函数以默认的xmobarPP启动xmobar。statusBar函数使用spawnPipe启动状态栏应用程序,并修改PP以输出到该管道。
这是您正在看到的栏,默认的漂亮打印机和记录器只打印工作区标记。您使用的XMonad.Actions.WorkspaceNames模块名称与工作区标记相关联。它提供了workspaceNamesPP函数,该函数与PP组合以检索名称。
在这里:
myLogHook = workspaceNamesPP xmobarPP >>= dynamicLogString >>= xmonadPropLog您将workspaceNamesPP函数与xmobarPP一起使用,将结果传递给以字符串形式返回状态的dynamicLogString,并将该字符串传递给xmonadPropLog,后者将其写入根窗口上的_XMONAD_LOG属性。这是一种将信息传递给xmobar的不同方式,xmobar可以是配置为读取该属性。在这种情况下,您不必从xmonad启动xmobar。
所以你应该决定你想用哪种方式。
例如,可以继续使用XMonad使用spawnPipe从xmobar启动xmobar,并让myLogHook将状态写入传递给它的管道:
import XMonad.Util.Run -- spawnPipe and associated functions
main = xmonad . myConfig =<< spawnPipe "xmobar"
myConfig pipe = defaultConfig { startupHook = setWMName "LG3D" ,
logHook = myLogHook pipe}
`additionalKeys`
[((mod4Mask, xK_r), renameWorkspace defaultXPConfig)]
myLogHook pipe = workspaceNamesPP xmobarPP {ppOutput = hPutStrLn pipe}
>>= dynamicLogWithPPstatusBar函数还修改manageHook和layoutHook,以便将XMonad.Hooks.ManageDocks模块中的manageDocks和avoidStruts添加到它们中。你应该使用这个模块,这样条子和窗口就不会互相踩在一起了。manageDocks使XMonad忽略类型dock或桌面的窗口。avoidStruts布局修饰符根据其_NET_WM_撑杆_部分属性将布局更改为为条形图保留空间。
manageHook layoutHook和handleEventHook是XConfig的一部分,因此要添加由XMonad.Hooks.ManageDocks模块提供的功能:
myConfig pipe = defaultConfig
{
startupHook = setWMName "LG3D" ,
logHook = myLogHook pipe,
manageHook = manageDocks <+> manageHook defaultConfig,
layoutHook = avoidStruts $ layoutHook defaultConfig,
handleEventHook = docksEventHook <+> handleEventHook defaultConfig
} `additionalKeys` [((mod4Mask, xK_r), renameWorkspace defaultXPConfig) ]您所使用的xmobar函数还将mod +B键快捷方式绑定到sendMessage ToggleStruts以切换条形间隙,因此如果您想要该键绑定,也应该添加它。
此外:
import XMonad.Util.EZConfig(additionalKeys)
import XMonad.Util.EZConfig您从additionalKeys模块导入XMonad.Util.EZConfig,然后导入所有XMonad.Util.EZConfig模块。
https://unix.stackexchange.com/questions/217213
复制相似问题