Иконки для обозначения макетов в XMobar (XMonad)
Я знаю, что XMobar поддерживает растровые иконки, и я смог их настроить. Однако я также хочу использовать значки для обозначения текущей компоновки XMonad, но XMobar включает ее stdin
от XMonad. И я не мог найти способ передать растровые иконки вместо обычных символов.
Так как же передать значки вместо символов для обозначения макета XMonad в XMobar?
Моя текущая часть конфигурации относительно макетов:
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
2 ответа
Просто добавьте это к вашему xmonad.hs
:
import XMonad.Layout.Named
myLayout = named "<icon=/home/foo/bar/icon.xpm/>" $ ResizableTall 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
Очевидно, вам необходимо настроить имена используемых вами макетов, а также имена значков.
Теоретически, вы могли бы сделать еще один шаг вперед, если бы вы хотели стать действительно безвкусными и придать каждому макету свой цвет. Вы бы на самом деле упростили строку ppLayout до
, ppLayout = myLayoutPrinter
Добавлены пользовательские цвета в 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