home/xmonad: initial structure for project plugin

This commit is contained in:
Dmitriy Pleshevskiy 2022-09-11 00:56:27 +03:00
parent 74a45f8864
commit a662801c95
Signed by: pleshevskiy
GPG key ID: 1B59187B161C0215

View file

@ -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
("<XF86AudioMute>", spawn "amixer -q sset Master toggle"),
("<XF86AudioRaiseVolume>", spawn "amixer -q sset Master 5%+"),
("<XF86AudioLowerVolume>", 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