darcs patch: Generalises modWorkspace to take any layout-transformi...

1 patch for repository http://code.haskell.org/XMonadContrib: Thu May 2 01:14:25 EST 2013 gopsychonauts@gmail.com * Generalises modWorkspace to take any layout-transforming function modWorkspace already was capable of modifying the layout with an arbitrary layout -> layout function, but its original type restricted it such that it could only apply a single LayoutModifier; this was often inconvenient, as for example it was not possible simply to compose LayoutModifiers for use with modWorkspace. This patch also reimplements onWorkspaces in terms of modWorkspaces, since with the latter's less restrictive type this is now possible.

Applied, thanks! On Thu, May 02, 2013 at 01:17:19AM +1000, gopsychonauts@gmail.com wrote:
1 patch for repository http://code.haskell.org/XMonadContrib:
Thu May 2 01:14:25 EST 2013 gopsychonauts@gmail.com * Generalises modWorkspace to take any layout-transforming function
modWorkspace already was capable of modifying the layout with an arbitrary layout -> layout function, but its original type restricted it such that it could only apply a single LayoutModifier; this was often inconvenient, as for example it was not possible simply to compose LayoutModifiers for use with modWorkspace.
This patch also reimplements onWorkspaces in terms of modWorkspaces, since with the latter's less restrictive type this is now possible.
[Generalises modWorkspace to take any layout-transforming function gopsychonauts@gmail.com**20130501151425 Ignore-this: 28c7dc1f6216bb1ebdffef5434ccbcbd
modWorkspace already was capable of modifying the layout with an arbitrary layout -> layout function, but its original type restricted it such that it could only apply a single LayoutModifier; this was often inconvenient, as for example it was not possible simply to compose LayoutModifiers for use with modWorkspace.
This patch also reimplements onWorkspaces in terms of modWorkspaces, since with the latter's less restrictive type this is now possible. ] { hunk ./XMonad/Layout/PerWorkspace.hs 47 -- Note that @l1@, @l2@, and @l3@ can be arbitrarily complicated -- layouts, e.g. @(Full ||| smartBorders $ tabbed shrinkText -- defaultTConf ||| ...)@, and @m1@ can be any layout modifier, i.e. a --- function of type @(l a -> ModifiedLayout lm l a)@. +-- function of type @(l a -> ModifiedLayout lm l a)@. (In fact, @m1@ can be any +-- function @(LayoutClass l a, LayoutClass l' a) => l a -> l' a@.) -- -- In another scenario, suppose you wanted to have layouts A, B, and C -- available on all workspaces, except that on workspace foo you want hunk ./XMonad/Layout/PerWorkspace.hs 73 -> (l1 a) -- ^ layout to use on matched workspaces -> (l2 a) -- ^ layout to use everywhere else -> PerWorkspace l1 l2 a -onWorkspaces wsIds l1 l2 = PerWorkspace wsIds False l1 l2 +onWorkspaces wsIds = modWorkspaces wsIds . const
-- | Specify a layout modifier to apply to a particular workspace; layouts -- on all other workspaces will remain unmodified. hunk ./XMonad/Layout/PerWorkspace.hs 77 -modWorkspace :: (LayoutClass l a) - => WorkspaceId -- ^ tag of the workspace to match - -> (l a -> ModifiedLayout lm l a) -- ^ the modifier to apply on the matching workspace - -> l a -- ^ the base layout - -> PerWorkspace (ModifiedLayout lm l) l a +modWorkspace :: (LayoutClass l1 a, LayoutClass l2 a) + => WorkspaceId -- ^ tag of the workspace to match + -> (l2 a -> l1 a) -- ^ the modifier to apply on the matching workspace + -> l2 a -- ^ the base layout + -> PerWorkspace l1 l2 a modWorkspace wsId = modWorkspaces [wsId]
-- | Specify a layout modifier to apply to a particular set of hunk ./XMonad/Layout/PerWorkspace.hs 87 -- workspaces; layouts on all other workspaces will remain -- unmodified. -modWorkspaces :: (LayoutClass l a) - => [WorkspaceId] -- ^ tags of the workspaces to match - -> (l a -> ModifiedLayout lm l a) -- ^ the modifier to apply on the matching workspaces - -> l a -- ^ the base layout - -> PerWorkspace (ModifiedLayout lm l) l a +modWorkspaces :: (LayoutClass l1 a, LayoutClass l2 a) + => [WorkspaceId] -- ^ tags of the workspaces to match + -> (l2 a -> l1 a) -- ^ the modifier to apply on the matching workspaces + -> l2 a -- ^ the base layout + -> PerWorkspace l1 l2 a modWorkspaces wsIds f l = PerWorkspace wsIds False (f l) l
-- | Structure for representing a workspace-specific layout along with }
_______________________________________________ xmonad mailing list xmonad@haskell.org http://www.haskell.org/mailman/listinfo/xmonad
participants (2)
-
Brent Yorgey
-
gopsychonauts@gmail.com