use implicit parameters to pass spawner ioref around
Revision as of 01:04, 16 May 2009
Current revision
Line 1:
Line 1:
<haskell> <haskell>
{-# OPTIONS_GHC -Wall -fno-warn-missing-signatures #-} {-# OPTIONS_GHC -Wall -fno-warn-missing-signatures #-}
+ {-# LANGUAGE ImplicitParams #-}
module Main where module Main where
Line 11:
Line 12:
-- Update these with: ghc -ddump-minimal-imports -- Update these with: ghc -ddump-minimal-imports
import XMonad.Layout.LayoutHints(layoutHints2) -- not in contrib import XMonad.Layout.LayoutHints(layoutHints2) -- not in contrib
+
+ import XMonad.Util.NamedActions -- not pushed yet
import Graphics.X11.Xinerama(getScreenInfo) import Graphics.X11.Xinerama(getScreenInfo)
import Control.Monad(Monad(return, (>>), (>>=)), Functor(..), import Control.Monad(Monad(return, (>>), (>>=)), Functor(..),
(=<<), mapM, sequence, zipWithM_) (=<<), mapM, sequence, zipWithM_)
+ import Control.Applicative((<$>))
import Data.List((++), zip, map, concatMap, repeat, zipWith, import Data.List((++), zip, map, concatMap, repeat, zipWith,
- intercalate, isInfixOf) + isPrefixOf, nub, intercalate, isInfixOf)
- import Data.Maybe(catMaybes) + import Data.Maybe(catMaybes, maybeToList)
import Data.Ratio((%)) import Data.Ratio((%))
import System.IO(IO, Handle, hPutStrLn) import System.IO(IO, Handle, hPutStrLn)
Line 28:
Line 32:
promptSearch) promptSearch)
import XMonad.Actions.Submap(submap) import XMonad.Actions.Submap(submap)
- import XMonad.Actions.TopicSpace(Dir, TopicConfig(..), Topic, + import XMonad.Actions.TopicSpace(TopicConfig(..), Topic,
(>*>), checkTopicConfig, currentTopicAction, currentTopicDir, (>*>), checkTopicConfig, currentTopicAction, currentTopicDir,
- pprWindowSet, switchNthLastFocused, switchTopic) + pprWindowSet, switchNthLastFocused, switchTopic,
+ getStringProp, setStringProp)
import XMonad.Hooks.DynamicLog(PP(ppUrgent, ppTitle, ppLayout, import XMonad.Hooks.DynamicLog(PP(ppUrgent, ppTitle, ppLayout,
ppVisible, ppHidden, ppCurrent, ppSep), ppVisible, ppHidden, ppCurrent, ppSep),
Line 42:
Line 47:
focusUp) focusUp)
import XMonad.Layout.Mosaic(Mosaic(..), import XMonad.Layout.Mosaic(Mosaic(..),
- Aspect(Wider, Taller, SlopeMod)) + Aspect(..))
import XMonad.Layout.Named(named) import XMonad.Layout.Named(named)
import XMonad.Layout.NoBorders(Ambiguity(Screen), lessBorders, noBorders) import XMonad.Layout.NoBorders(Ambiguity(Screen), lessBorders, noBorders)
Line 53:
Line 58:
Navigate(Swap, Go), configurableNavigation, navigateColor) Navigate(Swap, Go), configurableNavigation, navigateColor)
import XMonad.Layout.WorkspaceDir(changeDir, workspaceDir) import XMonad.Layout.WorkspaceDir(changeDir, workspaceDir)
- import XMonad.Prompt(defaultXPConfig) + import XMonad.Prompt(XPrompt(..),XPConfig(..),greenXPConfig,mkXPrompt)
import XMonad.Prompt.RunOrRaise(runOrRaisePrompt) import XMonad.Prompt.RunOrRaise(runOrRaisePrompt)
import XMonad.Prompt.Shell(shellPrompt) import XMonad.Prompt.Shell(shellPrompt)
Line 60:
Line 65:
import XMonad.Prompt.Workspace(workspacePrompt) import XMonad.Prompt.Workspace(workspacePrompt)
import XMonad.Prompt.XMonad(xmonadPrompt) import XMonad.Prompt.XMonad(xmonadPrompt)
- import XMonad.Util.EZConfig(additionalKeys)
import XMonad.Util.Run(spawnPipe) import XMonad.Util.Run(spawnPipe)
+
+ import XMonad.Actions.SpawnOn
+
+ -- import XMonad.Layout.Manual
main :: IO () main :: IO ()
main = do main = do
+ sp <- mkSpawner
+ let ?spawner = sp
checkTopicConfig myTopics myTopicConfig checkTopicConfig myTopics myTopicConfig
xmonad . withUrgencyHook NoUrgencyHook . myConfig xmonad . withUrgencyHook NoUrgencyHook . myConfig
Line 70:
Line 80:
=<< getScreens =<< getScreens
- myConfig hs = (\x -> additionalKeys x $ myKeys x) $ defaultConfig + myConfig hs = addDescrKeys ((mod4Mask, xK_d), xMessage) myKeys $ defaultConfig
{ layoutHook = myLayout { layoutHook = myLayout
, focusedBorderColor = "#ff0000" , focusedBorderColor = "#ff0000"
Line 76:
Line 86:
, modMask = mod4Mask , modMask = mod4Mask
, logHook = ewmhDesktopsLogHook >> myLogHook hs , logHook = ewmhDesktopsLogHook >> myLogHook hs
- , startupHook = refresh + , startupHook = refresh -- help avoidStruts
, handleEventHook = ewmhDesktopsEventHook , handleEventHook = ewmhDesktopsEventHook
, workspaces = myTopics , workspaces = myTopics
- , manageHook = manageDocks + , manageHook = composeAll
- <+> (fmap (isInfixOf "Gran Paradiso") className --> doShift "web") + [ manageSpawn ?spawner
+ , manageDocks
+ , fmap (isInfixOf "Gran Paradiso") className --> doShift "web"
+ ]
} }
+ -- where ?spawner = ?spawner
+
+ myXPConfig :: XPConfig
+ myXPConfig = greenXPConfig { font = "xft:Profont:pixelsize=15:autohint=true" }
-------------------- Layout ---------------------------------- -------------------- Layout ----------------------------------
Line 95:
Line 112:
$ layoutHints2 -- unfinished modifications to layoutHints: ask if you want this $ layoutHints2 -- unfinished modifications to layoutHints: ask if you want this
$ Mosaic [5,4,2,1,1,1] $ Mosaic [5,4,2,1,1,1]
+ -- $ manual 0.5
+
-------------------------------------------------------------- --------------------------------------------------------------
-------------------- Keys ------------------------------------ -------------------- Keys ------------------------------------
- myKeys :: XConfig l -> [((KeyMask, KeySym), X ())] + myKeys :: (?spawner::Spawner) =>XConfig t -> [((KeyMask, KeySym), NamedAction)]
myKeys c@(XConfig { modMask = modm }) = myKeys c@(XConfig { modMask = modm }) =
- [((modm, xK_h), sendMessage . SlopeMod $ zipWith (+) (map (/5) [1..])) + [ subtitle "Resizing"
- ,((modm, xK_l), sendMessage . SlopeMod $ (\(x:xs) -> max 1 x:xs) . map (max 0.05) . zipWith subtract (map (/5) [1..])) + ,((modm, xK_h), addName "Shrink" $ sendMessage . SlopeMod $ zipWith (+) (map (/5) [1..]))
- ,((modm .|. shiftMask, xK_h), sendMessage $ SlopeMod init) + ,((modm, xK_l), addName "Expand" $ sendMessage . SlopeMod $ (\(x:xs) -> max 1 x:xs) . map (max 0.05) . zipWith subtract (map (/5) [1..]))
- ,((modm .|. shiftMask, xK_l), sendMessage $ SlopeMod (++[1])) + ,((modm .|. shiftMask, xK_h), addName "Show Less Windows" $ sendMessage $ SlopeMod init)
+ ,((modm .|. shiftMask, xK_l), addName "Show More Windows" $ sendMessage $ SlopeMod (++[1]))
- ,((modm, xK_q), spawn "~/xmonad/xmonad-recomp.lhs && xmonad --restart") + , subtitle "SubLayouts"
+ ,((modm .|. controlMask, xK_o), addName "unmerge the current window"
+ $ withFocused $ sendMessage . UnMerge)
+ ,((modm .|. shiftMask .|. controlMask, xK_o), addName "disband the current group"
+ $ withFocused $ sendMessage . UnMergeAll)
+ ,((modm .|. controlMask, xK_m), addName "make one big group"
+ $ withFocused $ sendMessage . MergeAll)
+ ,((modm .|. controlMask, xK_period), addName "focus down within the group" $ onGroup W.focusDown')
+ ,((modm .|. controlMask, xK_comma), addName "focus up within the group" $ onGroup W.focusUp')
- ,((modm, xK_Tab), switchNthLastFocused myTopicConfig 1) + , subtitle "Mosaic"
+ ,((modm, xK_semicolon), addName "Taller" $ sendMessage Taller)
+ ,((modm, xK_o), addName "Wider" $ sendMessage Wider)
- ,((0, xK_Print), spawn "scrot") + , subtitle "Submaps"
- ,((modm, xK_Return), dwmpromote) + ,((modm, xK_x), submapName $ subMaps)
- ,((modm, xK_a), goToSelected defaultGSConfig) + ,((modm, xK_s), addName "send a normal action to a sublayout" $ submap $ defaultSublMap c)
- -- SubLayouts + , subtitle "Focus"
- ,((modm .|. controlMask, xK_o), withFocused $ sendMessage . UnMerge) + ,((modm .|. shiftMask, xK_Right), addName "slide to the next ws" $ shiftToNext >> nextWS)
- ,((modm .|. shiftMask .|. controlMask, xK_o), withFocused $ sendMessage . UnMergeAll) + ,((modm .|. shiftMask, xK_Left ), addName "slide to the previous ws" $ shiftToPrev >> prevWS)
- ,((modm .|. controlMask, xK_m), withFocused $ sendMessage . MergeAll) + ,((modm, xK_Right ), addName "view next nonempty ws" $ moveTo Next NonEmptyWS)
- ,((modm .|. controlMask, xK_period), onGroup W.focusDown') + ,((modm, xK_Left ), addName "view previous nonempty ws" $ moveTo Prev NonEmptyWS)
- ,((modm .|. controlMask, xK_comma), onGroup W.focusUp') + ,((modm, xK_period), addName "view next nonempty ws" $ moveTo Next NonEmptyWS)
+ ,((modm, xK_comma ), addName "view previous nonempty ws" $ moveTo Prev NonEmptyWS)
+ ,((modm .|. shiftMask, xK_period), addName "focusDown" focusDown)
+ ,((modm .|. shiftMask, xK_comma ), addName "focusUp" focusUp)
- -- Mosaic + , subtitle "TopicSpace"
- ,((modm, xK_semicolon), sendMessage Taller) + ,((modm .|. shiftMask, xK_a), addName "run the topic's action" $ currentTopicAction myTopicConfig)
- ,((modm, xK_o), sendMessage Wider) + ,((modm, xK_a), addName "gridselect a window" $ goToSelected defaultGSConfig)
+ ,((modm, xK_Tab), addName "view the last workspace" $ switchNthLastFocused myTopicConfig 1)
+ ,((modm, xK_g ), addName "go to topic" promptedGoto)
- -- Submaps + , separator
- ,((modm, xK_x), submap . M.fromList $ subMaps) + ,((modm, xK_Return), addName "promote to master" $ dwmpromote)
- ,((modm, xK_s), submap $ defaultSublMap c) + ,((modm .|. shiftMask, xK_Return), addName "terminal" spawnShell)
+ ,((modm .|. shiftMask, xK_g ), addName "shift to topic" promptedShift)
+ ,((modm, xK_q), addName "Recompile XMonad in background" $ spawn "~/.xmonad/xmonad-recomp.lhs && xmonad --restart")
+ ,((modm .|. shiftMask, xK_q), addName "Force recompile XMonad" $ spawn "xmonad --recompile && xmonad --restart")
+ ,((0, xK_Print), addName "screenshot" $ spawn "scrot")
- -- Focus changes
- ,((modm .|. shiftMask, xK_Right), shiftToNext >> nextWS)
- ,((modm .|. shiftMask, xK_Left ), shiftToPrev >> prevWS)
- ,((modm, xK_Right ), moveTo Next NonEmptyWS)
- ,((modm, xK_Left ), moveTo Prev NonEmptyWS)
- ,((modm, xK_period), moveTo Next NonEmptyWS)
- ,((modm, xK_comma ), moveTo Prev NonEmptyWS)
- ,((modm .|. shiftMask, xK_period), focusDown)
- ,((modm .|. shiftMask, xK_comma ), focusUp)
-
- ,((modm .|. shiftMask, xK_Return), spawnShell)
- ,((modm .|. shiftMask, xK_a), currentTopicAction myTopicConfig)
- ,((modm, xK_g ), promptedGoto)
- ,((modm .|. shiftMask, xK_g ), promptedShift)
] ]
- ++ concatMap (\(m,f) -> lrud (modm .|. m) f) + ^++^ [subtitle "WindowNavigation"] ^++^
- [(shiftMask, sendMessage . Swap) + concatMap (\(m,(n,f)) -> lrud (modm .|. m) (\d -> addName (n ++ ' ':show d) $ f d))
- ,(controlMask, sendMessage . pullGroup) + [(shiftMask, ("swap",sendMessage . Swap))
- ,(0, sendMessage . Go) + ,(controlMask, ("pull group",sendMessage . pullGroup))
+ ,(0, ("change focus", sendMessage . Go))
] ]
- ++ mediaKeys + ^++^ [subtitle "Media Keys"] ^++^ mediaKeys
- ++ [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f)) | + ^++^ [subtitle "Workspaces"] ^++^
- (key, sc) <- zip [xK_w, xK_f, xK_p] ([0 .. ]), + [((m .|. modm, key), addName (unwords [d,"workspace",show sc]) $ screenWorkspace sc >>= flip whenJust (windows . f)) |
- (f, m) <- [(W.view, 0), (W.shift, shiftMask)]] + (f, m, d) <- [(W.view, 0, "view"), (W.shift, shiftMask, "shift to")],
- ++ [ ((modm, k), switchNthLastFocused myTopicConfig i) + (key, sc) <- zip [xK_w, xK_f, xK_p] ([0 .. ])]
+ ^++^
+ [ ((modm, k), addName (unwords ["view the last",show i,"topic"]) $ switchNthLastFocused myTopicConfig i)
| (i, k) <- zip [1..] [xK_1 .. xK_9]] | (i, k) <- zip [1..] [xK_1 .. xK_9]]
Line 163:
Line 191:
cmds = zipWith ($) (repeat cmd) [L,R,U,D] cmds = zipWith ($) (repeat cmd) [L,R,U,D]
- subMaps :: [((KeyMask, KeySym), X ())] + subMaps :: (?spawner::Spawner) => [((KeyMask, KeySym), NamedAction)]
- subMaps = [((0, xK_o), runOrRaisePrompt defaultXPConfig), + subMaps = [((0, xK_o), addName "run or raise prompt" $ runOrRaisePrompt myXPConfig),
- ((0, xK_p), shellPrompt defaultXPConfig), + ((0, xK_p), addName "shell prompt" $ shellPrompt myXPConfig),
- ((0, xK_x), xmonadPrompt defaultXPConfig), + ((0, xK_x), addName "xmonad prompt" $ xmonadPrompt myXPConfig),
- ((0, xK_z), sshPrompt defaultXPConfig), + ((0, xK_z), addName "ssh prompt" $ sshPrompt myXPConfig),
- ((shiftMask, xK_w), windowPromptGoto defaultXPConfig), + ((shiftMask, xK_w), addName "window gotoPrompt" $ windowPromptGoto myXPConfig),
- ((0, xK_w), promptSearch defaultXPConfig wikipedia), + ((0, xK_w), addName "search wikipedia" $ promptSearch myXPConfig wikipedia),
- ((0, xK_s), promptSearch defaultXPConfig multi), + ((0, xK_s), addName "search multi" $ promptSearch myXPConfig multi),
- ((0, xK_m), promptSearch defaultXPConfig mathworld), + ((0, xK_m), addName "search mathworld" $ promptSearch myXPConfig mathworld),
- ((0, xK_d), changeDir defaultXPConfig), + ((0, xK_d), addName "change dir" $ changeDir myXPConfig),
- ((0, xK_b), sendMessage ToggleStruts), + ((0, xK_b), sendMessage' ToggleStruts),
- ((0, xK_f), withFocused $ windows . W.sink), ((0, xK_v), refresh), + ((0, xK_f), addName "sink" $ withFocused $ windows . W.sink),
- ((0, xK_c), asks config >>= spawn . terminal), ((0, xK_k), kill) + ((0, xK_v), addName "refresh" refresh),
+ ((0, xK_c), addName "terminal" $ asks config >>= spawnHere ?spawner . terminal),
+ ((0, xK_k), addName "close window" kill)
] ]
- mediaKeys :: [((KeyMask, KeySym), X ())] + mediaKeys :: [((KeyMask, KeySym), NamedAction)]
- mediaKeys = [((0, xF86XK_AudioPlay), spawn "mpc toggle"), + mediaKeys = [((0, xF86XK_AudioPlay), mpcAct "toggle"),
- ((0, xF86XK_AudioStop), spawn "mpc stop"), + ((shiftMask, xF86XK_AudioPlay), addName "HostPrompt" hostPrompt),
- ((0, xF86XK_AudioNext), spawn "mpc next"), + ((0, xF86XK_AudioStop), mpcAct "stop"),
- ((0, xF86XK_AudioPrev), spawn "mpc prev"), + ((0, xF86XK_Forward), mpcAct "next"),
- ((0, xF86XK_AudioMute), spawn "/home/adamvo/bin/ossvol -t"), + ((0, xF86XK_Back), mpcAct "prev"),
- ((shiftMask, xF86XK_AudioMute), spawn "/home/adamvo/bin/speakers.sh"), + ((0, xF86XK_AudioNext), mpcAct "next"),
- ((0, xF86XK_AudioLowerVolume), spawn "/home/adamvo/bin/ossvol -d 1"), + ((0, xF86XK_AudioPrev), mpcAct "prev"),
- ((shiftMask, xF86XK_AudioLowerVolume), spawn "/home/adamvo/bin/ossvol -d 0.1"), + ((0, xF86XK_AudioMute), addName "toggle mute" $ spawn "~/bin/ossvol -t"),
- ((0, xF86XK_AudioRaiseVolume), spawn "/home/adamvo/bin/ossvol -i 1"), + ((shiftMask, xF86XK_AudioMute), addName "toggle external speakers" $ spawn "~/bin/speakers.sh"),
- ((shiftMask, xF86XK_AudioRaiseVolume), spawn "/home/adamvo/bin/ossvol -i 0.1"), + ((0, xF86XK_AudioLowerVolume), spawn' "~/bin/ossvol -d 1"),
- ((0, xF86XK_Sleep), spawn $ "sudo pm-suspend"), + ((shiftMask, xF86XK_AudioLowerVolume), spawn' "~/bin/ossvol -d 0.1"),
- ((shiftMask, xF86XK_Sleep), spawn $ "sudo pm-hibernate")] + ((0, xF86XK_AudioRaiseVolume), spawn' "~/bin/ossvol -i 1"),
+ ((shiftMask, xF86XK_AudioRaiseVolume), spawn' "~/bin/ossvol -i 0.1"),
+ ((0, xF86XK_Sleep), spawn' "sudo pm-suspend"),
+ ((shiftMask, xF86XK_Sleep), spawn' "sudo pm-hibernate")]
+ where mpcAct c = addName ("mpc " ++ c) $ do
+ p <- maybeToList . fmap ("export MPD_HOST=" `wrap` ";") <$> getStringProp "MPD_HOST"
+ spawn . unwords $ p ++ ["mpc",c]
+
+ -- Prompt for host
+ data HostPrompt = HostPrompt
+ instance XPrompt HostPrompt where showXPrompt _ = "Pick MPD Host: "
+ hostPrompt = mkXPrompt HostPrompt myXPConfig (return . compl) (setStringProp "MPD_HOST")
+ where compl s = nub $ filter (s `isPrefixOf`) ["localhost","dell"]
+
-------------------------------------------------------------- --------------------------------------------------------------
Line 231:
Line 274:
xmobarScreen = spawnPipe . ("xmobar -x " ++) . show xmobarScreen = spawnPipe . ("xmobar -x " ++) . show
- myLogHook hs = multiPP' + myLogHook :: (?spawner::Spawner) => [Handle] -> X ()
+ myLogHook = multiPP'
(flip mergePPOutputs [pprWindowSet myTopicConfig,dynamicLogString . onlyTitle]) (flip mergePPOutputs [pprWindowSet myTopicConfig,dynamicLogString . onlyTitle])
myPP { ppTitle = xmobarColor "orange" "" } myPP { ppTitle = xmobarColor "orange" "" }
myPP { ppTitle = const "" } myPP { ppTitle = const "" }
- hs
myPP :: PP myPP :: PP
Line 251:
Line 294:
[ "dashboard" -- the first one [ "dashboard" -- the first one
, "admin", "build", "cleaning", "conf", "darcs", "haskell", "irc" , "admin", "build", "cleaning", "conf", "darcs", "haskell", "irc"
- , "mail", "movie", "music", "talk", "text", "tools", "web", "xmonad" + , "mail", "movie", "music", "talk", "text", "tools", "web"
- , "yi", "documents", "pdf" + , "yi", "documents", "pdf", "xmobar", "xmonad-conf", "xmonad-newconfig", "xmonad-contrib"
+ , "gtk-gnutella"
] ]
- myTopicConfig :: TopicConfig + myTopicConfig :: (?spawner::Spawner) => TopicConfig
myTopicConfig = TopicConfig myTopicConfig = TopicConfig
{ topicDirs = M.fromList $ { topicDirs = M.fromList $
Line 263:
Line 307:
, ("darcs", "wip/dev-haskell/darcs") , ("darcs", "wip/dev-haskell/darcs")
, ("haskell", "haskell") , ("haskell", "haskell")
- , ("xmonad", "wip/x11-wm/xmonad") + , ("xmonad-conf", ".xmonad")
+ , ("xmonad-newconfig", "wip/x11-wm/xmonad/core/xmonad-newconfig")
+ , ("xmonad-contrib", "wip/x11-wm/xmonad/contrib/XMonadContrib/XMonad")
+ , ("xmobar", "wip/x11-wm/xmobar")
, ("tools", "wip/tools") , ("tools", "wip/tools")
, ("movie", "media/movie") , ("movie", "media/movie")
Line 269:
Line 316:
, ("documents", "doc") , ("documents", "doc")
, ("pdf", "ref") , ("pdf", "ref")
+ , ("gtk-gnutella", ".gtk-gnutella-downloads")
] ]
, defaultTopicAction = const $ spawnShell >*> 2 , defaultTopicAction = const $ spawnShell >*> 2
Line 276:
Line 324:
[ ("haskell", spawnShell >*> 2 >> [ ("haskell", spawnShell >*> 2 >>
spawnShellIn "wip/dev-haskell/ghc") spawnShellIn "wip/dev-haskell/ghc")
- , ("xmonad", spawnShellIn "wip/x11-wm/xmonad" >> + , ("xmonad-conf", spawnShellIn ".xmonad/lib/XMonad/Layout" >>
- spawnShellIn "wip/x11-wm/xmonad/contrib" >> + spawn "urxvt -e vim ~/.xmonad/xmonad.hs")
- spawnShellIn "wip/x11-wm/xmonad/utils" >> + , ("xmonad-contrib", spawnShell >*> 2)
- spawnShellIn ".xmonad" >> + , ("xmonad-newconfig", spawn "urxvt -e vim ~/wip/x11-wm/xmonad/core/xmonad-newconfig/XMonad/ConfigMonad.hs")
- spawnShellIn ".xmonad") + , ("xmobar", spawnShellIn "wip/x11-wm/xmobar/Plugins" >*> 2)
, ("music", spawn "urxvt -e ncmpc" >> spawn "urxvt -e ncmpc -h 192.168.1.2") , ("music", spawn "urxvt -e ncmpc" >> spawn "urxvt -e ncmpc -h 192.168.1.2")
- , ("mail", spawn "urxvt -e mutt" >> spawnShell) + , ("mail", spawn "urxvt -e mutt")
, ("irc", spawn "urxvt -e ssh aavogt@engage.uwaterloo.ca") , ("irc", spawn "urxvt -e ssh aavogt@engage.uwaterloo.ca")
, ("dashboard", spawnShell) , ("dashboard", spawnShell)
Line 288:
Line 336:
, ("movie", spawnShell) , ("movie", spawnShell)
, ("pdf", spawn "okular >&| /dev/null") , ("pdf", spawn "okular >&| /dev/null")
+ , ("gtk-gnutella", spawn "gtk-gnutella")
] ]
} }
-- From the sample config in TopicSpace, these should probably be exported from that module -- From the sample config in TopicSpace, these should probably be exported from that module
- spawnShell :: X () + spawnShell :: (?spawner::Spawner) => X ()
spawnShell = currentTopicDir myTopicConfig >>= spawnShellIn spawnShell = currentTopicDir myTopicConfig >>= spawnShellIn
- spawnShellIn :: Dir -> X () + spawnShellIn :: (?spawner::Spawner) => [Char] -> X ()
- spawnShellIn dir = asks (terminal . config) >>= \term -> spawn $ "cd " ++ dir ++ " && " ++ term ++ " " + spawnShellIn dir = asks (terminal . config) >>= \term -> spawnHere ?spawner $ "cd " ++ dir ++ " && " ++ term ++ " "
- goto :: Topic -> X () + goto :: (?spawner::Spawner) => Topic -> X ()
goto = switchTopic myTopicConfig goto = switchTopic myTopicConfig
- promptedGoto :: X () + promptedGoto :: (?spawner::Spawner) => X ()
- promptedGoto = workspacePrompt defaultXPConfig goto + promptedGoto = workspacePrompt myXPConfig goto
- promptedShift :: X () + promptedShift :: X ()
- promptedShift = workspacePrompt defaultXPConfig $ windows . W.shift + promptedShift = workspacePrompt myXPConfig $ windows . W.shift
</haskell> </haskell>