From 04ffb1e36db9b49ffe393ec6bc099a3fe505e3b8 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Thu, 13 Mar 2014 20:33:51 +0100 Subject: Back to picking first screen by default (#158) --- news.md | 10 ++++++++++ readme.md | 8 +++++++- samples/xmobar.config | 1 + src/Config.hs | 6 +++++- src/Main.hs | 5 ++--- src/Parsers.hs | 7 +++++-- src/Window.hs | 20 +++++++++++--------- src/Xmobar.hs | 3 ++- xmobar.cabal | 2 +- 9 files changed, 44 insertions(+), 18 deletions(-) diff --git a/news.md b/news.md index b191951..8d0b933 100644 --- a/news.md +++ b/news.md @@ -1,5 +1,15 @@ % xmobar - Release notes +## Version 0.20.1 (March 13, 2014) + +_New features_ + + - Back to picking by default the first available screen, with a new + configuration option, `pickBroadest`, for choosing the broadest + (see [issue #158]). + +[issue #158]: https://github.com/jaor/xmobar/issues/76 + ## Version 0.20 (March 10, 2014) _New features_ diff --git a/readme.md b/readme.md index 6df15a4..84c3946 100644 --- a/readme.md +++ b/readme.md @@ -11,7 +11,7 @@ xmobar was inspired by the [Ion3] status bar, and supports similar features, like dynamic color management, icons, output templates, and extensibility through plugins. -This page documents xmobar 0.20 (see [release notes]). +This page documents xmobar 0.21 (see [release notes]). [This screenshot] shows xmobar running under [sawfish], with antialiased fonts. And [this one] is my desktop with [xmonad] and two @@ -267,6 +267,12 @@ Other configuration options: to set this option to `False` so that it behaves as a docked application. Defaults to `True`. +`pickBroadest` +: When multiple displays are available, xmobar will choose by default + the first one to place itself. With this flag set to `True` + (the default is `False`) it will choose the broadest one + instead. + `persistent` : When True the window status is fixed i.e. hiding or revealing is not possible. This option can be toggled at runtime. Defaults to False. diff --git a/samples/xmobar.config b/samples/xmobar.config index 8508741..9c359e3 100644 --- a/samples/xmobar.config +++ b/samples/xmobar.config @@ -5,6 +5,7 @@ Config { font = "-misc-fixed-*-*-*-*-10-*-*-*-*-*-*-*" , fgColor = "grey" , position = Top , lowerOnStart = True + , pickBroadest = False , persistent = False , hideOnStart = False , commands = [ Run Weather "EGPF" ["-t",": C","-L","18","-H","25","--normal","green","--high","red","--low","lightblue"] 36000 diff --git a/src/Config.hs b/src/Config.hs index eaf044a..ed3e51a 100644 --- a/src/Config.hs +++ b/src/Config.hs @@ -58,6 +58,9 @@ data Config = , allDesktops :: Bool -- ^ Tell the WM to map to all desktops , overrideRedirect :: Bool -- ^ Needed for dock behaviour in some -- non-tiling WMs + , pickBroadest :: Bool -- ^ Use the broadest display + -- instead of the first one by + -- default , lowerOnStart :: Bool -- ^ lower to the bottom of the -- window stack on initialization , persistent :: Bool -- ^ Whether automatic hiding should @@ -70,7 +73,7 @@ data Config = -- commands in the output template -- (default '%') , alignSep :: String -- ^ Separators for left, center and - -- right text alignment + -- right text alignment , template :: String -- ^ The output template } deriving (Read) @@ -111,6 +114,7 @@ defaultConfig = , persistent = False , allDesktops = True , overrideRedirect = True + , pickBroadest = False , commands = [ Run $ Date "%a %b %_d %Y * %H:%M:%S" "theDate" 10 , Run StdinReader] , sepChar = "%" diff --git a/src/Main.hs b/src/Main.hs index a3c60c3..92573b9 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -175,7 +175,7 @@ usage = usageInfo header options ++ footer info :: String info = "xmobar " ++ showVersion version ++ "\n (C) 2007 - 2010 Andrea Rossato " - ++ "\n (C) 2010 - 2013 Jose A Ortega Ruiz\n " + ++ "\n (C) 2010 - 2014 Jose A Ortega Ruiz\n " ++ mail ++ "\n" ++ license mail :: String @@ -188,7 +188,7 @@ license = "\nThis program is distributed in the hope that it will be useful," ++ "\nSee the License for more details." doOpts :: Config -> [Opts] -> IO Config -doOpts conf [] = +doOpts conf [] = return (conf {lowerOnStart = lowerOnStart conf && overrideRedirect conf}) doOpts conf (o:oo) = case o of @@ -217,4 +217,3 @@ doOpts conf (o:oo) = "specified with the -" ++ c:" option\n") readStr str = [x | (x,t) <- reads str, ("","") <- lex t] doOpts' opts = doOpts opts oo - diff --git a/src/Parsers.hs b/src/Parsers.hs index a1d60d8..f25fd4d 100644 --- a/src/Parsers.hs +++ b/src/Parsers.hs @@ -175,12 +175,14 @@ parseConfig = runParser parseConf fields "Config" . stripComments perms = permute $ Config <$?> pFont <|?> pBgColor <|?> pFgColor <|?> pPosition <|?> pBorder <|?> pBdColor <|?> pHideOnStart <|?> pAllDesktops - <|?> pOverrideRedirect <|?> pLowerOnStart <|?> pPersistent + <|?> pOverrideRedirect <|?> pPickBroadest + <|?> pLowerOnStart <|?> pPersistent <|?> pCommands <|?> pSepChar <|?> pAlignSep <|?> pTemplate + fields = [ "font", "bgColor", "fgColor", "sepChar", "alignSep" , "border", "borderColor" ,"template", "position" - , "allDesktops", "overrideRedirect" + , "allDesktops", "overrideRedirect", "pickBroadest" , "hideOnStart", "lowerOnStart", "persistent", "commands" ] @@ -199,6 +201,7 @@ parseConfig = runParser parseConf fields "Config" . stripComments pBorder = readField border "border" pAllDesktops = readField allDesktops "allDesktops" pOverrideRedirect = readField overrideRedirect "overrideRedirect" + pPickBroadest = readField pickBroadest "pickBroadest" pCommands = field commands "commands" readCommands diff --git a/src/Window.hs b/src/Window.hs index 3fdb923..876b7a2 100644 --- a/src/Window.hs +++ b/src/Window.hs @@ -1,7 +1,7 @@ ----------------------------------------------------------------------------- -- | -- Module : Window --- Copyright : (c) 2011-13 Jose A. Ortega Ruiz +-- Copyright : (c) 2011-14 Jose A. Ortega Ruiz -- : (c) 2012 Jochen Keil -- License : BSD-style (see LICENSE) -- @@ -40,7 +40,7 @@ createWin d fs c = do rootw <- rootWindow d dflt (as,ds) <- textExtents fs "0" let ht = as + ds + 4 - r = setPosition (position c) srs (fi ht) + r = setPosition c (position c) srs (fi ht) win <- newWindow d (defaultScreenOfDisplay d) rootw r (overrideRedirect c) setProperties c d win setStruts r c d win srs @@ -54,13 +54,13 @@ repositionWin d win fs c = do srs <- getScreenInfo d (as,ds) <- textExtents fs "0" let ht = as + ds + 4 - r = setPosition (position c) srs (fi ht) + r = setPosition c (position c) srs (fi ht) moveResizeWindow d win (rect_x r) (rect_y r) (rect_width r) (rect_height r) setStruts r c d win srs return r -setPosition :: XPosition -> [Rectangle] -> Dimension -> Rectangle -setPosition p rs ht = +setPosition :: Config -> XPosition -> [Rectangle] -> Dimension -> Rectangle +setPosition c p rs ht = case p' of Top -> Rectangle rx ry rw h TopP l r -> Rectangle (rx + fi l) ry (rw - fi l - fi r) h @@ -71,11 +71,11 @@ setPosition p rs ht = BottomP l r -> Rectangle (rx + fi l) ny (rw - fi l - fi r) h BottomSize a i ch -> Rectangle (ax a i) (ny' ch) (nw i) (mh ch) Static cx cy cw ch -> Rectangle (fi cx) (fi cy) (fi cw) (fi ch) - OnScreen _ p'' -> setPosition p'' [scr] ht + OnScreen _ p'' -> setPosition c p'' [scr] ht where (scr@(Rectangle rx ry rw rh), p') = - case p of OnScreen i x -> (fromMaybe (broadest rs) $ safeIndex i rs, x) - _ -> (broadest rs, p) + case p of OnScreen i x -> (fromMaybe (picker rs) $ safeIndex i rs, x) + _ -> (picker rs, p) ny = ry + fi (rh - ht) center i = rx + fi (div (remwid i) 2) right i = rx + fi (remwid i) @@ -89,7 +89,9 @@ setPosition p rs ht = mh h' = max (fi h') h ny' h' = ry + fi (rh - mh h') safeIndex i = lookup i . zip [0..] - broadest = maximumBy (compare `on` rect_width) + picker = if pickBroadest c + then maximumBy (compare `on` rect_width) + else head setProperties :: Config -> Display -> Window -> IO () setProperties c d w = do diff --git a/src/Xmobar.hs b/src/Xmobar.hs index ce32a0a..c126b7c 100644 --- a/src/Xmobar.hs +++ b/src/Xmobar.hs @@ -237,7 +237,8 @@ startCommand sig (com,s,ss) return (Just h,var) where is = s ++ "Updating..." ++ ss -updateString :: Config -> TVar [String] -> IO [[(Widget, String, Maybe [Action])]] +updateString :: Config -> TVar [String] -> + IO [[(Widget, String, Maybe [Action])]] updateString conf v = do s <- atomically $ readTVar v let l:c:r:_ = s ++ repeat "" diff --git a/xmobar.cabal b/xmobar.cabal index 9ae14a2..ba5c0ee 100644 --- a/xmobar.cabal +++ b/xmobar.cabal @@ -1,5 +1,5 @@ name: xmobar -version: 0.20 +version: 0.20.1 homepage: http://projects.haskell.org/xmobar/ bug-reports: http://code.google.com/p/xmobar/issues synopsis: A Minimalistic Text Based Status Bar -- cgit v1.2.3