[xmonad] darcs patch: X actions in DynamicLog

asgaroth asgaroth_ at gmx.de
Fri Jan 2 16:43:09 EST 2009

The attached patch makes it possible to use arbitrary X actions in the 
functions in DynamicLog, e.g. to display the window count for each 
workspace or display other more dynamic information. I supplied an 
additional PPX data type and functions that use it in order to maintain 
compatability with current configs.
(This is my first contribution to a Haskell project and I'm not very 
skilled in writing Haskell code, so the patch probably contains style 
-------------- next part --------------
Fri Jan  2 22:16:26 CET 2009  asgaroth <asgaroth_ at gmx.de>
  * Support for X actions in logHook

New patches:

[Support for X actions in logHook
asgaroth <asgaroth_ at gmx.de>**20090102211626] {
hunk ./XMonad/Hooks/DynamicLog.hs 36
     PP(..), defaultPP,
+    dynamicLogWithPPX,
+    dynamicLogStringX,
+    ppToPPX, PPX(..),
     -- * Example formatters
     dzenPP, xmobarPP, sjanssenPP, byorgeyPP,
hunk ./XMonad/Hooks/DynamicLog.hs 225
 -- | Format the current status using the supplied pretty-printing format,
 --   and write it to stdout.
+dynamicLogWithPPX :: PPX -> X ()
+dynamicLogWithPPX ppx = dynamicLogStringX ppx >>= io . ppxOutput ppx
+-- | The same as dynamicLogWithPPX for PP
 dynamicLogWithPP :: PP -> X ()
hunk ./XMonad/Hooks/DynamicLog.hs 230
-dynamicLogWithPP pp = dynamicLogString pp >>= io . ppOutput pp
+dynamicLogWithPP = dynamicLogWithPPX . ppToPPX
hunk ./XMonad/Hooks/DynamicLog.hs 232
--- | The same as 'dynamicLogWithPP', except it simply returns the status
+-- | The same as 'dynamicLogWithPPX', except it simply returns the status
 --   as a formatted string without actually printing it to stdout, to
 --   allow for further processing, or use in some application other than
 --   a status bar.
hunk ./XMonad/Hooks/DynamicLog.hs 236
-dynamicLogString :: PP -> X String
-dynamicLogString pp = do
+dynamicLogStringX :: PPX -> X String
+dynamicLogStringX ppx = do
     winset <- gets windowset
     urgents <- readUrgents
hunk ./XMonad/Hooks/DynamicLog.hs 241
-    sort' <- ppSort pp
+    sort' <- ppxSort ppx
     -- layout description
     let ld = description . S.layout . S.workspace . S.current $ winset
hunk ./XMonad/Hooks/DynamicLog.hs 247
     -- workspace list
-    let ws = pprWindowSet sort' urgents pp winset
+    ws <- pprWindowSet sort' urgents ppx winset
     -- window title
hunk ./XMonad/Hooks/DynamicLog.hs 250
-    wt <- maybe (return "") (fmap show . getName) . S.peek $ winset
+    wt <- (maybe (return "") (fmap show . getName) . S.peek $ winset)
     -- run extra loggers, ignoring any that generate errors.
hunk ./XMonad/Hooks/DynamicLog.hs 253
-    extras <- sequence $ map (flip catchX (return Nothing)) $ ppExtras pp
+    extras <- sequence $ map (flip catchX (return Nothing)) $ ppxExtras ppx
+    -- format layout
+    layout <- ppxLayout ppx ld
hunk ./XMonad/Hooks/DynamicLog.hs 258
-    return $ encodeOutput . sepBy (ppSep pp) . ppOrder pp $
+    -- format window title
+    tl <- ppxTitle ppx wt
+    return $ encodeOutput . sepBy (ppxSep ppx) . ppxOrder ppx $
                         [ ws
hunk ./XMonad/Hooks/DynamicLog.hs 263
-                        , ppLayout pp ld
-                        , ppTitle  pp wt
+                        , layout
+                        , tl
                         ++ catMaybes extras
hunk ./XMonad/Hooks/DynamicLog.hs 268
+-- | The same as dynamicLogStringX for PP
+dynamicLogString :: PP -> X String
+dynamicLogString = dynamicLogStringX . ppToPPX
 -- | Format the workspace information, given a workspace sorting function,
 --   a list of urgent windows, a pretty-printer format, and the current
 --   WindowSet.
hunk ./XMonad/Hooks/DynamicLog.hs 275
-pprWindowSet :: WorkspaceSort -> [Window] -> PP -> WindowSet -> String
-pprWindowSet sort' urgents pp s = sepBy (ppWsSep pp) . map fmt . sort' $
-            map S.workspace (S.current s : S.visible s) ++ S.hidden s
+pprWindowSet :: WorkspaceSort -> [Window] -> PPX -> WindowSet -> X String
+pprWindowSet sort' urgents ppx s = return . sepBy (ppxWsSep ppx) =<< (mapM fmt . sort' $
+            map S.workspace (S.current s : S.visible s) ++ S.hidden s)
    where this     = S.currentTag s
          visibles = map (S.tag . S.workspace) (S.visible s)
hunk ./XMonad/Hooks/DynamicLog.hs 281
-         fmt w = printer pp (S.tag w)
-          where printer | S.tag w == this                                               = ppCurrent
-                        | S.tag w `elem` visibles                                       = ppVisible
-                        | any (\x -> maybe False (== S.tag w) (S.findTag x s)) urgents  = \ppC -> ppUrgent ppC . ppHidden ppC
-                        | isJust (S.stack w)                                            = ppHidden
-                        | otherwise                                                     = ppHiddenNoWindows
+         fmt w = printer ppx (S.tag w)
+          where printer | S.tag w == this                                               = ppxCurrent
+                        | S.tag w `elem` visibles                                       = ppxVisible
+                        | any (\x -> maybe False (== S.tag w) (S.findTag x s)) urgents  = \ppC str -> ppxUrgent ppC =<< ppxHidden ppC str
+                        | isJust (S.stack w)                                            = ppxHidden
+                        | otherwise                                                     = ppxHiddenNoWindows
 -- |
 -- Workspace logger with a format designed for Xinerama:
hunk ./XMonad/Hooks/DynamicLog.hs 418
                -- formatting.
+-- | The 'PPX' is almost identical to PP, but differs from PP in that it 
+--   allows for X actions in its functions
+data PPX = PPX { ppxCurrent :: WorkspaceId -> X String
+               -- ^ how to print the tag of the currently focused
+               -- workspace
+               , ppxVisible :: WorkspaceId -> X String
+               -- ^ how to print tags of visible but not focused
+               -- workspaces (xinerama only)
+               , ppxHidden  :: WorkspaceId -> X String
+               -- ^ how to print tags of hidden workspaces which
+               -- contain windows
+               , ppxHiddenNoWindows :: WorkspaceId -> X String
+               -- ^ how to print tags of empty hidden workspaces
+               , ppxUrgent :: WorkspaceId -> X String
+               -- ^ format to be applied to tags of urgent workspaces.
+               -- NOTE that 'ppUrgent' is applied /in addition to/
+               -- 'ppHidden'!
+               , ppxSep :: String
+               -- ^ separator to use between different log sections
+               -- (window name, layout, workspaces)
+               , ppxWsSep :: String
+               -- ^ separator to use between workspace tags
+               , ppxTitle :: String -> X String
+               -- ^ window title format
+               , ppxLayout :: String -> X String
+               -- ^ layout name format
+               , ppxOrder :: [String] -> [String]
+               -- ^ how to order the different log sections. By
+               --   default, this function receives a list with three
+               --   formatted strings, representing the workspaces,
+               --   the layout, and the current window title,
+               --   respectively. If you have specified any extra
+               --   loggers in 'ppExtras', their output will also be
+               --   appended to the list.  To get them in the reverse
+               --   order, you can just use @ppOrder = reverse at .  If
+               --   you don't want to display the current layout, you
+               --   could use something like @ppOrder = \\(ws:_:t:_) ->
+               --   [ws,t]@, and so on.
+               , ppxSort :: X ([WindowSpace] -> [WindowSpace])
+               -- ^ how to sort the workspaces.  See
+               -- "XMonad.Util.WorkspaceCompare" for some useful
+               -- sorts.
+               , ppxExtras :: [X (Maybe String)]
+               -- ^ loggers for generating extra information such as
+               -- time and date, system load, battery status, and so
+               -- on.  See "XMonad.Util.Loggers" for examples, or create
+               -- your own!
+               , ppxOutput :: String -> IO ()
+               -- ^ applied to the entire formatted string in order to
+               -- output it.  Can be used to specify an alternative
+               -- output method (e.g. write to a pipe instead of
+               -- stdout), and\/or to perform some last-minute
+               -- formatting.
+             }
+-- | Converts a PP to a PPX.
+ppToPPX :: PP -> PPX
+ppToPPX pp = PPX {
+               ppxCurrent = return . ppCurrent pp,
+               ppxVisible = return . ppVisible pp,
+               ppxHidden = return . ppHidden pp,
+               ppxHiddenNoWindows = return . ppHiddenNoWindows pp,
+               ppxUrgent = return . ppUrgent pp,
+               ppxSep = ppSep pp,
+               ppxWsSep = ppWsSep pp,
+               ppxTitle = return . ppTitle pp,
+               ppxLayout = return . ppLayout pp,
+               ppxOrder = ppOrder pp,
+               ppxSort = ppSort pp,
+               ppxExtras = ppExtras pp,
+               ppxOutput = ppOutput pp
+             }
 -- | The default pretty printing options, as seen in 'dynamicLog'.
 defaultPP :: PP
 defaultPP = PP { ppCurrent         = wrap "[" "]"


[X.U.XSelection: get rid of warning about missing newline, add Haddock link
Brent Yorgey <byorgey at cis.upenn.edu>**20090102194357] 
[adds haddock documentation for transformPromptSelection
loupgaroublond at gmail.com**20090102190954
 also renames the function per mailing list recommendation
[adds a weird function to XSelection
loupgaroublond at gmail.com**20081222020730
 This enables you to pass a function of (String -> String) to a selection function to modify the string before executing it.  This way, you can input your own escape routines to make it shell command line safe, and/or do other fancier things.
xmonad at c-otto.de**20090102091019] 
rupa at lrrr.us**20081224045509
 bogner wrote all this stuff and i just tested it.
 I had:
 myLogHook = ewmhDesktopLogHookCustom ScratchpadFilterOutWorkspace >> updatePointer Nearest
 Everytime I invoked or hid Scratchpad, it would leave a 'Maybe.fromJust: Nothing' line in .xsession-errors, and updatePointer would stop working.
[ Prompt: Change Filemode to 600 for history-file (fixes bug 244)
Dominik Bruhn <dominik at dbruhn.de>**20081218001601] 
[X.L.Monitor: changes in message passing
Roman Cheplyaka <roma at ro-che.info>**20081226220851
 - transform mbName (Maybe String) to name (String)
 - slghtly change semantics of messages, document it
[X.L.Monitor: change interface
Roman Cheplyaka <roma at ro-che.info>**20081226213118
 - remove add*Monitor
 - add manageMonitor, monitor template
[X.U.WindowProperties: propertyToQuery+docs
Roman Cheplyaka <roma at ro-che.info>**20081225080702] 
[X.L.Monitor: docs
Roman Cheplyaka <roma at ro-che.info>**20081225073904] 
[hlintify XUtils, XSelection, Search, WindowGo
gwern0 at gmail.com**20081220153302
 Ignore-this: 7e877484e3cd8954b74232ea83180fa9
[fix focus issue for XMonad.Actions.Warp.banishScreen
Norbert Zeh <nzeh at cs.dal.ca>**20081212203532
 This patch ensures that the focus (or in fact the whose windowset)
 does not change as a result of a banishScreen.  The way this is implemented
 will become problematic if xmonad ever goes multithreaded.
[addition of XMonad.Actions.Warp.banishScreen
Norbert Zeh <nzeh at cs.dal.ca>**20081212192621
 This works on top of warpToScreen and, thus, suffers from the same issue:
 focus change.
[fixed documentation for banish
Norbert Zeh <nzeh at cs.dal.ca>**20081212191819
 banish actually warps to the specified corner of the current window, not
 the screen.
[addition of combined TallGrid layout
Norbert Zeh <nzeh at cs.dal.ca>**20081212184836
 Added a module XMonad.Layouts.GridVariants, which defines layouts
 Grid and TallGrid.  The former is a customizable version of Grid.  The latter
 is a combination of Grid and Tall (see doc of the module).
[Add FixedColumn, a layout like Tall but based on the resize hints of windows
Justin Bogner <mail at justinbogner.com>**20081213073054] 
[XMonad.Actions.WindowGo: fix a floating-related focus bug
gwern0 at gmail.com**20081205150755
 Ignore-this: c8b6625aa2bd4136937acbd2ad64ffd3
 If a floating window was focused, a cross-workspace 'raise' would cause a loop of
 shifting windows. Apparently the problem was 'focus' and its mouse-handling. Spencer
 suggested that the calls to focus be replaced with 'focusWindow', which resolved it.
[Prompt.hs: +greenXPConfig and amberXPConfig
gwern0 at gmail.com**20081119213122
 Ignore-this: 95ac7dbe9c8fe3618135966f251f4fc6
[Prompt.hs: increase font size to 12 from niggardly 10
gwern0 at gmail.com**20081119212523
 Ignore-this: 74a6e1ac5e1774da4ffc7c6667c034c
[Prompt.hs: replace magic numbers with understandable names
gwern0 at gmail.com**20081119212502
 Ignore-this: 8401c0213be9a32c925e1bd0ba5e01f1
[X.L.Monitor: recommend doHideIgnore (docs)
Roman Cheplyaka <roma at ro-che.info>**20081215190710] 
[X.L.Monitor: docs
Roman Cheplyaka <roma at ro-che.info>**20081215184423] 
[X.L.Monitor: export Monitor datatype
Roman Cheplyaka <roma at ro-che.info>**20081215184318] 
[X.H.ManageHelpers: add doHideIgnore
Roman Cheplyaka <roma at ro-che.info>**20081215182758] 
[Add KDE 4 config, thanks to Shirakawasuna on IRC
Spencer Janssen <spencerjanssen at gmail.com>**20081211071141
 Ignore-this: 51698961ab5b6e569c294d174f2804a9
[I use the deleteConsecutive history filter
Spencer Janssen <spencerjanssen at gmail.com>**20081025070438] 
[Remove XMonad.Config.PlainConfig, it has been turned into the separate xmonad-light project.
Braden Shepherdson <Braden.Shepherdson at gmail.com>**20081203161534] 
[XMonad.Prompt: swap up and down per bug #243
gwern0 at gmail.com**20081203013323
 Ignore-this: 8ab0481a0da7a983f501ac2fec4a68e8
[Fix boolean operator precedence in GridSelect keybindings
Aleksandar Dimitrov <aleks.dimitrov at googlemail.com>**20081201120928
 The vim-like hjkl keys were ORed to the key event AND arrow keys.
[GridSelect.hs: navigate grid with h,j,k,l as well as arrow keys
sean.escriva at gmail.com**20081122084725] 
[Export setOpacity from FadeInactive. Document how to make monitor transparent (X.L.Monitor)
Roman Cheplyaka <roma at ro-che.info>**20081117153027] 
[Monitor: use broadcastMessage instead of sendMessage; this solves several issues
Roman Cheplyaka <roma at ro-che.info>**20081117133957] 
[FadeInactive: fade all inactive windows (including focused windows on visible screens)
Roman Cheplyaka <roma at ro-che.info>**20081117130115] 
[Monitor: documented one more issue
Roman Cheplyaka <roma at ro-che.info>**20081117113807] 
[Monitor: improved the docs
Roman Cheplyaka <roma at ro-che.info>**20081117073709] 
[added XMonad.Layout.Monitor
Roman Cheplyaka <roma at ro-che.info>**20081115104735] 
[WindowProperties: added allWithProperty
Roman Cheplyaka <roma at ro-che.info>**20081115104525] 
[ManageHelpers: added doSideFloat (generalization of doCenterFloat)
Roman Cheplyaka <roma at ro-che.info>**20081114113015] 
[GridSelect: Export default_colorizer
Dominik Bruhn <dominik at dbruhn.de>**20081112140005] 
[Simplify code for restriction-calculation and remove compiletime warnings
Dominik Bruhn <dominik at dbruhn.de>**20081112134630] 
[Simplify handle/eventLoop, introduce findInWindowMap, partial updates for key movements (less flickering)
Clemens Fruhwirth <clemens at endorphin.org>**20081111100405
 * handle/eventLoop carried the display and the drawing window as
   parameters. The display is available from the embedded X monad, the
   drawing windows was added.
 * updateWindows now takes a list of windows to
   update. updateAllWindows updates all windows.
 * only the windows that are modified by key movements are redrawn
   now. This means less flickering.
[GridSelect: force cursor stay in visible area
Roman Cheplyaka <roma at ro-che.info>**20081111063348] 
[GridSelect: fix infiniteness problem with diamondRestrict
Roman Cheplyaka <roma at ro-che.info>**20081111055350] 
[GridSelect: remove tabs
Roman Cheplyaka <roma at ro-che.info>**20081111053647] 
[Exported shrinkWhile from Decoration to use in GridSelect
Roman Cheplyaka <roma at ro-che.info>**20081110191534] 
[GridSelect: added link to a screenshot
Roman Cheplyaka <roma at ro-che.info>**20081110190617] 
[GridSelect: various improvements
Roman Cheplyaka <roma at ro-che.info>**20081110184644
 Added documentation
 Restricted export list for the sake of haddock
 Added functions:
   bringSelected (by Clemens Fruhwirth)
   goToSelected (by Dominik Bruhn)
[Initial version of GridSelect.hs with a lot room for improvement/cleanups
Clemens Fruhwirth <clemens at endorphin.org>**20081107115114] 
[documentation: XMonad.Util.Search.hs, add EZConfig keybindings example
sean.escriva at gmail.com**20081106171707] 
Don Stewart <dons at galois.com>**20081104043044
 Ignore-this: bdac0ff3316c821bce321b51c62f6e89
[place an upper bound on the version of base we support
Don Stewart <dons at galois.com>**20081104035857
 Ignore-this: 29139cc4f0ecb299b56ae99f7d20b854
[explicit import list for things in the process library
Don Stewart <dons at galois.com>**20081104035319
 Ignore-this: 91b7f96421828788760e8bcff7dec317
[Work around ghc 6.10 bug #2738
Don Stewart <dons at galois.com>**20081104034819
 Ignore-this: c75da9693fa642025eac0d074869423d
deadguysfrom at gmail.com**20081023173019] 
[generic menu and window bringer
Travis B. Hartwell <nafai at travishartwell.net>**20081027005523] 
[Search.hs: +hackage search, courtesy of byorgey
gwern0 at gmail.com**20081031214937
 Ignore-this: 24db0ceed49f8bd37ce98ccf8f8ca2ab
[Prompt.hs rename deleteConsecutiveDuplicates
gwern0 at gmail.com**20081008205131
 That name is really unwieldy and long.
[Prompt.hs: have historyCompletion filter dupes
gwern0 at gmail.com**20081008204710
 Specifically, it calls deleteConsecutiveDuplicates on the end product. uniqSort reverses order in an unfortunate way, so we don't use that.
 The use-case is when a user has added the same input many times - as it stands, if the history records 30 'top's or whatever, the completion will show 30 'top' entries! This fixes that.
[Prompt.hs: tweak haddocks
gwern0 at gmail.com**20081008204649] 
[Prompt.hs: mv uniqSort to next to its confreres, and mention the trade-off
gwern0 at gmail.com**20081008192645] 
[Do not consider XMONAD_TIMER unknown
Joachim Breitner <mail at joachim-breitner.de>**20081008195643] 
[Kill window without focusing it first
Joachim Breitner <mail at joachim-breitner.de>**20081005002533
 This patch requires the patch "add killWindow function" in xmonad.
 Before this patch, people would experience “workspace flicker” when closing
 a window via EWMH that is not on the current workspace, for example when
 quitting pidgin via the panel icon.
[let MagnifyLess actually magnify less
daniel at wagner-home.com**20081015153911] 
[Actions.Search: add a few search engines
intrigeri at boum.org**20081008104033
 Add Debian {package, bug, tracking system} search engines, as well as Google
 Images and isohunt.
[Implement HiddenNonEmptyWS with HiddenWS and NonEmptyWS
Joachim Breitner <mail at joachim-breitner.de>**20081006211027
 (Just to reduce code duplication)
[Add straightforward HiddenWS to WSType
Joachim Breitner <mail at joachim-breitner.de>**20081006210548
 With NonEmptyWS and HiddenNonEmptyWS present, HiddenWS is obviously missing.
[Merge emptyLayoutMod into redoLayout
Joachim Breitner <mail at joachim-breitner.de>**20081005190220
 This removes the emptyLayoutMod method from the LayoutModifier class, and
 change the Stack parameter to redoLayout to a Maybe Stack one. It also changes
 all affected code. This should should be a refactoring without any change in
 program behaviour.
[SmartBorders even for empty layouts
Joachim Breitner <mail at joachim-breitner.de>**20081005184426
 Fixes: http://code.google.com/p/xmonad/issues/detail?id=223
[Paste.hs: improve haddocks
gwern0 at gmail.com**20080927150158] 
[Paste.hs: fix haddock
gwern0 at gmail.com**20080927145238] 
[minor explanatory comment
daniel at wagner-home.com**20081003015919] 
[XMonad.Layout.HintedGrid: add GridRatio (--no-test because of haddock breakage)
Lukas Mai <l.mai at web.de>**20080930141715] 
[XMonad.Util.Font: UTF8 -> USE_UTF8
Lukas Mai <l.mai at web.de>**20080930140056] 
[Paste.hs: implement noModMask suggestion
gwern0 at gmail.com**20080926232056] 
[fix a divide by zero error in Grid
daniel at wagner-home.com**20080926204148] 
[-DUTF8 flag with -DUSE_UTF8
gwern0 at gmail.com**20080921154014] 
[XSelection.hs: use CPP to compile against utf8-string
gwern0 at gmail.com**20080920151615] 
[add XMonad.Config.Azerty
Devin Mullins <me at twifkak.com>**20080924044946] 
[flip GridRatio to match convention (x/y)
Devin Mullins <me at twifkak.com>**20080922033354] 
[let Grid have a configurable aspect ratio goal
daniel at wagner-home.com**20080922010950] 
[Paste.hs: +warning about ASCII limitations
gwern0 at gmail.com**20080921155038] 
[Paste.hs: shorten comment lines to under 80 columns per sjanssen
gwern0 at gmail.com**20080921154950] 
[Forgot to enable historyFilter :(
Spencer Janssen <spencerjanssen at gmail.com>**20080921094254] 
[Prompt: add configurable history filters
Spencer Janssen <spencerjanssen at gmail.com>**20080921093453] 
[Update my config to use 'statusBar'
Spencer Janssen <spencerjanssen at gmail.com>**20080921063513] 
[Rename pasteKey functions to sendKey
Spencer Janssen <spencerjanssen at gmail.com>**20080921062016] 
[DynamicLog: doc fixes
Spencer Janssen <spencerjanssen at gmail.com>**20080921061314] 
[Move XMonad.Util.XPaste to XMonad.Util.Paste
Spencer Janssen <spencerjanssen at gmail.com>**20080921060947] 
[Depend on X11 >= 1.4.3
Spencer Janssen <spencerjanssen at gmail.com>**20080921055456] 
[statusBar now supplies the action to toggle struts
Spencer Janssen <spencerjanssen at gmail.com>**20080918013858] 
[cleanup - use currentTag
Devin Mullins <me at twifkak.com>**20080921011159] 
[XPaste.hs: improve author info
gwern0 at gmail.com**20080920152342] 
[+XMonad.Util.XPaste: a module for pasting strings to windows
gwern0 at gmail.com**20080920152106] 
[UrgencyHook bug fix: cleanupUrgents should clean up reminders, too
Devin Mullins <me at twifkak.com>**20080920062117] 
[Sketch of XMonad.Config.Monad
Spencer Janssen <spencerjanssen at gmail.com>**20080917081838] 
seanmce33 at gmail.com**20080912184830] 
[Add missing space between dzen command and flags
Daniel Neri <daniel.neri at sigicom.com>**20080915131009] 
[Big DynamicLog refactor.  Added statusBar, improved compositionality for dzen and xmobar
Spencer Janssen <spencerjanssen at gmail.com>**20080913205931
 Compatibility notes:
     - dzen type change
     - xmobar type change
     - dynamicLogDzen removed
     - dynamicLogXmobar removed
[Take maintainership of XMonad.Prompt
Spencer Janssen <spencerjanssen at gmail.com>**20080911230442] 
[Overhaul Prompt to use a zipper for history navigation.  Fixes issue #216
Spencer Janssen <spencerjanssen at gmail.com>**20080911225940] 
[Use the new completion on tab setting
Spencer Janssen <spencerjanssen at gmail.com>**20080911085940] 
[Only start to show the completion window with more than one match
Joachim Breitner <mail at joachim-breitner.de>**20080908110129] 
[XPrompt: Add showCompletionOnTab option
Joachim Breitner <mail at joachim-breitner.de>**20080908105758
 This patch partially implements
 It adds a XPConfig option that, if enabled, hides the completion window
 until the user presses Tab once. Default behaviour is preserved.
 TODO: If Tab causes a unique completion, continue to hide the completion
[XMonad.Actions.Plane.planeKeys: function to make easier to configure
Marco Túlio Gontijo e Silva <marcot at riseup.net>**20080714153601] 
[XMonad.Actions.Plane: removed unneeded hiding
Marco Túlio Gontijo e Silva <marcot at riseup.net>**20080714152631] 
[Improvements in documentation
Marco Túlio Gontijo e Silva <marcot at riseup.net>**20080709002425] 
[Fix haddock typos in XMonad.Config.{Desktop,Gnome,Kde}
Spencer Janssen <spencerjanssen at gmail.com>**20080911040808] 
[add clearUrgents for your keys
Devin Mullins <me at twifkak.com>**20080909055425] 
[add reminder functionality to UrgencyHook
Devin Mullins <me at twifkak.com>**20080824200548
 I'm considering rewriting remindWhen and suppressWhen as UrgencyHookModifiers, so to speak. Bleh.
[TAG 0.8
Spencer Janssen <spencerjanssen at gmail.com>**20080905195420] 
Patch bundle hash:

More information about the xmonad mailing list