
25 Jun
2007
25 Jun
'07
11:47 p.m.
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> > > * simplify StackSet.delete > > > > > > > Content-Description: A darcs patch for your repository! > > > > > > New patches: > > > > > > [simplify StackSet.delete > > > David Roundy **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