From c7c26b047919b8f365b7fa79a958812ca2f77a01 Mon Sep 17 00:00:00 2001 From: Tomas Janousek Date: Sun, 15 Nov 2020 16:38:12 +0000 Subject: Fix crash on x 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 "x" | 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 --- src/Xmobar/X11/Draw.hs | 5 +++-- src/Xmobar/X11/Types.hs | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'src/Xmobar/X11') 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 } -- cgit v1.2.3