# [xmonad] The future of PerWorkspace

Brent Yorgey byorgey at gmail.com
Fri Feb 1 07:46:31 EST 2008

On Thu, Jan 31, 2008 at 2:42 PM, Spencer Janssen <sjanssen at cse.unl.edu>
wrote:

> On Wed, Jan 30, 2008 at 07:29:58PM -0500, Brent Yorgey wrote:
> >   1. PerWorkspace is an inelegant hack with several icky problems:
>
> Agreed.  It is approaching the limits of xmonad's layout design.  However,
> I
> think we can accomplish PerWorkspace behavior without changing too much.
>
> \begin{code}
> data PerWS = PerWS { selected :: Maybe Layout
>                   , choices  :: Map WorkspaceId Layout
>                   , default  :: Layout }
> \end{code}
>
> 'selected' is Nothing until we either figure out which workspace the
> layout is
> on, or we're forced to render before we figure it out.  'choices' maps
> workspaceids to desired layouts.  'default' is used when the WorkspaceId
> isn't
> in our 'choices' map, or we're forced to render before we know which
> workspace

we're on.
>

This is similar to what I had before, except I very much like the idea of
storing a "Maybe Layout" instead of just a "Maybe Bool".  Much less of a

> Now, the million dollar question: how do we figure out which workspace a
> layout
> is on?
>
> \begin{code}
> data YouAreHere = YAH WorkspaceId deriving Typeable
> instance Message YouAreHere
> \end{code}
>

Ah, excellent!  I hadn't thought of the idea of a special message.

>
> Now we just need to arrange for this message to be sent.  I see two
> options:
>
>  - add a 'startupHook :: X ()' that is executed when xmonad starts.  This
> might
>   be useful for other applications too.  A minor issue is that the user
> will
>   have to edit startupHook and layoutHook to use PerWorkspace
> successfully.
>

This option makes more sense to me.  In fact, the other day someone was
asking about the possibility of just such a hook; I played around with it
for a bit but wasn't sure of the best place to add a call to it in the
core.  Would it really be possible to implement a function to correctly send
all the YouAreHere messages, with no other support from the core than just
calling the startupHook?  I'll have to look into it.  If so this seems the
way to go.

>
>  - have the core send YouAreHere messages to each visible workspace during
> each
>   refresh.  This is easier for the user, but it requires adding more to
> the
>   core.
>

This sounds sort of ugly to me.  Again, it's the principle of making a bunch
of very specific changes to the core which have not much purpose other than
to support a single extension.

-Brent
-------------- next part --------------
An HTML attachment was scrubbed...