[xmonad] Strange workspace switching bug in my config

Norbert Zeh nzeh at cs.dal.ca
Fri May 18 14:53:38 CEST 2012


Leo Alekseyev [2012.05.18 0228 -0400]:
> On Tue, May 15, 2012 at 5:32 PM, Leo Alekseyev <dnquark at gmail.com> wrote:
> > On Tue, May 15, 2012 at 4:22 PM,  <wagnerdm at seas.upenn.edu> wrote:
> >> Quoting Norbert Zeh <nzeh at cs.dal.ca>:
> >>
> >>> for any starting workspace except "0" or
> >>> "0SCR", say its number is x, the above code goes to workspace x-1 or x+9.
> >>> ...
> >>>
> >>> What is it I don't understand here?
> >>
> >>
> >> The workspace at index 0 in the list of workspaces is "1:blah", at index 1
> >> is "2:blah", etc.
> 
> Well, if anyone is curious, I've isolated the breakage to the floating
> scratchpad workspace.  It appears that after the first time the
> scratchpad is spawned, its workspace (with the tag NSP) is inserted at
> index 0 in the workspace array.  I'm assuming that it used to not be
> the case with older Xmonad versions...

Ah, that explains it.  Here's a piece of code that makes the whole process
independent of the actual ordering of the workspaces (something that my previous
broken suggestion also tried to do).

jumpToMain = do
  num <- gets (head . W.tag . W.workspace . W.current . windowset)
  ws  <- asks (workspaces . config)
  let m = find (\w -> head w == num && w /= (num : "SCR")) ws
  windows (W.greedyView $ fromJust m)

jumpToScratch = do
  num <- gets (head . W.tag . W.workspace . W.current . windowset)
  windows (W.greedyView $ num : "SCR")

This should work whenever you have pairs of workspaces of the form "<x>SCR" and
"<x><something else>" and these are the only workspaces that start with <x>.  It
will do nothing for workspaces that are not paired with a corresponding
"<x>SCR".  If you modify your config so you have an "<x>SCR" and no other
workspace that starts with <x>, then the last line of jumpToMain will throw an
error.  In that situation, you should change this line to "maybe (return ())
(windows . W.greedyView) m".  jumpToMain then quietly does nothing if it cannot
find a workspace starting with <x> other than "<x>SCR".

I hope I didn't once again overlook something, as I didn't have the time to
actually set up my environment to test this.  At least it compiled once I added
it to my xmonad.hs.

Cheers,
Norbert




More information about the xmonad mailing list