This patch adds the capability to hook on X event processing in the
configuration, but, unlike the EventHook module from contrib(Which
implements this via a layout modifier and thus doesn't get notified
about events already handled by xmonad), works for all events that
xmonad receives. The custom handler function can choose on whether or
not to call the default handler for the message afterwards.
Since already handled messages are not broadcasted to the layout or
anywhere else this functionality cannot be implemented as a contrib
module and hence requires core changes.
Such a feature would be useful for things that need more fine grained
control over the default event handling. One usage case would be to
react on changing window properties like the title, e.g. to manage
windows that set their title after creation.
Sat Jan 10 23:18:52 CET 2009 Daniel Schoepe
* More flexible userCode function
Sun Jan 11 19:52:53 CET 2009 Daniel Schoepe
* Support for custom X Event handler
New patches:
[More flexible userCode function
Daniel Schoepe **20090110221852] {
hunk ./XMonad/Core.hs 27
XConf(..), XConfig(..), LayoutClass(..),
Layout(..), readsLayout, Typeable, Message,
SomeMessage(..), fromMessage, LayoutMessages(..),
- runX, catchX, userCode, io, catchIO, doubleFork,
+ runX, catchX, userCode, userCodeDef, io, catchIO, doubleFork,
withDisplay, withWindowSet, isRoot, runOnWorkspaces,
getAtom, spawn, getXMonadDir, recompile, trace, whenJust, whenX,
atom_WM_STATE, atom_WM_PROTOCOLS, atom_WM_DELETE_WINDOW, ManageHook, Query(..), runQuery
hunk ./XMonad/Core.hs 50
import Graphics.X11.Xlib.Extras (Event)
import Data.Typeable
import Data.Monoid
+import Data.Maybe (fromMaybe)
import qualified Data.Map as M
import qualified Data.Set as S
hunk ./XMonad/Core.hs 167
-- | Execute the argument, catching all exceptions. Either this function or
-- 'catchX' should be used at all callsites of user customized code.
-userCode :: X () -> X ()
-userCode a = catchX (a >> return ()) (return ())
+userCode :: X a -> X (Maybe a)
+userCode a = catchX (Just `liftM` a) (return Nothing)
+
+-- | Same as userCode but with a default argument to return instead of using
+-- Maybe, provided for convenience.
+userCodeDef :: a -> X a -> X a
+userCodeDef def a = fromMaybe def `liftM` userCode a
-- ---------------------------------------------------------------------
-- Convenient wrappers to state
hunk ./XMonad/Main.hsc 179
s <- io $ keycodeToKeysym dpy code 0
mClean <- cleanMask m
ks <- asks keyActions
- userCode $ whenJust (M.lookup (mClean, s) ks) id
+ userCodeDef () $ whenJust (M.lookup (mClean, s) ks) id
-- manage a new window
handle (MapRequestEvent {ev_window = w}) = withDisplay $ \dpy -> do
hunk ./XMonad/Main.hsc 282
-- property notify
handle PropertyEvent { ev_event_type = t, ev_atom = a }
- | t == propertyNotify && a == wM_NAME = userCode =<< asks (logHook . config)
+ | t == propertyNotify && a == wM_NAME = userCodeDef () =<< asks (logHook . config)
handle e = broadcastMessage e -- trace (eventName e) -- ignoring
hunk ./XMonad/Operations.hs 26
import qualified XMonad.StackSet as W
import Data.Maybe
-import Data.Monoid (appEndo)
+import Data.Monoid (Endo(..))
import Data.List (nub, (\\), find)
import Data.Bits ((.|.), (.&.), complement)
import Data.Ratio
hunk ./XMonad/Operations.hs 71
where i = W.tag $ W.workspace $ W.current ws
mh <- asks (manageHook . config)
- g <- fmap appEndo (runQuery mh w) `catchX` return id
+ g <- fmap appEndo $ userCodeDef (Endo id) (runQuery mh w)
windows (g . f)
-- | unmanage. A window no longer exists, remove it from the window
hunk ./XMonad/Operations.hs 172
isMouseFocused <- asks mouseFocused
unless isMouseFocused $ clearEvents enterWindowMask
- asks (logHook . config) >>= userCode
+ asks (logHook . config) >>= userCodeDef ()
-- | Produce the actual rectangle from a screen and a ratio on that screen.
scaleRationalRect :: Rectangle -> W.RationalRect -> Rectangle
}
[Support for custom X Event handler
Daniel Schoepe **20090111185253] {
hunk ./XMonad/Config.hs 29
--
import XMonad.Core as XMonad hiding
(workspaces,manageHook,numlockMask,keys,logHook,startupHook,borderWidth,mouseBindings
- ,layoutHook,modMask,terminal,normalBorderColor,focusedBorderColor,focusFollowsMouse)
+ ,layoutHook,modMask,terminal,normalBorderColor,focusedBorderColor,focusFollowsMouse
+ ,handleEventHook)
import qualified XMonad.Core as XMonad
(workspaces,manageHook,numlockMask,keys,logHook,startupHook,borderWidth,mouseBindings
hunk ./XMonad/Config.hs 33
- ,layoutHook,modMask,terminal,normalBorderColor,focusedBorderColor,focusFollowsMouse)
+ ,layoutHook,modMask,terminal,normalBorderColor,focusedBorderColor,focusFollowsMouse
+ ,handleEventHook)
import XMonad.Layout
import XMonad.Operations
hunk ./XMonad/Config.hs 44
import qualified Data.Map as M
import System.Exit
import Graphics.X11.Xlib
+import Graphics.X11.Xlib.Extras
-- | The default number of workspaces (virtual screens) and their names.
-- By default we use numeric strings, but any string may be used as a
hunk ./XMonad/Config.hs 125
logHook :: X ()
logHook = return ()
+------------------------------------------------------------------------
+-- Event handling
+
+-- | Defines a custom handler function for X Events. The function should
+-- return True if the default handler is to be run afterwards.
+handleEventHook :: Event -> X Bool
+handleEventHook _ = return True
+
-- | Perform an arbitrary action at xmonad startup.
startupHook :: X ()
startupHook = return ()
hunk ./XMonad/Config.hs 264
, XMonad.startupHook = startupHook
, XMonad.mouseBindings = mouseBindings
, XMonad.manageHook = manageHook
+ , XMonad.handleEventHook = handleEventHook
, XMonad.focusFollowsMouse = focusFollowsMouse }
hunk ./XMonad/Core.hs 86
, terminal :: !String -- ^ The preferred terminal application. Default: \"xterm\"
, layoutHook :: !(l Window) -- ^ The available layouts
, manageHook :: !ManageHook -- ^ The action to run when a new window is opened
+ , handleEventHook :: !(Event -> X Bool) -- ^ Handle an X event, returns True if the default handler
+ -- should also be run afterwards
, workspaces :: ![String] -- ^ The list of workspaces' names
, numlockMask :: !KeyMask -- ^ The numlock modifier
, modMask :: !KeyMask -- ^ the mod modifier
hunk ./XMonad/Main.hsc 160
evs = [ keyPress, keyRelease, enterNotify, leaveNotify
, buttonPress, buttonRelease]
+-- | Runs handleEventHook from the configuration and runs defaultHandler if it returned True.
+handle :: Event -> X ()
+handle e = do
+ evHook <- asks (handleEventHook . config)
+ whenX (userCodeDef True $ evHook e) (defaultHandler e)
-- ---------------------------------------------------------------------
-- | Event handler. Map X events onto calls into Operations.hs, which
hunk ./XMonad/Main.hsc 176
-- [Expose] = expose,
-- [PropertyNotify] = propertynotify,
--
-handle :: Event -> X ()
+defaultHandler :: Event -> X ()
-- run window manager command
hunk ./XMonad/Main.hsc 179
-handle (KeyEvent {ev_event_type = t, ev_state = m, ev_keycode = code})
+defaultHandler (KeyEvent {ev_event_type = t, ev_state = m, ev_keycode = code})
| t == keyPress = withDisplay $ \dpy -> do
s <- io $ keycodeToKeysym dpy code 0
mClean <- cleanMask m
hunk ./XMonad/Main.hsc 187
userCodeDef () $ whenJust (M.lookup (mClean, s) ks) id
-- manage a new window
-handle (MapRequestEvent {ev_window = w}) = withDisplay $ \dpy -> do
+defaultHandler (MapRequestEvent {ev_window = w}) = withDisplay $ \dpy -> do
wa <- io $ getWindowAttributes dpy w -- ignore override windows
-- need to ignore mapping requests by managed windows not on the current workspace
managed <- isClient w
hunk ./XMonad/Main.hsc 195
-- window destroyed, unmanage it
-- window gone, unmanage it
-handle (DestroyWindowEvent {ev_window = w}) = whenX (isClient w) $ do
+defaultHandler (DestroyWindowEvent {ev_window = w}) = whenX (isClient w) $ do
unmanage w
modify (\s -> s { mapped = S.delete w (mapped s)
, waitingUnmap = M.delete w (waitingUnmap s)})
hunk ./XMonad/Main.hsc 202
-- We track expected unmap events in waitingUnmap. We ignore this event unless
-- it is synthetic or we are not expecting an unmap notification from a window.
-handle (UnmapEvent {ev_window = w, ev_send_event = synthetic}) = whenX (isClient w) $ do
+defaultHandler (UnmapEvent {ev_window = w, ev_send_event = synthetic}) = whenX (isClient w) $ do
e <- gets (fromMaybe 0 . M.lookup w . waitingUnmap)
if (synthetic || e == 0)
then unmanage w
hunk ./XMonad/Main.hsc 211
mpred n = Just $ pred n
-- set keyboard mapping
-handle e@(MappingNotifyEvent {}) = do
+defaultHandler e@(MappingNotifyEvent {}) = do
io $ refreshKeyboardMapping e
when (ev_request e == mappingKeyboard) grabKeys
hunk ./XMonad/Main.hsc 216
-- handle button release, which may finish dragging.
-handle e@(ButtonEvent {ev_event_type = t})
+defaultHandler e@(ButtonEvent {ev_event_type = t})
| t == buttonRelease = do
drag <- gets dragging
case drag of
hunk ./XMonad/Main.hsc 225
Nothing -> broadcastMessage e
-- handle motionNotify event, which may mean we are dragging.
-handle e@(MotionEvent {ev_event_type = _t, ev_x = x, ev_y = y}) = do
+defaultHandler e@(MotionEvent {ev_event_type = _t, ev_x = x, ev_y = y}) = do
drag <- gets dragging
case drag of
Just (d,_) -> d (fromIntegral x) (fromIntegral y) -- we're dragging
hunk ./XMonad/Main.hsc 232
Nothing -> broadcastMessage e
-- click on an unfocused window, makes it focused on this workspace
-handle e@(ButtonEvent {ev_window = w,ev_event_type = t,ev_button = b })
+defaultHandler e@(ButtonEvent {ev_window = w,ev_event_type = t,ev_button = b })
| t == buttonPress = do
-- If it's the root window, then it's something we
-- grabbed in grabButtons. Otherwise, it's click-to-focus.
hunk ./XMonad/Main.hsc 246
-- entered a normal window: focus it if focusFollowsMouse is set to
-- True in the user's config.
-handle e@(CrossingEvent {ev_window = w, ev_event_type = t})
+defaultHandler e@(CrossingEvent {ev_window = w, ev_event_type = t})
| t == enterNotify && ev_mode e == notifyNormal
= whenX (asks $ focusFollowsMouse . config) (focus w)
hunk ./XMonad/Main.hsc 251
-- left a window, check if we need to focus root
-handle e@(CrossingEvent {ev_event_type = t})
+defaultHandler e@(CrossingEvent {ev_event_type = t})
| t == leaveNotify
= do rootw <- asks theRoot
when (ev_window e == rootw && not (ev_same_screen e)) $ setFocusX rootw
hunk ./XMonad/Main.hsc 257
-- configure a window
-handle e@(ConfigureRequestEvent {ev_window = w}) = withDisplay $ \dpy -> do
+defaultHandler e@(ConfigureRequestEvent {ev_window = w}) = withDisplay $ \dpy -> do
ws <- gets windowset
wa <- io $ getWindowAttributes dpy w
hunk ./XMonad/Main.hsc 283
io $ sync dpy False
-- configuration changes in the root may mean display settings have changed
-handle (ConfigureEvent {ev_window = w}) = whenX (isRoot w) rescreen
+defaultHandler (ConfigureEvent {ev_window = w}) = whenX (isRoot w) rescreen
-- property notify
hunk ./XMonad/Main.hsc 286
-handle PropertyEvent { ev_event_type = t, ev_atom = a }
+defaultHandler PropertyEvent { ev_event_type = t, ev_atom = a }
| t == propertyNotify && a == wM_NAME = userCodeDef () =<< asks (logHook . config)
hunk ./XMonad/Main.hsc 289
-handle e = broadcastMessage e -- trace (eventName e) -- ignoring
+defaultHandler e = broadcastMessage e -- trace (eventName e) -- ignoring
-- ---------------------------------------------------------------------
}
Context:
[Call logHook as the very last action in windows
Spencer Janssen **20081209233700
Ignore-this: 4396ad891b607780f8e4b3b6bbce87e
]
[Accept inferior crossing events. This patch enables fmouse-focus-follows-screen
Spencer Janssen **20081205045130
Ignore-this: 3ac329fb92839827aed0a4370784cabd
]
[Tile all windows at once
Spencer Janssen **20081118074447]
[Factor rational rect scaling into a separate function
Spencer Janssen **20081118072849]
[Change screen focus by clicking on the root window.
Spencer Janssen **20081106224031
This is a modification of a patch from Joachim Breitner.
]
[Fix #192.
Spencer Janssen **20081021220059]
[select base < 4 for building on ghc 6.10
Adam Vogt **20081013214509]
[add killWindow function
Joachim Breitner **20081005001804
This is required to kill anything that is not focused, without
having to focus it first.
]
[add'l documentation
Devin Mullins **20080927234639]
[Regression: ungrab buttons on *non* root windows
Spencer Janssen **20081007214351]
[Partial fix for #40
Spencer Janssen **20081007212053
Improvements:
- clicking on the root will change focus to that screen
- moving the mouse from a window on a screen to an empty screen changes focus
to that screen
The only remaining issue is that moving the mouse between two empty screens
does not change focus. In order to solve this, we'd have to select motion events
on the root window, which is potentially expensive.
]
[Track mouse position via events received
Spencer Janssen **20081007203953]
[Fix haddock
Spencer Janssen **20081007094641]
[Move screen locating code into pointScreen
Spencer Janssen **20081007094207]
[Make pointWithin a top-level binding
Spencer Janssen **20081007090229]
[sp README, CONFIG, STYLE, TODO
gwern0@gmail.com**20080913024457]
[Use the same X11 dependency as xmonad-contrib
Spencer Janssen **20080921061508]
[Export focusUp' and focusDown' -- work entirely on stacks
Spencer Janssen **20080911214803]
[add W.shiftMaster, fix float/tile-reordering bug
Devin Mullins **20080911053909]
[TAG 0.8
Spencer Janssen **20080905195412]
[Spelling. Any bets on how long this has been there?
Spencer Janssen **20080905195211]
[Bump version to 0.8
Spencer Janssen **20080905194225]
[Remove obsolete comments about darcs X11
Spencer Janssen **20080905194915]
[Recommend latest packages rather than specific versions
Spencer Janssen **20080905194837]
[Also remove -optl from the executable section
Spencer Janssen **20080820210023]
[-optl-Wl,-s is not needed with recent Cabal versions
Spencer Janssen **20080820204102]
[Haddock links
Malebria **20080601212515]
[Haddock syntax for enumeration
Malebria **20080601204951]
[I prefer the spencerjanssen@gmail.com address now
Spencer Janssen **20080714202650]
[Raise windows in the floating layer when moving or resizing
Trevor Elliott **20080521215057]
[add currentTag convenience function
Devin Mullins **20080511224258]
[Make Mirror a newtype
Spencer Janssen **20080508104640]
[Comments
Spencer Janssen **20080507013122]
[Break long line
Spencer Janssen **20080507012608]
[Style
Spencer Janssen **20080507012519]
[Simplify
Spencer Janssen **20080507011309]
[Overhaul Choose, fixes issue 183
Spencer Janssen **20080506220809]
[Remember if focus changes were caused by mouse actions or by key commands
Klaus Weidner **20080502175603
If the user used the mouse to change window focus (moving into or clicking on a
window), this should be handled differently than focus changes due to keyboard
commands. Specifically, it's inappropriate to discard window enter/leave events
while the mouse is moving. This fixes the bug where a fast mouse motion across
multiple windows resulted in the wrong window keeping focus.
It's also helpful information for contrib modules such as UpdatePointer - it's
supposed to move the mouse pointer only in response to keyboard actions, not if
the user was moving the mouse.
]
[Wibble
Spencer Janssen **20080506203840]
[Added doShift function for more user-friendly hooks
Ivan N. Veselov **20080506185757]
[use named colours. fixes startup failure on the XO
Don Stewart **20080502210149]
[Set focus *after* revealing windows
Spencer Janssen **20080407222559]
[Reveal windows after moving/resizing them.
Spencer Janssen **20080407220756
This should reduce the number of repaints for newly visible windows.
]
[Hide newly created but non-visible windows (fixes bug #172)
Spencer Janssen **20080430014012]
[formatting, eta expansion
Don Stewart **20080418184337]
[XMonad.ManageHook: add 'appName', another name for 'resource'
Lukas Mai **20080406012006]
[XMonad.ManageHook: make 'title' locale-aware; haddock cleanup
Lukas Mai **20080406011338
The code for 'title' was stolen from getname.patch (bug #44).
]
[XMonad.Main: call setlocale on startup
Lukas Mai **20080406011234]
[floats always use current screen (with less bugs)
robreim@bobturf.org**20080405135009]
[XMonad.Operations: applySizeHint reshuffle
Lukas Mai **20080404215615
Make applySizeHints take window borders into account. Move old functionality
to applySizeHintsContents. Add new mkAdjust function that generates a custom
autohinter for a window.
]
[XMonad.Layout: documentation cleanup
Lukas Mai **20080404215444]
[Remove gaps from the example config
Spencer Janssen **20080329232959]
[Remove gaps
Spencer Janssen **20080325091526]
[TAG 0.7
Spencer Janssen **20080329210249]
[Remove -fhpc from ghc-options (annoying hackage workaround)
Spencer Janssen **20080329205804]
[Remove version numbers from README
Spencer Janssen **20080329204158]
[Bump version to 0.7
Spencer Janssen **20080329191336]
[no need to expose --resume to the user
Don Stewart **20080328214219]
[Rename property to stringProperty
Spencer Janssen **20080325201814]
[ManageHook: add a 'property' Query that can get an arbitrary String property from a window (such as WM_WINDOW_ROLE, for example)
Brent Yorgey **20080325145414]
[Main.hs: startupHook should be guarded by userCode
Brent Yorgey **20080325171241]
[Also print compilation errors to stderr
Spencer Janssen **20080324225857]
[clean up for style
Don Stewart **20080322214116]
[add sendMessageWithNoRefresh and have broadcastMessage use it
Andrea Rossato **20080223130702
This patch:
- moves broadcastMessage and restart from Core to Operations (to avoid
circular imports);
- in Operations introduces sendMessageWithNoRefresh and move
updateLayout outside windows.
- broadcastMessage now uses sendMessageWithNoRefresh to obey to this
rules:
1. if handleMessage returns Nothing no action is taken;
2. if handleMessage returns a Just ml *only* the layout field of the
workspace record will be updated.
]
[--recompile now forces recompilation of xmonad.hs
Spencer Janssen **20080324212453]
[add --help option
Lukas Mai **20080129235258]
[add mod-shift-tab to the default bindings, from Mathias Stearn
Don Stewart **20080323211421]
[more tests
Don Stewart **20080323003436]
[some tests for the size increment handling in Operations.hs
Don Stewart **20080322234952]
[more properties for splitting horizontally and vertically
Don Stewart **20080322201835]
[test message handling of Full layout
Don Stewart **20080322192728]
[formatting
Don Stewart **20080322192635]
[strict fields on layout messages
Don Stewart **20080322192248]
[QuickCheck properties to fully specify the Tall layout, and its messages
Don Stewart **20080322041801]
[clean up Layout.hs, not entirely happy about the impure layouts.
Don Stewart **20080322041718]
[comments
Don Stewart **20080322041654]
[add hpc generation script
Don Stewart **20080322041640]
[add QuickCheck property for Full: it produces one window, it is fullscreen, and it is the current window
Don Stewart **20080322002026]
[QC for pureLayout. confirm pureLayout . Tall produces no overlaps
Don Stewart **20080322001229]
[whitespace
Don Stewart **20080322001208]
[reenable quickcheck properties for layouts (no overlap, fullscreen)
Don Stewart **20080321234015]
[formatting
Don Stewart **20080321230956]
[Revert float location patch. Not Xinerama safe
Don Stewart **20080321214129]
[XMonad.Core: ignore SIGPIPE, let write calls throw
Lukas Mai **20080321171911]
[update documentation
Brent Yorgey **20080311160727]
[Reimplement Mirror with runLayout
Andrea Rossato **20080225083236]
[Reimplement Choose with runLayout
Andrea Rossato **20080222193119]
[runLayout is now a LayoutClass method and takes the Workspace and the screen Rectangle
Andrea Rossato **20080222175815]
[add property for ensureTags behaviour on hidden workspaces
Don Stewart **20080310182557]
[Small linecount fix :)
robreim@bobturf.org**20080308021939]
[Change floats to always use the current screen
robreim@bobturf.org**20080308015829]
[use -fhpc by default when testing. All developers should have 6.8.x
Don Stewart **20080307184223]
[more general properties for view, greedyView
Don Stewart **20080307181657]
[rework failure cases in StackSet.view
Don Stewart **20080307181634]
[bit more code coverage
Don Stewart **20080307180905]
[more tests. slightly better test coverage
Don Stewart **20080227180113]
[test geometry setting
Don Stewart **20080227175554]
[incorrect invariant test for greedyView
Don Stewart **20080225180350]
[Add a startupHook.
Brent Yorgey **20080204192445
The only thing I am not sure about here is at what exact point the
startupHook should get run. I picked a place that seems to make sense:
as late as possible, right before entering the main loop. That way all
the layouts/workspaces/other state are set up and the startupHook can
manipulate them.
]
[Core.hs: add an Applicative instance for X
Brent Yorgey **20080204192348]
[update LOC claim in man page
gwern0@gmail.com**20080215211420]
[add quickstart instructions
Don Stewart **20080212203502]
[Remove non-existent windows on restart
Spencer Janssen **20080207091140]
[Lift initColor exceptions into Maybe
Don Stewart **20080206194858
We should audit all X11 Haskell lib calls we make for whether
they throw undocumented exceptions, and then banish that.
]
[some things to do
Don Stewart **20080206192533]
[module uses CPP
Don Stewart **20080206190521]
[Rename runManageHook to runQuery
Spencer Janssen **20080204053336]
[let enter dismiss compile errors
daniel@wagner-home.com**20080203202852]
[Core.hs, StackSet.hs: some documentation updates
Brent Yorgey **20080201190653]
[Make Mirror implement emptyLayout
Andrea Rossato **20080128001834]
[xmonad.cabal: add `build-type' to make Cabal happy
"Valery V. Vorotyntsev" **20080131163213]
[Get version from the Paths_xmonad module generated by Cabal
Daniel Neri **20080129144037
No need to bump version in more than one place.
]
[Kill stale xmonad 0.1 comments
Spencer Janssen **20080128211418]
[Point to 0.6 release of contrib
Spencer Janssen **20080128101115]
[notes on releases
Don Stewart **20080128171012]
[bump output of --version
Don Stewart **20080128170840]
[Generalize the type of catchIO, use it in Main.hs
Spencer Janssen **20080128054651]
[Add emptyLayout to LayoutClass, a method to be called when a workspace is empty
Andrea Rossato **20080124013207]
[clarify copyright
Don Stewart **20080108185640]
[TAG 0.6
Spencer Janssen **20080127220633]
[More other-modules
Spencer Janssen **20080127220152]
[Update example config
Spencer Janssen **20080127212331]
[Bump version to 0.6
Spencer Janssen **20080127205000]
[Updated ./man/xmonad.1.in to contain new command line parameters
Austin Seipp **20080122070153]
[Depend on QuickCheck < 2 when building tests
Spencer Janssen **20080122070225]
[Roll testing into the main executable, use Cabal to build the tests
Spencer Janssen **20080119091215]
[Simplify duplicate/cloned screen logic
Spencer Janssen **20080118032228]
[Put the screen removing stuff in getCleanedScreenInfo
Joachim Breitner **20071231181556]
[Ignore cloned screens
Joachim Breitner **20071231180628
This patch ignores screens that are just clones of existing ones,
or are completely contained in another. Currently only for rescreen, not yet for
xmonad start.
]
[-Werror when flag(testing) only
Spencer Janssen **20080118014827]
[Export doubleFork
nicolas.pouillard@gmail.com**20080114202612]
[reword comment (previous version didn't make sense to me)
Lukas Mai **20071122165925]
[The recompile function now returns a boolean status instead of ().
nicolas.pouillard@gmail.com**20080105225500]
[Make focus-follows-mouse configurable
Spencer Janssen **20071229023301]
[Strictify all XConfig fields, gives nice error messages when a field is forgotten on construction
Spencer Janssen **20071229021923]
[Spelling
Spencer Janssen **20071229021628]
[Wibble
Spencer Janssen **20071229021519]
[Broadcast button events to all layouts, fix for issue #111
Spencer Janssen **20071227080356]
[Config.hs: too many users seem to be ignoring/missing the polite warning not to modify this file; change it to something a bit less polite/more obvious.
Brent Yorgey **20071220201549]
[Remove desktop manageHook rules in favor of ManageDocks
Spencer Janssen **20071222113735]
[Wibble
Spencer Janssen **20071222041151]
[Add support for several flags:
Spencer Janssen **20071222020520
--version: print xmonad's version
--recompile: recompile xmonad.hs if it is out of date
--force-recompile: recompile xmonad.hs unconditionally
]
[Remove getProgName capability from restart, we don't use it anymore
Spencer Janssen **20071219215011]
[Flush pending X calls before restarting
Spencer Janssen **20071219162029]
[Allow for sharing of home directory across architectures.
tim.thelion@gmail.com**20071218065146]
[Call 'broadcastMessage ReleaseResources' in restart
Spencer Janssen **20071219065710]
[Manpage now describes config in ~/.xmonad/xmonad.hs
Adam Vogt **20071219023918]
[Update manpage to describe greedyView
Adam Vogt **20071219023726]
[Depend on X11-1.4.1, it has crucial bugfixes
Spencer Janssen **20071215022100]
[1.4.1 X11 dep
Don Stewart **20071214160558]
[Set withdrawnState after calling hide
Spencer Janssen **20071212060250]
[Remove stale comment
Spencer Janssen **20071211084236]
[Make windows responsible for setting withdrawn state
Spencer Janssen **20071211080117]
[Remove stale comment
Spencer Janssen **20071211075641]
[Clean up stale mapped/waitingUnmap state in handle rather than unmanage.
Spencer Janssen **20071211074810
This is an attempt to fix issue #96. Thanks to jcreigh for the insights
necessary to fix the bug.
]
[Delete windows from waitingUnmap that aren't waitng for any unmaps
Spencer Janssen **20071211074506]
[man/xmonad.hs: add some documentation explaining that 'title' can be used in the manageHook just like 'resource' and 'className'.
Brent Yorgey **20071210173357]
[normalize Module headers
Lukas Mai **20071210085327]
[Add 'testing' mode, this should reduce 'darcs check' time significantly
Spencer Janssen **20071210004704]
[Use XMonad meta-module in Main.hs
Spencer Janssen **20071210004456]
[TAG 0.5
Spencer Janssen **20071209233044]
[Remove references to 0.4
Spencer Janssen **20071209232336]
[Bump version to 0.5!
Spencer Janssen **20071209231539]
[Rename xmonad.hs to xmonad-template.hs
Spencer Janssen **20071209231426]
[StackSet: some haddock tuning
Andrea Rossato **20071209161525]
[add a template xmonad.hs
Don Stewart **20071209225018]
[Remove kicker and gnome-panel from the default manageHook, these are better
Spencer Janssen **20071209135408
handled by XMonad.Hooks.ManageDocks. Also, remove the over-complicated list
comprehensions.
]
[XMonad.Layouts -> XMonad.Layout
Spencer Janssen **20071208080553]
[Typos and formatting
Andrea Rossato **20071124143221]
[Move XMonad.Layouts to XMonad.Layout for uniformity with xmc
Andrea Rossato **20071124143000]
[Hide generalized newtype deriving from Haddock
Spencer Janssen **20071208015015]
[Export XMonad.Layouts from XMonad
Spencer Janssen **20071208014927]
[Export XMonad.Operations from XMonad
Spencer Janssen **20071208000636]
[Export Graphics.X11, Graphics.X11.Xlib.Extras, and various Monad stuff from XMonad
Spencer Janssen **20071207233535]
[Depend on X11>=1.4.0
Spencer Janssen **20071205045945]
[Update extra-source-files
Spencer Janssen **20071205044421]
[Update man location
Spencer Janssen **20071205043913]
[make Query a MonadIO
Lukas Mai **20071128195126]
[Add ManageHook to the XMonad metamodule
Spencer Janssen **20071127002840]
[update todos before release
Don Stewart **20071125052720]
[Depend on X11 1.4.0
Don Stewart **20071125034012]
[add getXMonadDir (2nd try)
Lukas Mai **20071121183018]
[Add 'and' and 'or' functions to ManageHook.
Spencer Janssen **20071121104613]
[generalise type of `io'
Don Stewart **20071121054407]
[Add recompilation forcing, clean up recompile's documentation
Spencer Janssen **20071120223614]
[recompile does not raise any exceptions
Spencer Janssen **20071120215835]
[-no-recomp because we're doing our own recompilation checking
Spencer Janssen **20071120215744]
[pointfree
Don Stewart **20071120184016]
[clean up fmap overuse with applicatives. more opportunities remain
Don Stewart **20071120181743]
[ManageHook is a Monoid
Spencer Janssen **20071119060820]
[No more liftM
Spencer Janssen **20071119033120]
[Refactor recompile
Spencer Janssen **20071119032255]
[Trailing space
Spencer Janssen **20071119030658]
[Generalize recompile to MonadIO
Spencer Janssen **20071119030436]
[Factor out doubleFork logic
Spencer Janssen **20071119030353]
[handle case of xmonad binary not existing, when checking recompilation
Don Stewart **20071119030057]
[Use executeFile directly, rather than the shell, avoiding sh interepeting
Don Stewart **20071119025015]
[use 'spawn' rather than runProcess, to report errors asynchronously, avoiding zombies
Don Stewart *-20071119023712]
[use 'spawn' rather than runProcess, to report errors asynchronously, avoiding zombies
Don Stewart **20071119023712]
[Use xmessage to present a failure message to users when the config file cannot be loaded
Don Stewart **20071119022429]
[only check xmonad.hs against the xmonad binary, not the .o file (meaning you can remove it if you like)
Don Stewart **20071119011528]
[Do our own recompilation checking: only launch ghc if the xmonad.hs is newer than its .o file
Don Stewart **20071119010759]
[reformat export list to fit on the page
Don Stewart **20071119003900]
[add support for Mac users and their silly case-insensitive filesystems
Devin Mullins **20071117024836]
[some more tweaks
Don Stewart **20071116184227]
[more todos: docs
Don Stewart **20071116182444]
[we need examples for the managehook edsl
Don Stewart **20071116182332]
[more todos
Don Stewart **20071116182033]
[polish readme
Don Stewart **20071116181931]
[more polish for config doc
Don Stewart **20071116181640]
[tweak .cabal synopsis a little
Don Stewart **20071116181245]
[Config: small haddock fix
Andrea Rossato **20071116113158]
[Core: documented XConfig and ScreenDetail
Andrea Rossato **20071116112826]
[CONFIG, TODO: fix typos
"Valery V. Vorotyntsev" **20071115144151
CONFIG: delete trailing whitespace
]
[make default ratios in config nicer to look at
Lukas Mai **20071112013551]
[refactor main, add "recompile" to XMonad.Core
Lukas Mai **20071108230933]
[comments, reexport Data.Bits
Don Stewart **20071114183759]
[polish .cabal file. add xmonad@ as the default maintainer
Don Stewart **20071114182716]
[add lots more text on configuration
Don Stewart **20071114182531]
[refactor trace.
Don Stewart **20071114034109]
[clarify comment at top of Config.hs
Devin Mullins **20071111191304
There appears to be some confusion -- several people have wanted to edit
Config.hs as was done in the past. This comment probably won't stop that, but
it's a start.
]
[avoid Data.Ratio and % operator in XMonad.Config
David Roundy **20071111183708
I think this'll make Config.hs more friendly as a template for folks
to modify.
]
[remove obviated (and confusing) comments
Devin Mullins **20071111055047]
[XMonad.Main uses FlexibleContexts
Spencer Janssen **20071111214528]
[hide existential Layout (mostly) from user API.
David Roundy **20071111003055]
[Depend on X11 1.3.0.20071111
Don Stewart **20071111200932]
[update README some more
Don Stewart **20071109181203]
[we depend on Cabal 1.2.0 or newer
Don Stewart **20071109155934]
[Generalize several functions to MonadIO
Spencer Janssen **20071109064214]
[Docs for ManageHook
Spencer Janssen **20071109031810]
[New ManageHook system
Spencer Janssen **20071109024722]
[Generalize the type of whenJust
Spencer Janssen **20071107062126]
[maybe False (const True) -> isJust. spotted by shachaf
Don Stewart **20071108003539]
[typo
Don Stewart **20071108000259]
[imports not needed in example now
Don Stewart **20071107032346]
[Provide top level XMonad.hs export module
Don Stewart **20071107030617]
[point to where defns for config stuff can be found
Don Stewart **20071107020801]
[Fix haddock comment
Spencer Janssen **20071107030510]
[fall back to previous ~/.xmonad/xmonad if recompilation fails
Lukas Mai **20071107015309]
[recommend --user
Don Stewart **20071106221004]
[add CONFIG with details of how to configure
Don Stewart **20071105040741]
[Run only 50 tests per property, decreases test time by 10 seconds on my system
Spencer Janssen **20071105064944]
[Remove stale comment
Spencer Janssen **20071105063731]
[Use Cabal's optimization flags rather than -O
Spencer Janssen **20071105061759]
[Build the whole thing in the test hook
Spencer Janssen **20071105061615]
[-Werror
Spencer Janssen **20071105060326]
[Remove superfluous 'extensions:' field
Spencer Janssen **20071105034515]
[Use configurations in xmonad.cabal
Spencer Janssen **20071105033428]
[~/.xmonad/Main.hs is now ~/.xmonad/xmonad.hs !
Don Stewart **20071105032655]
[makeMain -> xmonad
Don Stewart **20071105031203]
[-Wall police
Don Stewart **20071105022202]
[remember to compile the xmonad library also with the usual ghc-optoins
Don Stewart **20071105022127]
[EventLoop -> Core, DefaultConfig -> Config
Don Stewart **20071105021705]
[clean up DefaultConfig.hs
Don Stewart