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

Status: New Owner: ---- New issue 494 by allber...@gmail.com: need a way to run a layout in pure mode for inactive workspaces, with an approximation of window rectangles etc. http://code.google.com/p/xmonad/issues/detail?id=494 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 layout1 [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 yet [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
participants (1)
-
codesite-noreply@google.com