首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于指示XMobar (XMonad)中布局的图标

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

Stack Overflow用户
提问于 2014-06-18 17:21:04
回答 2查看 3.9K关注 0票数 4

我知道XMobar支持位图图标,我能够配置这些图标。不过,我也希望使用图标来指示当前的XMonad布局,但是XMobar从XMonad获得了stdin上的图标。我想不出一种方法来传递位图图标而不是普通的符号。

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

我当前配置的部分相对于布局而言:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-30 22:05:34

只需将此添加到您的xmonad.hs

代码语言:javascript
复制
import XMonad.Layout.Named
myLayout = named "<icon=/home/foo/bar/icon.xpm/>" $ ResizableTall 1 (3/100) (1/2) []
票数 2
EN

Stack Overflow用户

发布于 2015-12-09 11:22:32

作为另一个建议,您可以更改XMonad显示布局标题的方式。首先,换行

代码语言:javascript
复制
      , ppLayout = xmobarColor solarizedCyan ""

阅读

代码语言:javascript
复制
      , ppLayout = xmobarColor solarizedCyan "" . myLayoutPrinter

然后,在文件中的某个地方添加以下函数:

代码语言:javascript
复制
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

显然,您需要自定义所使用的布局的名称以及图标名称。

理论上,你甚至可以更进一步,如果你想得到真正华而不实,并给每一个布局自己的颜色。实际上,您可以将ppLayout行简化为

代码语言:javascript
复制
      , ppLayout = myLayoutPrinter

在myLayoutPrinter中添加了自定义颜色

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24291566

复制
相关文章

相似问题

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