From e41a6f2c909bce695a3127d37de0044ab0b6fbcb Mon Sep 17 00:00:00 2001 From: "allbery.b" Date: Sun, 3 Aug 2014 04:06:59 +0200 Subject: config-mate Ignore-this: d5de258c0a28cd5ba64a59cf37cd480a Initial support for the Mate desktop environment (http://mate-desktop.org). Based on existing Gnome 2 support, since Mate is a maintained fork of Gnome 2. darcs-hash:20140803020659-181ff-928c8525cae12676dc77ca7cb299f86421969a40.gz --- XMonad/Config/Mate.hs | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 XMonad/Config/Mate.hs (limited to 'XMonad/Config/Mate.hs') diff --git a/XMonad/Config/Mate.hs b/XMonad/Config/Mate.hs new file mode 100644 index 0000000..153b259 --- /dev/null +++ b/XMonad/Config/Mate.hs @@ -0,0 +1,85 @@ +{-# OPTIONS_GHC -fno-warn-missing-signatures #-} + +----------------------------------------------------------------------------- +-- | +-- Module : XMonad.Config.Mate +-- Copyright : (c) Brandon S Allbery KF8NH, 2014 +-- License : BSD +-- +-- Maintainer : allbery.b@gmail.com +-- Stability : unstable +-- Portability : unportable +-- +-- This module provides a config suitable for use with the MATE desktop +-- environment. +-- +----------------------------------------------------------------------------- + +module XMonad.Config.Mate ( + -- * Usage + -- $usage + mateConfig, + mateRun, + mateRegister + ) where + +import XMonad +import XMonad.Config.Desktop +import XMonad.Util.Run (safeSpawn) + +import qualified Data.Map as M + +import System.Environment (getEnvironment) + +-- $usage +-- To use this module, start with the following @~\/.xmonad\/xmonad.hs@: +-- +-- > import XMonad +-- > import XMonad.Config.Mate +-- > +-- > main = xmonad gnomeConfig +-- +-- For examples of how to further customize @gnomeConfig@ see "XMonad.Config.Desktop". + +mateConfig = desktopConfig + { terminal = "mate-terminal" + , keys = mateKeys <+> keys desktopConfig + , startupHook = mateRegister >> startupHook desktopConfig } + +mateKeys (XConfig {modMask = modm}) = M.fromList $ + [ ((modm, xK_p), mateRun) + , ((modm .|. shiftMask, xK_q), spawn "mate-session-save --logout-dialog") ] + +-- | Launch the "Run Application" dialog. gnome-panel must be running for this +-- to work. +mateRun :: X () +mateRun = withDisplay $ \dpy -> do + rw <- asks theRoot + mate_panel <- getAtom "_MATE_PANEL_ACTION" + panel_run <- getAtom "_MATE_PANEL_ACTION_RUN_DIALOG" + + io $ allocaXEvent $ \e -> do + setEventType e clientMessage + setClientMessageEvent e rw mate_panel 32 panel_run 0 + sendEvent dpy rw False structureNotifyMask e + sync dpy False + +-- | Register xmonad with mate. 'dbus-send' must be in the $PATH with which +-- xmonad is started. +-- +-- This action reduces a delay on startup only only if you have configured +-- mate-session to start xmonad with a command such as (check local +-- documentation): +-- +-- > gconftool-2 -s /desktop/gnome/session/required_components/windowmanager xmonad --type string +mateRegister :: MonadIO m => m () +mateRegister = io $ do + x <- lookup "DESKTOP_AUTOSTART_ID" `fmap` getEnvironment + whenJust x $ \sessionId -> safeSpawn "dbus-send" + ["--session" + ,"--print-reply=literal" + ,"--dest=org.mate.SessionManager" + ,"/org/mate/SessionManager" + ,"org.mate.SessionManager.RegisterClient" + ,"string:xmonad" + ,"string:"++sessionId] -- cgit v1.2.3