[Xmonad] darcs patch: simplify StackSet.delete

Donald Bruce Stewart dons at cse.unsw.edu.au
Mon Jun 25 00:43:03 EDT 2007


droundy:
> Sun Jun 24 07:48:54 PDT 2007  David Roundy <droundy at darcs.net>
>   * simplify StackSet.delete
> 

Content-Description: A darcs patch for your repository!
> 
> New patches:
> 
> [simplify StackSet.delete
> David Roundy <droundy at darcs.net>**20070624144854] 
> <
> > {
> hunk ./StackSet.hs 431
>  --   * otherwise, delete doesn't affect the master.
>  --
>  delete :: (Integral i, Ord a, Eq s) => a -> StackSet i a s -> StackSet i a s
> -delete w s | Just w == peek s = remove s -- common case. 
> +delete w s | Just w == peek s = modify Nothing (filter (/= w)) s -- common case.
>             | otherwise = maybe s (removeWindow.tag.workspace.current $ s) (findIndex w s)
>    where
>      -- find and remove window script
> hunk ./StackSet.hs 435
> -    removeWindow o n = foldr ($) s [view o,remove,view n]
> -
> -    -- actual removal logic, and focus/master logic:
> -    remove = modify Nothing $ \c ->
> -      if focus c == w
> -      then case c of
> -        Stack _ ls     (r:rs) -> Just $ Stack r ls rs    -- try down first
> -        Stack _ (l:ls) []     -> Just $ Stack l ls []    -- else up
> -        Stack _ []     []     -> Nothing
> -      else Just $ c { up = w `L.delete` up c, down = w `L.delete` down c }
> +    removeWindow o n = foldr ($) s [view o,modify Nothing (filter (/= w)),view n]

How does this ensure the old semantics for where focus goes, is preserved?
Does it rely on filter implementing the same focus semantics as 'remove' did?

-- Don


More information about the Xmonad mailing list