[xmonad] Sticky Windows with CopyWindows & DynamicWorkspaceGroups on Xinerama multihead setup

Daniel Wagner daniel at wagner-home.com
Fri Jul 3 20:38:41 UTC 2015


Hi Alexis --

First off, sorry for not CC'ing the mailing list. Dunno how that happened;
they're back in the loop.

I haven't played with workspace groups very much, so I'm going to take a
guess about how they work. Let me know if I'm wrong. My guess is this: you
have a collection of workspace groups, which is just a list of workspaces.
When you switch to a group, this changes which workspace is visible on all
the screens in some deterministic way -- e.g. switching to group ["foo",
"bar", "baz"], the left screen is always showing workspace "foo", middle
screen "bar", right screen "baz". (I don't care if this is the actual
mapping -- so long as the mapping is always the same.)

Then, you have a window on one of the screens, and you always want it to be
visible on that screen, even when you change workspace groups.

I have two more assumption, which is that you are only ever changing
workspaces by changing workspace groups; and that any given workspace only
appears in one group.

If all these assumptions are correct, then one solution to your problem
would be simply to copy the window of interest to the appropriate
workspaces (rather than using `copyToAll`). You can use `copy` to copy to a
single other workspace, and `foldr` to copy to a collection of workspaces:

    XMonad.Actions.CopyWindow XMonad.StackSet> :t foldr copy
    foldr copy
      :: (Eq i, Eq a, Eq s, Foldable t) =>
         StackSet i l a s sd -> t i -> StackSet i l a s sd

All that remains for you is to find out which are the right workspaces to
copy to. That involves checking which workspace is currently focused, and
which other workspaces are in the same "position" in your groups. We can
help you craft this code, though we'll need to see your existing config to
give good advice.

You may also be interested in combining WorkspaceGroups with
IndependentScreens (
http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Layout-IndependentScreens.html),
which would give you a systematic way to name your workspaces and ease the
computation of which other workspaces are in the same "position" in your
groups.

Good luck,
~d

On Mon, Jun 22, 2015 at 2:00 PM, Alexis de BRUYN <
alexis.mailinglist at de-bruyn.fr> wrote:

> Hi Daniel,
>
> Thanks for your answer.
>
> I have 3 monitors in Xinerama mode with 3 workspace groups. I am using
> viewWSGroup [1] to navigate through my workspace groups. Sometimes I want
> to set a window to be visible to all my workspace groups (so when I do a
> viewWSGroup, I always want to see this particular window).
>
> Long times ago, I used Gnome in a similar multihead setup, I was able to
> right clic on a window and mark it as visible on all workspaces (the 3
> monitors were seen as one workspace, which is not with Xmonad, but I am
> trying to reproduce this behaviour with DynamicWorkspaceGroups). So when I
> changed the workspace, I was able to see my window.
>
> I hope, I am clear.
>
> Thanks for your time,
>
> [1]
> http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Actions-DynamicWorkspaceGroups.html#v:viewWSGroup
>
> On 06/21/15 23:42, Daniel Wagner wrote:
>
>> X's architecture makes it impossible to show a window on the screen in
>> two different locations (e.g. on two different screens) without
>> compositing. xmonad doesn't know anything about compositing. The
>> behavior you are seeing is xmonad doing its best to reconcile your
>> request (show this window on all workspaces, and show several workspaces
>> at once) with what it knows how to do (pick a subset of the windows it
>> knows about and put at most one place).
>>
>> What exactly do you want sticky windows to do? I could imagine many
>> behaviors one could want that mesh with the "only appears once"
>> restriction, with varying levels of code required on your part.
>>
>> If you really want it to appear on both screens, you're out of luck with
>> xmonad.
>> ~d
>>
>> On Thu, Jun 11, 2015 at 2:17 AM, Alexis de BRUYN
>> <alexis.mailinglist at de-bruyn.fr <mailto:alexis.mailinglist at de-bruyn.fr>>
>> wrote:
>>
>>     Hi List,
>>
>>     I am trying to get Sticky windows on my xinerama setup.
>>
>>     After switching into another WorkspaceGroup, the new window which I
>>     previously copyToAll, appears in the new WorkspaceGroup but it is
>>     'attached' to my mouse pointer. I need to killAllOtherCopies.
>>
>>     That fact that this window follows the mouse across the
>>     screens/monitors is annoying especially if I have more than one
>>     sticky window.
>>
>>     How can I get rid of this? Is there another way to achieve this?
>>
>>     Thank for help,
>>
>>     --
>>     Alexis de BRUYN
>>     _______________________________________________
>>     xmonad mailing list
>>     xmonad at haskell.org <mailto:xmonad at haskell.org>
>>     http://mail.haskell.org/cgi-bin/mailman/listinfo/xmonad
>>
>>
>>
> --
> Alexis de BRUYN
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/xmonad/attachments/20150703/9a7e08fe/attachment.html>


More information about the xmonad mailing list