diff options
author | Tomas Janousek <tomi@nomi.cz> | 2020-11-15 16:38:12 +0000 |
---|---|---|
committer | Tomas Janousek <tomi@nomi.cz> | 2020-11-15 16:45:12 +0000 |
commit | c7c26b047919b8f365b7fa79a958812ca2f77a01 (patch) | |
tree | 0a0b382d78a3341ac1303ed91e890d7ae065b753 /src/Xmobar | |
parent | 8ea89a00a951b303f8b661c3b22a666c6887cfcb (diff) | |
download | xmobar-c7c26b047919b8f365b7fa79a958812ca2f77a01.tar.gz xmobar-c7c26b047919b8f365b7fa79a958812ca2f77a01.tar.bz2 |
Fix crash on <fn=1>x</fn> when no additional fonts are specified
This fixes the following crash that happens with the default xmobar
configuration (using HOME=/ makes xmobar ignore ~/.xmobarrc):
$ echo "<fn=1>x</fn>" | HOME=/ xmobar
xmobar: Prelude.!!: index too large
Commit 3e9e1cb9d300 ("Fix crashes/busy looping happening via index")
meant to fix this but apparently it only fixed indexing of fontlist, not
voffs, so the crash was still there.
Fixes: https://github.com/jaor/xmobar/issues/504
Diffstat (limited to 'src/Xmobar')
-rw-r--r-- | src/Xmobar/App/Main.hs | 2 | ||||
-rw-r--r-- | src/Xmobar/X11/Draw.hs | 5 | ||||
-rw-r--r-- | src/Xmobar/X11/Types.hs | 2 |
3 files changed, 5 insertions, 4 deletions
diff --git a/src/Xmobar/App/Main.hs b/src/Xmobar/App/Main.hs index 03a01a1..b2bdc5c 100644 --- a/src/Xmobar/App/Main.hs +++ b/src/Xmobar/App/Main.hs @@ -63,7 +63,7 @@ xmobar conf = withDeferSignals $ do let ic = Map.empty to = textOffset conf ts = textOffsets conf ++ replicate (length fl) (-1) - startLoop (XConf d r w (fs :| fl) (to:ts) ic conf) sig refLock vars + startLoop (XConf d r w (fs :| fl) (to :| ts) ic conf) sig refLock vars configFromArgs :: Config -> IO Config configFromArgs cfg = getArgs >>= getOpts >>= doOpts cfg . fst diff --git a/src/Xmobar/X11/Draw.hs b/src/Xmobar/X11/Draw.hs index 1ded312..6c00ee6 100644 --- a/src/Xmobar/X11/Draw.hs +++ b/src/Xmobar/X11/Draw.hs @@ -131,7 +131,7 @@ printString dpy drw fs@(Xft fonts) _ fc bc x y ay ht s al = #endif -- | An easy way to print the stuff we need to print -printStrings :: Drawable -> GC -> NE.NonEmpty XFont -> [Int] -> Position +printStrings :: Drawable -> GC -> NE.NonEmpty XFont -> NE.NonEmpty Int -> Position -> Align -> [((Position, Position), Box)] -> [(Widget, TextRenderInfo, Int, Position)] -> X () printStrings _ _ _ _ _ _ _ [] = return () printStrings dr gc fontlist voffs offs a boxes sl@((s,c,i,l):xs) = do @@ -142,6 +142,7 @@ printStrings dr gc fontlist voffs offs a boxes sl@((s,c,i,l):xs) = do totSLen = foldr (\(_,_,_,len) -> (+) len) 0 sl remWidth = fi wid - fi totSLen fontst = safeIndex fontlist i + voff = safeIndex voffs i offset = case a of C -> (remWidth + offs) `div` 2 R -> remWidth @@ -149,7 +150,7 @@ printStrings dr gc fontlist voffs offs a boxes sl@((s,c,i,l):xs) = do (fc,bc) = case break (==',') (tColorsString c) of (f,',':b) -> (f, b ) (f, _) -> (f, bgColor conf) - valign <- verticalOffset ht s fontst (voffs !! i) conf + valign <- verticalOffset ht s fontst voff conf let (ht',ay) = case (tBgTopOffset c, tBgBottomOffset c) of (-1,_) -> (0, -1) (_,-1) -> (0, -1) diff --git a/src/Xmobar/X11/Types.hs b/src/Xmobar/X11/Types.hs index b22f807..a403e11 100644 --- a/src/Xmobar/X11/Types.hs +++ b/src/Xmobar/X11/Types.hs @@ -35,7 +35,7 @@ data XConf = , rect :: Rectangle , window :: Window , fontListS :: NE.NonEmpty XFont - , verticalOffsets :: [Int] + , verticalOffsets :: NE.NonEmpty Int , iconS :: Map FilePath Bitmap , config :: Config } |