<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!--Rendered using the Haskell Html Library v0.2--> <HTML ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE >XMonad.Config.Desktop</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ><SCRIPT SRC="haddock-util.js" TYPE="text/javascript" ></SCRIPT ><SCRIPT TYPE="text/javascript" >window.onload = function () {setSynopsis("mini_XMonad-Config-Desktop.html")};</SCRIPT ></HEAD ><BODY ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="topbar" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title" >xmonad-contrib-0.9.1: Third party extensions for xmonad</TD ><TD CLASS="topbut" ><A HREF="src/XMonad-Config-Desktop.html" >Source code</A ></TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A ></TD ><TD CLASS="topbut" ><A HREF="doc-index.html" >Index</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="modulebar" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD ><FONT SIZE="6" >XMonad.Config.Desktop</FONT ></TD ><TD ALIGN="right" ><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="infohead" >Portability</TD ><TD CLASS="infoval" >unportable</TD ></TR ><TR ><TD CLASS="infohead" >Stability</TD ><TD CLASS="infoval" >unstable</TD ></TR ><TR ><TD CLASS="infohead" >Maintainer</TD ><TD CLASS="infoval" >Spencer Janssen <spencerjanssen@gmail.com></TD ></TR ></TABLE ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="section4" ><B >Contents</B ></TD ></TR ><TR ><TD ><DL ><DT ><A HREF="#1" >Usage </A ></DT ><DT ><A HREF="#2" >Customizing a desktop config </A ></DT ><DD ><DL ><DT ><A HREF="#3" >Modifying layouts, manageHook, or key bindings </A ></DT ><DT ><A HREF="#4" >Modifying the logHook </A ></DT ><DT ><A HREF="#5" >Modifying the handleEventHook </A ></DT ><DT ><A HREF="#6" >Modifying the startupHook </A ></DT ></DL ></DD ></DL ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" >Description</TD ></TR ><TR ><TD CLASS="doc" >This module provides a config suitable for use with a desktop environment such as KDE or GNOME. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" >Synopsis</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="#v%3AdesktopConfig" >desktopConfig</A > :: <A HREF="/usr/share/doc/ghc/html/libraries/xmonad-0.9.1/XMonad-Core.html#t%3AXConfig" >XConfig</A > (<A HREF="XMonad-Layout-LayoutModifier.html#t%3AModifiedLayout" >ModifiedLayout</A > <A HREF="XMonad-Hooks-ManageDocks.html#t%3AAvoidStruts" >AvoidStruts</A > (<A HREF="/usr/share/doc/ghc/html/libraries/xmonad-0.9.1/XMonad-Layout.html#t%3AChoose" >Choose</A > <A HREF="/usr/share/doc/ghc/html/libraries/xmonad-0.9.1/XMonad-Layout.html#t%3ATall" >Tall</A > (<A HREF="/usr/share/doc/ghc/html/libraries/xmonad-0.9.1/XMonad-Layout.html#t%3AChoose" >Choose</A > (<A HREF="/usr/share/doc/ghc/html/libraries/xmonad-0.9.1/XMonad-Layout.html#t%3AMirror" >Mirror</A > <A HREF="/usr/share/doc/ghc/html/libraries/xmonad-0.9.1/XMonad-Layout.html#t%3ATall" >Tall</A >) <A HREF="/usr/share/doc/ghc/html/libraries/xmonad-0.9.1/XMonad-Layout.html#t%3AFull" >Full</A >)))</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AdesktopLayoutModifiers" >desktopLayoutModifiers</A > :: <A HREF="/usr/share/doc/ghc/html/libraries/xmonad-0.9.1/XMonad-Core.html#t%3ALayoutClass" >LayoutClass</A > l a => l a -> <A HREF="XMonad-Layout-LayoutModifier.html#t%3AModifiedLayout" >ModifiedLayout</A > <A HREF="XMonad-Hooks-ManageDocks.html#t%3AAvoidStruts" >AvoidStruts</A > l a</TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" >Documentation</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="doc" ><P >Several basic integration settings are common to all of xmonad's desktop integration configurations. The specific desktop environment (DE) modules like <A HREF="XMonad-Config-Gnome.html" >XMonad.Config.Gnome</A > use this module's <TT >desktopConfig</TT > 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 <TT >desktopConfig</TT > fields in the same way that <TT >defaultConfig</TT > is customized in <TT >~/.xmonad/xmonad.hs</TT >. </P ><P >For more information about EWMH see: </P ><P ><A HREF="http://standards.freedesktop.org/wm-spec/wm-spec-latest.html" >http://standards.freedesktop.org/wm-spec/wm-spec-latest.html</A > </P ><P >See also: <A HREF="XMonad-Hooks-EwmhDesktops.html" >XMonad.Hooks.EwmhDesktops</A >, <A HREF="XMonad-Hooks-ManageDocks.html" >XMonad.Hooks.ManageDocks</A >, <A HREF="XMonad-Util-EZConfig.html" >XMonad.Util.EZConfig</A >. </P ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="1" ><A NAME="1" >Usage </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="doc" ><P >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: </P ><P ><A HREF="http://haskell.org/haskellwiki/Xmonad" >http://haskell.org/haskellwiki/Xmonad</A > </P ><P >To configure xmonad for use with a DE or with DE tools like panels and pagers, in place of <TT >defaultConfig</TT > in your <TT >~/.xmonad/xmonad.hs</TT >, use <TT >desktopConfig</TT > or one of the other desktop configs from the <TT >XMonad.Config</TT > namespace. The following setup and customization examples work the same way for the other desktop configs as for <TT >desktopConfig</TT >. If you are using a specific DE config, import its module instead, and use its config in place of <TT >desktopConfig</TT > in the following examples. </P ><PRE > import XMonad import XMonad.Config.Desktop main = xmonad desktopConfig </PRE ><P ><TT >desktopConfig</TT > is an <TT ><A HREF="/usr/share/doc/ghc/html/libraries/xmonad-0.9.1/XMonad-Core.html#t%3AXConfig" >XConfig</A ></TT > 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. </P ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:desktopConfig" ><A NAME="v%3AdesktopConfig" ></A ></A ><B >desktopConfig</B > :: <A HREF="/usr/share/doc/ghc/html/libraries/xmonad-0.9.1/XMonad-Core.html#t%3AXConfig" >XConfig</A > (<A HREF="XMonad-Layout-LayoutModifier.html#t%3AModifiedLayout" >ModifiedLayout</A > <A HREF="XMonad-Hooks-ManageDocks.html#t%3AAvoidStruts" >AvoidStruts</A > (<A HREF="/usr/share/doc/ghc/html/libraries/xmonad-0.9.1/XMonad-Layout.html#t%3AChoose" >Choose</A > <A HREF="/usr/share/doc/ghc/html/libraries/xmonad-0.9.1/XMonad-Layout.html#t%3ATall" >Tall</A > (<A HREF="/usr/share/doc/ghc/html/libraries/xmonad-0.9.1/XMonad-Layout.html#t%3AChoose" >Choose</A > (<A HREF="/usr/share/doc/ghc/html/libraries/xmonad-0.9.1/XMonad-Layout.html#t%3AMirror" >Mirror</A > <A HREF="/usr/share/doc/ghc/html/libraries/xmonad-0.9.1/XMonad-Layout.html#t%3ATall" >Tall</A >) <A HREF="/usr/share/doc/ghc/html/libraries/xmonad-0.9.1/XMonad-Layout.html#t%3AFull" >Full</A >)))</TD ><TD CLASS="declbut" ><A HREF="src/XMonad-Config-Desktop.html#desktopConfig" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="2" ><A NAME="2" >Customizing a desktop config </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="doc" >To customize a desktop config, modify its fields as is illustrated with <TT >defaultConfig</TT > in <A HREF="XMonad-Doc-Extending.html#Extending xmonad" >XMonad.Doc.Extending</A >. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="3" ><A NAME="3" >Modifying layouts, manageHook, or key bindings </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="doc" ><P >See also <A HREF="XMonad-Util-EZConfig.html" >XMonad.Util.EZConfig</A > 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: </P ><PRE > 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") ] </PRE ><P >To replace the desktop layouts with your own choices, but still allow toggling panel visibility, use <TT ><A HREF="XMonad-Config-Desktop.html#v%3AdesktopLayoutModifiers" >desktopLayoutModifiers</A ></TT > to modify your layouts: </P ><PRE > , layoutHook = desktopLayoutModifiers $ simpleTabbed ||| Tall 1 0.03 0.5 </PRE ><P ><TT >desktopLayoutModifiers</TT > modifies a layout to avoid covering docks, panels, etc. that set the <TT >_NET_WM_STRUT_PARTIAL</TT > property. See also <A HREF="XMonad-Hooks-ManageDocks.html" >XMonad.Hooks.ManageDocks</A >. </P ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:desktopLayoutModifiers" ><A NAME="v%3AdesktopLayoutModifiers" ></A ></A ><B >desktopLayoutModifiers</B > :: <A HREF="/usr/share/doc/ghc/html/libraries/xmonad-0.9.1/XMonad-Core.html#t%3ALayoutClass" >LayoutClass</A > l a => l a -> <A HREF="XMonad-Layout-LayoutModifier.html#t%3AModifiedLayout" >ModifiedLayout</A > <A HREF="XMonad-Hooks-ManageDocks.html#t%3AAvoidStruts" >AvoidStruts</A > l a</TD ><TD CLASS="declbut" ><A HREF="src/XMonad-Config-Desktop.html#desktopLayoutModifiers" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="4" ><A NAME="4" >Modifying the logHook </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="doc" ><P >To add to the logHook while still sending workspace and window information to DE apps use something like: </P ><PRE > , logHook = myLogHook >> logHook desktopConfig </PRE ><P >Or for more elaborate logHooks you can use <TT >do</TT >: </P ><PRE > , logHook = do dynamicLogWithPP xmobarPP updatePointer (Relative 0.9 0.9) logHook desktopConfig </PRE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="5" ><A NAME="5" >Modifying the handleEventHook </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="doc" ><P >To customize xmonad's event handling while still having it respond to EWMH events from pagers, task bars, etc. add to your imports: </P ><PRE > import Data.Monoid </PRE ><P >and use Data.Monoid.mappend to combine event hooks (right to left application like <TT ><+></TT >) </P ><PRE > , handleEventHook = mappend myEventHooks (handleEventHook desktopConfig) </PRE ><P >or Data.Monoid.mconcat (like <TT >composeAll</TT >) </P ><PRE > , handleEventHook = mconcat [ myMouseHandler , myMessageHandler , handleEventHook desktopConfig ] </PRE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="6" ><A NAME="6" >Modifying the startupHook </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="doc" ><P >To run the desktop startupHook, plus add further actions to be run each time xmonad starts or restarts, use <TT ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Control-Monad.html#v%3A%3E%3E" >>></A ></TT > to combine actions as in the logHook example, or something like: </P ><PRE > , startupHook = do startupHook desktopConfig spawn "xmonad-restart.sh" adjustEventInput </PRE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="botbar" >Produced by <A HREF="http://www.haskell.org/haddock/" >Haddock</A > version 2.6.1</TD ></TR ></TABLE ></BODY ></HTML >