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
这似乎允许我更改工作区的名称(至少会出现一个带有“工作区名称:”的提示,并接受我的输入)。
但是,xmobar 不显示名称。
答案1
您正在混合两种不同的方式来向 xmobar 发送信息。
这里 :
main = xmonad =<< xmobar myConfig
您正在使用xmobar
便利功能。您可以单击文档上的源链接来查看它是如何定义的。它使用statusBar
功能以默认启动 xmobar xmobarPP
。该statusBar
函数用于spawnPipe
启动状态栏应用程序,并将PP
输出修改为该管道。
这是您看到的栏,带有默认的漂亮打印机和记录器,仅打印工作区标签。XMonad.Actions.WorkspaceNames
您正在使用的模块将名称与工作区标签相关联。它提供了workspaceNamesPP
与PP
检索名称。
和这里 :
myLogHook = workspaceNamesPP xmobarPP >>= dynamicLogString >>= xmonadPropLog
您正在使用workspaceNamesPP
函数xmobarPP
,将结果传递给以dynamicLogString
字符串形式返回状态的函数,然后将该字符串传递给将xmonadPropLog
其写入的函数_XMONAD_LOG
属性写入根窗口的函数。这是向 xmobar 传达信息的不同方式,可以是配置为读取该属性。在这种情况下,您不必从 xmonad 启动 xmobar。
因此,您应该决定要使用哪种方式。
例如,您可以使用以下命令继续从 XMonad 启动 xmobarspawnPipe
,并将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}
>>= dynamicLogWithPP
该statusBar
函数还修改manageHook
和layoutHook
以添加manageDocks
和avoidStruts
来自XMonad.Hooks.ManageDocks模块给他们。您应该使用此模块,以便栏和窗口不会互相踩踏。这manageDocks
使得 XMonad 忽略扩展坞或桌面类型的窗口。布局avoidStruts
修改器更改布局,根据条形图保留空间。_NET_WM_STRUT_PARTIAL财产。
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
模块。