xmonad-vanessa-0.1.0.2: src/XMonad/Util/MediaKeys.hs
-- | Bind media keys using dbus
-- Requires amixer to control volume.
module XMonad.Util.MediaKeys (-- * default keybindings
mediaKeys
-- * media control in the 'X' monad
, audioPrev
, audioNext
, audioPlayPause) where
--gives us media keys
import Graphics.X11.ExtraTypes.XF86
import Graphics.X11.Types
--XMonad stuff
import XMonad.Core
import XMonad.Util.Volume
--monads and all that
import qualified Data.Map as M
import Data.Monoid
-- | Given your keymaps, add the media keybindings
mediaKeys :: M.Map (KeyMask, KeySym) (X ()) -> M.Map (KeyMask, KeySym) (X ())
mediaKeys = M.fromList . ((<>) mediaKeyList) . M.toList
mediaKeyList :: [((KeyMask, KeySym), X ())]
mediaKeyList = [ ((0, xF86XK_AudioNext), audioNext)
, ((0, xF86XK_AudioPrev), audioPrev)
, ((0, xF86XK_AudioPlay), audioPlayPause)
, ((0, xF86XK_AudioMute), toggleMute)
, ((0, xF86XK_AudioLowerVolume), lowerVolume 5) --module elsewhere?
, ((0, xF86XK_AudioRaiseVolume), raiseVolume 5)
]
-- | Helper function for use with dbus
sp :: String -> X ()
sp = spawn . ((<>) "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.")
-- | Action in the 'X' monad to go to next
audioNext = sp "Next"
-- | Action in the 'X' monad to go the previous
audioPrev = sp "Previous"
-- | Action in the 'X' monad to play/pause
audioPlayPause = sp "PlayPause"