[xmonad] Issue 494 in xmonad: need a way to run a layout in pure mode for inactive workspaces, with an approximation of window rectangles etc.

codesite-noreply at google.com codesite-noreply at google.com
Sat Feb 18 04:57:04 CET 2012

Status: New
Owner: ----

New issue 494 by allber... at gmail.com: need a way to run a layout in pure  
mode for inactive workspaces, with an approximation of window rectangles  

This is not quite the usual kind of bug report; there are two user-reported  
issues in the IRC log I'm pasting in, which could probably be made into  
separate proper bug reports, but this is more a placeholder for something  
we should consider doing in the future.  It's something of a complex issue,  
which is why I'm just recording the IRC log.

(This also came up in another variation a couple nights ago, in the form  
of "how can I do PrevLayout?":  some of the possible answers turn out to  
hinge on the same issue of wanting to run the layout "quietly" i.e.  
purely.  It also relates to another longstanding issue where we can't  
provide window information for inactive workspaces to EWMH pagers.)

[18 02:29] <vodik> okay, warning: vague question since im exploring an  
issue im having
[18 02:29] <vodik> im trying to make broadcastMessages broadcast to each  
active layout on startup
[18 02:30] <vodik> however it seems that it doesn't send things
[18 02:30] <vodik> so tracing though what broadcastMessage does, it seems  
to, when presented a layouts like this:
[18 02:31] <pzuraq> I'm using XFCE, and have 3 of the workspace switcher  
plugins (one for each of my monitors) but they all point toward the  
currently selected screen
[18 02:31] <vodik> onWorkspace "foo" layout1 $ layout2
[18 02:31] <pzuraq> if I'm focussed to screen 1, all of them say 1
[18 02:31] <vodik> i thinks that the current layout on foo is layout2, not  
[18 02:31] <pzuraq> I want them to focus to the current screen
[18 02:31] <vodik> unless i travel to that tag first
[18 02:32] <geekosaur> pzuraq, workspace switchers will do that, they can't  
be done "cirrectly" because that requires running the layout, and unless  
the layout is 100% pure (and currently there is no way to check this) that  
requires switching to the workspace
[18 02:32] <geekosaur> I have some notes about caching information but  
can't do anything about it for a while
[18 02:33] <vodik> so how does switching tags resolve layouts?
[18 02:33] <vodik> is there any way to force this?
[18 02:33] <geekosaur> vodik, I think that's a variation on that question  
the other night about backing up through the layouts; until the workspace  
is made current, the layout is not yet "run" and has not selected anything  
[18 02:34] <vodik> yeah, i was there, guess its the same problem this
[18 02:34] <vodik> *then
[18 02:34] <geekosaur> (also see my response to pzuraq, it's actually the  
same problem in different guise!)
[18 02:34] <pzuraq> damn
[18 02:34] <pzuraq> so there's no way around it then
[18 02:34] <geekosaur> not resently
[18 02:34] <geekosaur> *presently
[18 02:35] <pzuraq> damn. That sucks =/
[18 02:35] <pzuraq> I guess I'll have to make it :P
[18 02:37] <vodik> geekosaur: well then, at least i have a decent workaround
[18 02:38] <geekosaur> in theory, if every layout provided a pure  
approximation, we could run the layout in pure mode whenever necessary  
(solving both your and vodik's problems in one fell swoop), but some  
layouts leave the pure version stubbed and only implement the impure  
version, and presently xmonad always invokes the impure version (which by  
default invokes the pure one)
[18 02:39] <geekosaur> (aaaand my network fell over twie while I was typing  
that in, sorry)
[18 02:39] <geekosaur> twice
[18 02:39] * mrdk has quit (Ping timeout: 276 seconds)
[18 02:40] <geekosaur> my notes are about caching the result of running the  
layout, which has the shortcoming that there will be no information for a  
workspace until the first time it's visited (i.e. it turns your problem  
into vodik's)
[18 02:40] <vodik> why not just visit every workspace then
[18 02:41] <geekosaur> but it's easier in that it doesn't require that we  
go over all layouts and make sure there's a pure version of the layout  
function that produces a decent approximation
[18 02:41] <geekosaur> vodik, that's going to produce a LOT of "screen  
flicker" on xmonad startup
[18 02:42] <geekosaur> well, mostly on restart with populated workspaces,  
but still.
[18 02:42] <vodik> oh i guess. i was thinking maybe some sort of quick  
visit behind the scene
[18 02:42] <geekosaur> if it could be done behind the scenes, it would  
necessarily be pure
[18 02:42] <vodik> technically couldn't you serialze that cache too?
[18 02:43] <vodik> riiight
[18 02:43] <vodik> so why not just declare all layouts must have pure  
approximations? :)
[18 02:45] <geekosaur> the whole problem is that you need toallow impure  
layouts to manipulate X11, so the workspace has to actually be made current  
and visible :/ [and net fell over again...]
[18 02:45] <geekosaur> that means auditing all existing layouts too.  and  
it's not always clear how to do a pure approximation
[18 02:45] <vodik> i guess the second part is the clincher
[18 02:46] <geekosaur> I can tell you right now anything using Decoration  
will be a right ***** to do a pure simulation of
[18 02:46] <geekosaur> (meaning, everyone's favorite Tabbed layout)
[18 02:48] <geekosaur> anyway, it's something to think about for the  
future, but it will be a rather large undertaking
[18 02:49] <geekosaur> hrm, actually, lemme copy this discussion and file a  
bug, so at least we have a record of it
[18 02:50] <pzuraq> yeah
[18 02:50] <pzuraq> a while ago there
[18 02:50] <pzuraq> Still have a lot to learn
[18 02:51] <vodik> pzuraq: me too, still not sure what goes on under the  
hood :P
[18 02:53] <geekosaur> pzuraq, the tl;dr is "xmonad can only really know  
what's going on on a workspace by actually making it current and letting it  
draw all the windows"
[18 02:54] * nathan28 has quit (Quit: leaving)
[18 02:55] <pzuraq> geekosaur: Hmm, so that means its going to take a lot  
of fiddlin to get that functionality...
[18 02:55] <pzuraq> fun fun :D
[18 02:55] <pzuraq> just, not right now I guess
[18 02:56] <pzuraq> I need to get other things done first
[18 02:56] <geekosaur> so anything that needs to know the state of a  
non-current workspace (where windows are in your case, what the actual  
initial layout is in vodik's --- keep in mind a layout is a *program*, it  
has to be run at least once on a workspace even to determine what the  
actual initial layout on that workspace is) won't quite work right as  
xmonad currently is
[18 02:56] * wyfrn has quit (Read error: Operation timed out)
[18 02:57] <geekosaur> and fixing this will require some work :/
[18 02:57] <geekosaur> (another notwork drop...)
[18 02:57] <pzuraq> is there some way to associate it with the individual  
xinerama screens?
[18 02:58] <pzuraq> x-sessions
[18 02:58] <pzuraq> whatever they are
[18 02:58] <geekosaur> and in theory the workspace name should be "easy" to  
get, but since it goes through the StackSet to find it currently and the  
StackSet is lazily created on first visit to the workspace (mainly because  
it needs to know the layout, which can only be determined by running it,  
meaning we have to actually visit the workspace...)
[18 02:59] <geekosaur> annoying
[18 02:59] <pzuraq> D:
[18 02:59] <pzuraq> Ihate
[18 02:59] <geekosaur> associate what?
[18 02:59] <pzuraq> when things are not well thought out
[18 02:59] <pzuraq> which workspace is on which screen
[18 03:00] <pzuraq> I'm guessing not
[18 03:00] <geekosaur> again, that requires a fully populated stackset,  
which requires visitng the workspace
[18 03:01] <geekosaur> which is why I'm making a bug for this, it's  
something we really should deal with but it'll be a lot of work
[18 03:01] <geekosaur> maybe someone can come up with a good way to fake  
the simple stuff in the meantime

More information about the xmonad mailing list