[xmonad] Issue 543 in xmonad: StackSet: non-positive argument to StackSet.new with mroe monitors than workspaces

codesite-noreply at google.com codesite-noreply at google.com
Sun Apr 28 10:07:33 CEST 2013

Comment #1 on issue 543 by byor... at gmail.com: StackSet: non-positive  
argument to StackSet.new with mroe monitors than workspaces

Here's the relevant code from XMonad.StackSet:

-- | /O(n)/. Create a new stackset, of empty stacks, with given tags,
-- with physical screens whose descriptions are given by 'm'. The
-- number of physical screens (@length 'm'@) should be less than or
-- equal to the number of workspace tags.  The first workspace in the
-- list will be current.
-- Xinerama: Virtual workspaces are assigned to physical screens, starting  
at 0.
new :: (Integral s) => l -> [i] -> [sd] -> StackSet i l a s sd
new l wids m | not (null wids) && length m <= length wids && not (null m)
   = StackSet cur visi unseen M.empty
   where (seen,unseen) = L.splitAt (length m) $ map (\i -> Workspace i l  
Nothing) wids
         (cur:visi)    = [ Screen i s sd |  (i, s, sd) <- zip3 seen [0..] m ]
                 -- now zip up visibles with their screen id
new _ _ _ = abort "non-positive argument to StackSet.new"

As you can see the comment even explicitly states the precondition that  
there must be more workspaces than screens.  Unfortunately a fix for this  
is not trivial because of the way we keep track of screens in the StackSet,  
where each screen is actually a wrapper around a visible workspace.  So if  
we don't have enough workspaces we are literally unable to construct the  
required Screen objects.

Perhaps changing the definition of Screen to include a  Maybe Workspace   
would work, though I am not sure what other changes that would require.

You received this message because this project is configured to send all  
issue notifications to this address.
You may adjust your notification preferences at:

More information about the xmonad mailing list