diff --git a/home/ui/xmonad/config.hs b/home/ui/xmonad/config.hs index b3c30a7..d609144 100644 --- a/home/ui/xmonad/config.hs +++ b/home/ui/xmonad/config.hs @@ -38,6 +38,7 @@ import XMonad.Layout.LimitWindows (limitWindows) import XMonad.Layout.NoBorders (smartBorders) import XMonad.Layout.Spacing (spacing) import XMonad.Layout.ThreeColumns (ThreeCol (..)) +import XMonad.Prompt (XPConfig, XPType (..), XPrompt (..), mkComplFunFromList', mkXPromptWithModes) import qualified XMonad.StackSet as W import XMonad.Util.EZConfig import XMonad.Util.Run @@ -329,7 +330,8 @@ myKeys conf = ] misc_kb = - [ -- Change volume + [ ("M-o", projectPrompt def), + -- Change volume ("", spawn "amixer -q sset Master toggle"), ("", spawn "amixer -q sset Master 5%+"), ("", spawn "amixer -q sset Master 5%-") @@ -350,3 +352,28 @@ myMouseBindings (XConfig {XMonad.modMask = modm}) = ((modm, button3), \w -> focus w >> mouseResizeWindow w >> windows W.shiftMaster) -- you may also bind events to the mouse scroll wheel (button4 and button5) ] + +------------------------------------------------------------------------ +-- Project +type ProjectName = String + +data Project = Project + { projectName :: !ProjectName, + projectStartHook :: !(Maybe (X ())) + } + +data ProjectPrompt = ProjectPrompt XPConfig [ProjectName] + +instance XPrompt ProjectPrompt where + showXPrompt (ProjectPrompt _ _) = "Choose Project: " + + completionFunction (ProjectPrompt c ns) = mkComplFunFromList' c ns + + modeAction (ProjectPrompt _ _) buf auto = xmessage buf + +projectPrompt :: XPConfig -> X () +projectPrompt c = do + let names = ["hello", "world"] + modes = [XPT $ ProjectPrompt c names] + + mkXPromptWithModes modes c