[Xmonad] darcs patch: simplify StackSet.delete

Donald Bruce Stewart dons at cse.unsw.edu.au
Mon Jun 25 23:47:06 EDT 2007


droundy:
> On Mon, Jun 25, 2007 at 02:43:03PM +1000, Donald Bruce Stewart wrote:
> > 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 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?
> 
> Yes, that's what it relies on, which filter currently does.  It seems
> better to enforce this in filter, so there'd be just one piece of code
> defining the desired semantics.

I like this idea, but this does actually change the focus semantics for
the 'else up' case. Try deleting the last window in a stack. Focus will
move to master, not 'up'. I will add a QC test to check the desired
semantics, so changes like this would be caught.

-- Don


More information about the Xmonad mailing list