
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. 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} 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. - 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. Oh, and once we've done this, description will not need to be in the X monad. Andrea, did you have any other use cases in mind? Cheers, Spencer Janssen