[xmonad] darcs patch: generic menu and window bringer

Travis B. Hartwell nafai at travishartwell.net
Sat Oct 25 01:16:37 EDT 2008

Hash: SHA1

I've had to make some patches for XMonadContrib in order to support the
new Gtk replacement for dmenu I have written:


Screenshot here:

I use these changes by doing this in my xmonad.hs:
import XMonad.Actions.WindowBringer (gotoMenu')

Then, for example, in a key binding:
 ("M-w", gotoMenu' "gtkmenu" )

Please let me know if there is a better way to make this generic and
clean it up.  What I have here compiles and works, so I thought I would
submit it.

Thanks for the great software and all the help on #xmonad!

- --
Travis B. Hartwell
Software Toolsmith


Where to find me:
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

-------------- next part --------------
Fri Oct 24 23:07:14 MDT 2008  Travis B. Hartwell <nafai at travishartwell.net>
  * generic menu and window bringer

New patches:

[generic menu and window bringer
Travis B. Hartwell <nafai at travishartwell.net>**20081025050714] {
hunk ./XMonad/Actions/WindowBringer.hs 20
 module XMonad.Actions.WindowBringer (
                                     -- * Usage
                                     -- $usage
-                                    gotoMenu, bringMenu, windowMap,
+                                    gotoMenu, gotoMenu', bringMenu, windowMap,
                                    ) where
hunk ./XMonad/Actions/WindowBringer.hs 30
 import qualified XMonad.StackSet as W
 import XMonad
 import qualified XMonad as X
-import XMonad.Util.Dmenu (dmenuMap)
+import XMonad.Util.Dmenu (dmenuMap, menu, menuMap)
 import XMonad.Util.NamedWindows (getName)
 -- $usage
hunk ./XMonad/Actions/WindowBringer.hs 53
 gotoMenu :: X ()
 gotoMenu = actionMenu W.focusWindow
+gotoMenu' :: String -> X ()
+gotoMenu' menuCmd = actionMenu' menuCmd W.focusWindow
 -- | Pops open a dmenu with window titles. Choose one, and it will be
 --   dragged, kicking and screaming, into your current workspace.
 bringMenu :: X ()
hunk ./XMonad/Actions/WindowBringer.hs 68
 -- | Calls dmenuMap to grab the appropriate Window, and hands it off to action
 --   if found.
 actionMenu :: (Window -> X.WindowSet -> X.WindowSet) -> X()
-actionMenu action = windowMap >>= dmenuMap >>= flip X.whenJust (windows . action)
+actionMenu action = actionMenu'' dmenuMap action
hunk ./XMonad/Actions/WindowBringer.hs 70
+actionMenu' :: String -> (Window -> X.WindowSet -> X.WindowSet) -> X()
+actionMenu' menuCmd action = actionMenu'' menuMapFunction action
+    where
+      menuFunction :: [String] -> X String
+      menuFunction opts = menu menuCmd opts
+      menuMapFunction :: M.Map String a -> X (Maybe a)
+      menuMapFunction selectionMap = menuMap menuFunction selectionMap
+actionMenu'' :: (M.Map String Window -> X (Maybe a)) -> (a -> X.WindowSet -> X.WindowSet) -> X()
+actionMenu'' menuMapFunction action = windowMap >>= menuMapFunction >>= flip X.whenJust (windows . action)
 -- | A map from window names to Windows.
 windowMap :: X (M.Map String Window)
 windowMap = do
hunk ./XMonad/Util/Dmenu.hs 20
 module XMonad.Util.Dmenu (
                             -- * Usage
                             -- $usage
-                            dmenu, dmenuXinerama, dmenuMap
+                            dmenu, dmenuXinerama, dmenuMap, menu, menuMap
                            ) where
 import XMonad
hunk ./XMonad/Util/Dmenu.hs 43
     io $ runProcessWithInput "dmenu" ["-xs", show (curscreen+1)] (unlines opts)
 dmenu :: [String] -> X String
-dmenu opts = io $ runProcessWithInput "dmenu" [] (unlines opts)
+dmenu opts = menu "demnu" opts
hunk ./XMonad/Util/Dmenu.hs 45
-dmenuMap :: M.Map String a -> X (Maybe a)
-dmenuMap selectionMap = do
-  selection <- dmenu (M.keys selectionMap)
-  return $ M.lookup selection selectionMap
+menu :: String -> [String] -> X String
+menu menuCmd opts = io $ runProcessWithInput menuCmd [] (unlines opts)
hunk ./XMonad/Util/Dmenu.hs 48
+menuMap :: ([String] -> X String) -> M.Map String a -> X (Maybe a)
+menuMap menuFunction selectionMap = do
+  selection <- menuFunction (M.keys selectionMap)
+  return $ M.lookup selection selectionMap
+dmenuMap :: M.Map String a -> X (Maybe a)
+dmenuMap selectionMap = menuMap dmenu selectionMap


[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