[xmonad] Throwing exceptions from a xmonad-contrib module
Daniel Mlot
duplode_1 at yahoo.com.br
Sun Oct 9 23:53:26 CEST 2011
Hi all,
A beginner XMonad hacker question: on reading the sources for the
CycleSelectedLayouts extension I found one thing to be slightly weird.
Check the following snippet:
cycleToNext :: (Eq a) => [a] -> a -> Maybe a
cycleToNext lst a = do
-- not beautiful but simple and readable
ind <- findIndex (a==) lst
return $ lst !! if ind == length lst - 1 then 0 else ind+1
-- | If the current layout is in the list, cycle to the next layout.
Otherwise,
-- apply the first layout from list.
cycleThroughLayouts :: [String] -> X ()
cycleThroughLayouts lst = do
winset <- gets windowset
let ld = description . S.layout . S.workspace . S.current $ winset
let newld = fromMaybe (head lst) (cycleToNext lst ld)
sendMessage $ JumpToLayout newld
If you apply cycleThroughLayouts on an empty list, it will try to take
the list's head. That doesn't crash xmonad, though, because the
exception is swallowed by sendMessage. Would throwing an exception
"needlessly" like that just because it will be caught later on count as
a bug or is it something not worth bothering about?
Daniel
More information about the xmonad
mailing list