首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让xmonad在xmobar中显示当前工作区的名称。

让xmonad在xmobar中显示当前工作区的名称。
EN

Unix & Linux用户
提问于 2015-07-20 15:56:07
回答 1查看 6.6K关注 0票数 3

新加入xmonad/ xmobar /haskell,尝试获取当前工作区的名称以显示在xmobar中。到目前为止,我有一个xmonad.hs:

代码语言:javascript
复制
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不显示名称。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2015-07-21 23:05:15

您正在混合两种不同的方式将信息发送到xmobar。

在此:

代码语言:javascript
复制
main = xmonad =<< xmobar myConfig

您正在使用xmobar方便函数。您可以单击文档上的源链接来查看如何定义它。它使用statusBar函数以默认的xmobarPP启动xmobar。statusBar函数使用spawnPipe启动状态栏应用程序,并修改PP以输出到该管道。

这是您正在看到的栏,默认的漂亮打印机和记录器只打印工作区标记。您使用的XMonad.Actions.WorkspaceNames模块名称与工作区标记相关联。它提供了workspaceNamesPP函数,该函数与PP组合以检索名称。

在这里:

代码语言:javascript
复制
myLogHook = workspaceNamesPP xmobarPP >>= dynamicLogString >>= xmonadPropLog

您将workspaceNamesPP函数与xmobarPP一起使用,将结果传递给以字符串形式返回状态的dynamicLogString,并将该字符串传递给xmonadPropLog,后者将其写入根窗口上的_XMONAD_LOG属性。这是一种将信息传递给xmobar的不同方式,xmobar可以是配置为读取该属性。在这种情况下,您不必从xmonad启动xmobar。

所以你应该决定你想用哪种方式。

例如,可以继续使用XMonad使用spawnPipe从xmobar启动xmobar,并让myLogHook将状态写入传递给它的管道:

代码语言:javascript
复制
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函数还修改manageHooklayoutHook,以便将XMonad.Hooks.ManageDocks模块中的manageDocksavoidStruts添加到它们中。你应该使用这个模块,这样条子和窗口就不会互相踩在一起了。manageDocks使XMonad忽略类型dock或桌面的窗口。avoidStruts布局修饰符根据其_NET_WM_撑杆_部分属性将布局更改为为条形图保留空间。

manageHook layoutHookhandleEventHookXConfig的一部分,因此要添加由XMonad.Hooks.ManageDocks模块提供的功能:

代码语言:javascript
复制
 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以切换条形间隙,因此如果您想要该键绑定,也应该添加它。

此外:

代码语言:javascript
复制
import XMonad.Util.EZConfig(additionalKeys)
import XMonad.Util.EZConfig

您从additionalKeys模块导入XMonad.Util.EZConfig,然后导入所有XMonad.Util.EZConfig模块。

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

https://unix.stackexchange.com/questions/217213

复制
相关文章

相似问题

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