aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWirt Wolff <wirtwolff@gmail.com>2009-10-22 06:27:48 +0200
committerWirt Wolff <wirtwolff@gmail.com>2009-10-22 06:27:48 +0200
commit14c7b7c5149909b90a10fdaf86d561fa7f736a8f (patch)
tree9a38635f7f97454dbd1244d37a09da0be73ec222
parent7141da81104fae9e1892f580192a44713d52efe5 (diff)
downloadXMonadContrib-14c7b7c5149909b90a10fdaf86d561fa7f736a8f.tar.gz
XMonadContrib-14c7b7c5149909b90a10fdaf86d561fa7f736a8f.tar.xz
XMonadContrib-14c7b7c5149909b90a10fdaf86d561fa7f736a8f.zip
C.Desktop doc explaining common desktop config customizations
Ignore-this: 83d1f026ae4f4b7f5796269b51e98349 To close http://code.google.com/p/xmonad/issues/detail?id4 darcs-hash:20091022042748-18562-1ba7b4393b64cd6c0393f5472a023fd4bfff197e.gz
-rw-r--r--XMonad/Config/Desktop.hs143
-rw-r--r--XMonad/Config/Gnome.hs2
-rw-r--r--XMonad/Config/Kde.hs2
-rw-r--r--XMonad/Config/Xfce.hs3
4 files changed, 148 insertions, 2 deletions
diff --git a/XMonad/Config/Desktop.hs b/XMonad/Config/Desktop.hs
index 2831913..439a057 100644
--- a/XMonad/Config/Desktop.hs
+++ b/XMonad/Config/Desktop.hs
@@ -12,10 +12,45 @@
--
-- This module provides a config suitable for use with a desktop
-- environment such as KDE or GNOME.
-
+-----------------------------------------------------------------------------
module XMonad.Config.Desktop (
+
+ -- | Several basic integration settings are common to all of xmonad\'s
+ -- desktop integration configurations. The specific desktop environment
+ -- (DE) modules like "XMonad.Config.Gnome" use this module\'s
+ -- @desktopConfig@ to set up basic communication between xmonad and
+ -- the DE via a subset of the Extended Window Manager Hints (EWMH)
+ -- specification. Extra xmonad settings unique to specific DE\'s are
+ -- added by overriding or modifying @desktopConfig@ fields in the
+ -- same way that @defaultConfig@ is customized in @~/.xmonad/xmonad.hs@.
+ --
+ -- For more information about EWMH see:
+ --
+ -- <http://standards.freedesktop.org/wm-spec/wm-spec-latest.html>
+ --
+ -- See also: "XMonad.Hooks.EwmhDesktops", "XMonad.Hooks.ManageDocks",
+ -- "XMonad.Util.EZConfig".
+
+ -- * Usage
+ -- $usage
+
desktopConfig,
+
+ -- * Customizing a desktop config
+ -- $customizing
+
+ -- ** Modifying layouts, manageHook, or key bindings
+ -- $layouts
desktopLayoutModifiers
+
+ -- ** Modifying the logHook
+ -- $logHook
+
+ -- ** Modifying the handleEventHook
+ -- $eventHook
+
+ -- ** Modifying the startupHook
+ -- $startupHook
) where
import XMonad
@@ -26,6 +61,111 @@ import XMonad.Util.Cursor
import qualified Data.Map as M
+-- $usage
+-- While this document describes how to configure xmonad, you also need
+-- to set up your Desktop Environment (DE) and display manager to use
+-- xmonad as its window manager. For DE and distro specific tips on
+-- how to do so, see the xmonad wiki:
+--
+-- <http://haskell.org/haskellwiki/Xmonad>
+--
+-- To configure xmonad for use with a DE or with DE tools like panels
+-- and pagers, in place of @defaultConfig@ in your @~/.xmonad/xmonad.hs@,
+-- use @desktopConfig@ or one of the other desktop configs from the
+-- @XMonad.Config@ hierarchy. The following setup and customization examples
+-- work the same way for the other desktop configs as for @desktopConfig@.
+-- If you are using a specific DE config, import its module instead, and
+-- use its config in place of @desktopConfig@ in the following examples.
+--
+-- > import XMonad
+-- > import XMonad.Config.Desktop
+-- >
+-- > main = xmonad desktopConfig
+--
+-- @desktopConfig@ is an 'XConfig' that configures xmonad to
+-- ignore and leave room for dock type windows like panels and trays, adds
+-- the default key binding to toggle panel visibility, and activates basic
+-- EWMH support. It also sets a prettier root window mouse pointer.
+
+-- $customizing
+-- To customize a desktop config, modify its fields as is illustrated with
+-- @defaultConfig@ in the \"Extending xmonad\" section of "XMonad.Doc.Extending".
+
+-- $layouts
+-- See also "XMonad.Util.EZConfig" for more options for modifying key bindings.
+-- To add to layouts, manageHook or key bindings use something like the following
+-- to combine your modifications with the desktop config settings:
+--
+-- > import XMonad
+-- > import XMonad.Config.Desktop
+-- > import XMonad.Layout.Tabbed
+-- > import XMonad.Util.EZConfig (additionalKeys)
+-- >
+-- > main =
+-- > xmonad $ desktopConfig {
+-- > -- add manage hooks while still ignoring panels and using default manageHooks
+-- > manageHook = myManageHook <+> manageHook desktopConfig
+-- >
+-- > -- add a fullscreen tabbed layout that does not avoid covering
+-- > -- up desktop panels before the desktop layouts
+-- > , layoutHook = simpleTabbed ||| layoutHook desktopConfig
+-- > }
+-- > -- add a screenshot key to the default desktop bindings
+-- > `additionalKeys` [ ((mod4Mask, xK_F8), spawn "scrot") ]
+--
+-- To replace the desktop layouts with your own choices, but still
+-- allow toggling panel visibility, use 'desktopLayoutModifiers' to
+-- modify your layouts:
+--
+-- > , layoutHook = desktopLayoutModifiers $ simpleTabbed ||| Tall 1 0.03 0.5
+--
+-- @desktopLayoutModifiers@ modifies a layout to avoid covering docks, panels,
+-- etc. that set the @_NET_WM_STRUT_PARTIAL@ property.
+-- See also "XMonad.Hooks.ManageDocks".
+
+-- $logHook
+-- To add to the logHook while still sending workspace and window information
+-- to DE apps use something like:
+--
+-- > , logHook = myLogHook >> logHook desktopConfig
+--
+-- Or for more elaborate logHooks you can use @do@:
+--
+-- > , logHook = do
+-- > dynamicLogWithPP xmobarPP
+-- > updatePointer (Relative 0.9 0.9)
+-- > logHook desktopConfig
+--
+
+-- $eventHook
+-- To customize xmonad\'s event handling while still having it respond
+-- to EWMH events from pagers, task bars, etc. add to your imports:
+--
+-- > import Data.Monoid
+--
+-- and use 'Data.Monoid.mappend' to combine event hooks (right to left application like @\<+\>@)
+--
+-- > , handleEventHook = mappend myEventHooks (handleEventHook desktopConfig)
+--
+-- or 'Data.Monoid.mconcat' (like @composeAll@)
+--
+-- > , handleEventHook = mconcat
+-- > [ myMouseHandler
+-- > , myMessageHandler
+-- > , handleEventHook desktopConfig ]
+--
+
+-- $startupHook
+-- To run the desktop startupHook, plus add further actions to be run each
+-- time xmonad starts or restarts, use '>>' to combine actions as in the
+-- logHook example, or something like:
+--
+-- > , startupHook = do
+-- > startupHook desktopConfig
+-- > spawn "xmonad-restart.sh"
+-- > adjustEvenInput
+--
+
desktopConfig = defaultConfig
{ logHook = ewmhDesktopsLogHook
, layoutHook = desktopLayoutModifiers $ layoutHook defaultConfig
@@ -38,3 +178,4 @@ desktopKeys (XConfig {modMask = modm}) = M.fromList $
[ ((modm, xK_b), sendMessage ToggleStruts) ]
desktopLayoutModifiers layout = avoidStruts layout
+
diff --git a/XMonad/Config/Gnome.hs b/XMonad/Config/Gnome.hs
index 67c1537..8fa6b36 100644
--- a/XMonad/Config/Gnome.hs
+++ b/XMonad/Config/Gnome.hs
@@ -36,6 +36,8 @@ import System.Environment (getEnvironment)
-- > import XMonad.Config.Gnome
-- >
-- > main = xmonad gnomeConfig
+--
+-- For examples of how to further customize @gnomeConfig@ see "XMonad.Config.Desktop".
gnomeConfig = desktopConfig
{ terminal = "gnome-terminal"
diff --git a/XMonad/Config/Kde.hs b/XMonad/Config/Kde.hs
index fca9f83..33daf65 100644
--- a/XMonad/Config/Kde.hs
+++ b/XMonad/Config/Kde.hs
@@ -35,6 +35,8 @@ import qualified Data.Map as M
--
-- For KDE 4, replace 'kdeConfig' with 'kde4Config'
--
+-- For examples of how to further customize @kdeConfig@ see "XMonad.Config.Desktop".
+
kdeConfig = desktopConfig
{ terminal = "konsole"
diff --git a/XMonad/Config/Xfce.hs b/XMonad/Config/Xfce.hs
index d3fb53e..6b2bd55 100644
--- a/XMonad/Config/Xfce.hs
+++ b/XMonad/Config/Xfce.hs
@@ -6,7 +6,7 @@
-- Copyright : (c) Ivan Miljenovic <Ivan.Miljenovic@gmail.com>
-- License : BSD
--
--- Maintainer : Ivan Miljenovic <Ivan.Miljenovic@gmail.com>
+-- Maintainer : none
-- Stability : unstable
-- Portability : unportable
--
@@ -32,6 +32,7 @@ import qualified Data.Map as M
-- >
-- > main = xmonad xfceConfig
--
+-- For examples of how to further customize @xfceConfig@ see "XMonad.Config.Desktop".
xfceConfig = desktopConfig
{ terminal = "Terminal"