用于指示XMobar(XMonad)中布局的图标

用于指示XMobar(XMonad)中布局的图标,xmonad,xmobar,Xmonad,Xmobar,我知道XMobar支持位图图标,我能够配置这些图标。然而,我也希望使用图标来指示当前的XMonad布局,但是XMobar从XMonad中获取它。我想不出一种方法来传递位图图标而不是常规符号 那么,如何在XMobar中传递图标而不是指示XMonad布局的符号呢 我当前配置中与布局相关的部分: defaultLayouts = smartBorders(avoidStruts( renamed [Replace "R"] (ResizableTall 1 (3/100) (1/2) [])

我知道XMobar支持位图图标,我能够配置这些图标。然而,我也希望使用图标来指示当前的XMonad布局,但是XMobar从XMonad中获取它。我想不出一种方法来传递位图图标而不是常规符号

那么,如何在XMobar中传递图标而不是指示XMonad布局的符号呢

我当前配置中与布局相关的部分:

defaultLayouts = smartBorders(avoidStruts(
  renamed [Replace "R"] (ResizableTall 1 (3/100) (1/2) [])
  ||| renamed [Replace "R!"] (Mirror (ResizableTall 1 (3/100) (1/2) []))
  ||| renamed [Replace "F"] (noBorders Full)
  ||| renamed [Replace "#"] (Grid)
  ||| renamed [Replace "3C"] (ThreeColMid 1 (3/100) (3/4))
  ||| renamed [Replace "O"] (Circle)))

chatLayout = renamed [Replace "Chat"] 
  $ avoidStruts $ withIM (0.2) isPidgin 
  $ reflectHoriz $ withIM (0.2) isSkype (Grid) 
  where 
    isSkype = (Title "zoresvit - Skype™")
    isPidgin = (Title "Buddy List")

fullLayout = renamed [Replace "F"] $ avoidStruts $ noBorders $ (Full)
myLayouts = onWorkspace "η" chatLayout $ defaultLayouts

main = do
  xmproc <- spawnPipe "xmobar ~/.xmobarrc"
  xmonad $ withUrgencyHook NoUrgencyHook $ defaultConfig {
        borderWidth = myBorderWidth
      , focusedBorderColor = myFocusedBorderColor
      , handleEventHook = fullscreenEventHook
      , layoutHook = myLayouts
      , manageHook = manageHook defaultConfig
          <+> composeAll myManagementHooks
          <+> manageDocks
      , modMask = myModMask
      , normalBorderColor = myNormalBorderColor
      , startupHook = do
          spawn "~/.xmonad/startup_hook.sh"
      , terminal = myTerminal
      , workspaces = myWorkspaces
      , logHook = dynamicLogWithPP $ xmobarPP {
            ppOutput = hPutStrLn xmproc
          , ppCurrent = xmobarColor solarizedGreen "" . wrap myCurrentWSLeft myCurrentWSRight
          , ppHidden = xmobarColor solarizedBase0 ""
          , ppHiddenNoWindows = xmobarColor solarizedBase02 ""
          , ppLayout = xmobarColor solarizedCyan ""
          , ppTitle = xmobarColor solarizedBase1 "" . shorten myTitleLength
          , ppUrgent = xmobarColor solarizedRed "" . wrap myUrgentWSLeft myUrgentWSRight
          , ppVisible = xmobarColor solarizedBase01 "" . wrap myVisibleWSLeft myVisibleWSRight
          }
      } `additionalKeys` myKeyBindings
defaultLayouts=smartBorders(avoidStruts(
更名为[替换“R”](大小可调整为1(3/100)(1/2)[]
|||已重命名[替换“R!”](镜像(可调整大小的所有1(3/100)(1/2)[]))
|||已重命名[替换“F”](全部订单)
|||重命名为[替换“#”](网格)
|||更名为[替换“3C”](ThreeColMid 1(3/100)(3/4))
|||更名为[替换“O”](圆圈)))
chatLayout=已重命名[替换“聊天”]
$avoidStruts$withIM(0.2)isPidgin
$reflectHoriz$withIM(0.2)isSkype(网格)
哪里
isSkype=(标题“zoresvit-Skype™")
isPidgin=(标题“好友列表”)
fullLayout=重命名[替换“F”]$avoidStruts$NOBOORDERS$(完整)
myLayouts=onWorkspace“η”chatLayout$defaultLayouts
main=do

xmproc只需将其添加到您的
xmonad.hs

import XMonad.Layout.Named
myLayout = named "<icon=/home/foo/bar/icon.xpm/>" $ ResizableTall 1 (3/100) (1/2) []
导入XMonad.Layout.Named
myLayout=命名为“$resizebletAll 1(3/100)(1/2)[]

作为替代建议,您可以更改XMonad显示版面标题的方式。首先,更改行

      , ppLayout = xmobarColor solarizedCyan ""
阅读

      , ppLayout = xmobarColor solarizedCyan "" . myLayoutPrinter
然后,在文件中的某个位置添加以下函数:

myLayoutPrinter :: String -> String
myLayoutPrinter "Full" = "<icon=layout_full.xbm/>"
myLayoutPrinter "Tall" = "<icon=layout_tall.xbm/>"
myLayoutPrinter "Mirror Tall" = "<icon=layout_mirror_tall.xbm/>"
myLayoutPrinter x = x
用户将自定义颜色添加到myLayoutPrinter中

myLayoutPrinter :: String -> String
myLayoutPrinter "Full" = xmobarColor "red" "" "<icon=layout_full.xbm/>"
myLayoutPrinter "Tall" = xmobarColor "green" "" "<icon=layout_tall.xbm/>"
myLayoutPrinter "Mirror Tall" = xmobarColor "blue" "" "<icon=layout_mirror_tall.xbm/>"
myLayoutPrinter x = xmobarColor "white" "" x
myLayoutPrinter::String->String
myLayoutPrinter“满”=xmobarColor“红”
myLayoutPrinter“高”=xmobarColor“绿色”
myLayoutPrinter“镜像高”=xmobarColor“蓝色”
myLayoutPrinter x=xmobarColor“白色”“x
myLayoutPrinter :: String -> String
myLayoutPrinter "Full" = xmobarColor "red" "" "<icon=layout_full.xbm/>"
myLayoutPrinter "Tall" = xmobarColor "green" "" "<icon=layout_tall.xbm/>"
myLayoutPrinter "Mirror Tall" = xmobarColor "blue" "" "<icon=layout_mirror_tall.xbm/>"
myLayoutPrinter x = xmobarColor "white" "" x