diff --git a/CHANGES.md b/CHANGES.md index cc3121d9..9279e6b4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -239,6 +239,13 @@ passed to `dzen2` invocation. The behaviour of current `dzen` function is unchanged. + * `XMonad.Util.Dzen` + + - Now provides functions `fgColor` and `bgColor` to specify foreground and + background color, `align` and `slaveAlign` to set text alignment, and + `lineCount` to enable a second (slave) window that displays lines beyond + the initial (title) one. + ## 0.13 (February 10, 2017) ### Breaking Changes diff --git a/XMonad/Util/Dzen.hs b/XMonad/Util/Dzen.hs index 910beca4..4702ed7f 100644 --- a/XMonad/Util/Dzen.hs +++ b/XMonad/Util/Dzen.hs @@ -25,6 +25,11 @@ module XMonad.Util.Dzen ( x, y, addArgs, + fgColor, + bgColor, + align, + slaveAlign, + lineCount, -- * Legacy interface dzen, @@ -41,6 +46,7 @@ import Control.Monad import XMonad import XMonad.StackSet import XMonad.Util.Run (runProcessWithInputAndWait, seconds) +import XMonad.Util.Font (Align (..)) type DzenConfig = (Int, [String]) -> X (Int, [String]) @@ -116,6 +122,45 @@ x n = addArgs ["-x", show n] y :: Int -> DzenConfig y n = addArgs ["-y", show n] +-- | Set the foreground color. +-- +-- Please be advised that @fgColor@ and @bgColor@ also exist in "XMonad.Prompt". +-- If you use both modules, you might have to tell the compiler which one you mean: +-- +-- > import XMonad.Prompt as P +-- > import XMonad.Util.Dzen as D +-- > +-- > dzenConfig (D.fgColor "#f0f0f0") "foobar" +fgColor :: String -> DzenConfig +fgColor c = addArgs ["-fg", c] + +-- | Set the background color. +bgColor :: String -> DzenConfig +bgColor c = addArgs ["-bg", c] + +-- | Set the alignment of the title (main) window content. +-- Note that @AlignRightOffset@ is treated as equal to @AlignRight@. +-- +-- > import XMonad.Util.Font (Align(..)) +-- > +-- > dzenConfig (align AlignLeft) "foobar" +align :: Align -> DzenConfig +align = align' "-ta" + +-- | Set the alignment of the slave window content. +-- Using this option only makes sense if you also use the @lineCount@ parameter. +slaveAlign :: Align -> DzenConfig +slaveAlign = align' "-sa" + +-- Set an alignment parameter +align' :: String -> Align -> DzenConfig +align' opt a = addArgs [opt, s] where + s = case a of + AlignCenter -> "c" + AlignLeft -> "l" + AlignRight -> "r" + AlignRightOffset _ -> "r" + -- | Specify the font. Check out xfontsel to get the format of the String -- right; if your dzen supports xft, then you can supply that here, too. font :: String -> DzenConfig @@ -160,6 +205,14 @@ detailFromScreenId sc ws = fmap screenRect maybeSD where mapping = map (\s -> (screen s, screenDetail s)) (c:v) maybeSD = lookup sc mapping +-- | Enable slave window and specify the number of lines. +-- +-- Dzen can optionally draw a second window underneath the title window. +-- By default, this window is only displayed if the mouse enters the title window. +-- This option is only useful if the string you want to display contains more than one line. +lineCount :: Int -> DzenConfig +lineCount n = addArgs ["-l", show n] + -- | @dzen str timeout@ pipes @str@ to dzen2 for @timeout@ microseconds. -- Example usage: --