Xmonad/Notable changes since 0.9
This page is for keeping a record of significant changes in darcs xmonad and xmonad-contrib since the 0.9 release. See 'darcs changes' for more details about miscellaneous feature enhancements, and documentation and bug fixes not noted here.
The idea is to put here a list of things which a user upgrading from 0.9 to the current darcs version might like to know, so that they are sure to be included in the 1.0 release notes.
Simplified interface for X.A.SpawnOn and X.H.DynamicHooks
Since contrib modules can now store custom state in XState, the additional IORef parameters are no longer required: Users have to remove the first paramter to the respective functions. The functions
initDynamicHooks are also no longer necessary and have been removed.
-- Old code: sp <- mkSpawner .. [((mod1Mask,xK_k), shellPromptHere sp defaultXPConfig ..]
The above has to be changed to:
-- no mkSpawner line .. [((mod1Mask,xK_k), shellPromptHere defaultXPConfig) ..]
The same applies to XMonad.Hooks.DynamicHooks.
The type of
onScreen has been changed to allow more general onScreen functions. The old
onScreen was very limited. Basicly the only working function derived from onScreen was
viewOnScreen, since the
greedyViewOnScreen never worked as supposed to, and any other function wouldn't work either.
onScreen takes any function that modifies the stack and runs it on the given screen. Since XMonad can not guess what you'd like to do with the focus after running this function,
onScreen also accepts a
Focus data which tells XMonad how to act.
---- Old version ---- -- Old type of onScreen: onScreen :: (WorkspaceId -> WindowSet -> WindowSet) -- ^ default action -> ScreenId -- ^ screen id -> WorkspaceId -- ^ index of the workspace -> WindowSet -- ^ current stack -> WindowSet -- The old implementation of viewOnScreen was: viewOnScreen :: ScreenId -> WorkspaceId -> WindowSet -> WindowSet viewOnScreen sc i = onScreen view sc i ---- New version ---- -- The new Focus data: data Focus = FocusNew -- ^ always focus the new screen | FocusCurrent -- ^ always keep the focus on the current screen | FocusTag WorkspaceId -- ^ always focus tag i on the new stack | FocusTagVisible WorkspaceId -- ^ focus tag i only if workspace with tag i is visible on the old stack -- New type of onScreen: onScreen :: (WindowSet -> WindowSet) -- ^ function to run -> Focus -- ^ what to do with the focus -> ScreenId -- ^ screen id -> WindowSet -- ^ current stack -> WindowSet -- A few example implementations (don't worry - they're already built in): viewOnScreen :: ScreenId -> WorkspaceId -> WindowSet -> WindowSet viewOnScreen sc i = onScreen (view i) (FocusTag i) sc greedyViewOnScreen :: ScreenId -> WorkspaceId -> WindowSet -> WindowSet greedyViewOnScreen sc i = onScreen (greedyView i) FocusCurrent sc
The more common "end user" functions like
greedyViewOnScreen didn't change in their interface though.