After twm, ion3 I welcome xmonad as my window manager. Unlike Joey Hess, who describes the changing of a window manager as something that changes your way of conceptualising the windows, I have used them all more or less in the same way, with fullscreen windows.
If you want to try out this way: here is my .xmonad/xmonad.hs
. It requires libghc6-xmonad-contrib-dev
.
UPDATE:
import XMonad import XMonad.Hooks.ManageHelpers import XMonad.Actions.CycleWS import qualified XMonad.StackSet as W import qualified Data.Map as M import XMonad.Layout.NoBorders import XMonad.Layout.Grid myKeys conf@(XConfig {modMask = modm}) = M.fromList $ -- Remap switching workspaces to M-[jklnm;uio] [((m .|. modm, k), windows $ f i) | (i, k) <- zip (XMonad.workspaces conf) [xK_j, xK_k, xK_l, xK_f, xK_d, xK_u, xK_i, xK_o] , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)] ] ++ [ -- Restore some essential functions whose keybindings are now stolen ((modm .|. shiftMask, xK_s), windows W.swapMaster) ] ++ [ -- launch dmenu (caps lock "x") as in eXecute ((modm, xK_x ), spawn "exe=`dmenu_path | dmenu` && eval \"exec $exe\"") -- launch a terminal, ssh and screen into , ((modm .|. shiftMask, xK_F1 ), spawn "x-terminal-emulator -e 'ssh -t code.cjb.net screen -D -R'") ] ++ [ -- -- -- a basic CycleWS setup ((modm, xK_Down), nextWS) , ((modm, xK_n ), windows W.focusDown) , ((modm, xK_p ), windows W.focusUp) , ((modm, xK_Up), prevWS) , ((modm .|. shiftMask, xK_Down), shiftToNext) , ((modm .|. shiftMask, xK_Up), shiftToPrev) , ((modm, xK_Right), nextScreen) , ((modm, xK_Left), prevScreen) , ((modm .|. shiftMask, xK_Right), shiftNextScreen) , ((modm .|. shiftMask, xK_Left), shiftPrevScreen) , ((modm, xK_z), toggleWS) ] myManageHook = composeAll [ isKDETrayWindow --> doIgnore -- transience, ,resource =? "stalonetray" --> doIgnore ,isFullscreen --> doFullFloat ,className =? "Iceweasel" --> doF (W.shift "4") ,className =? "Icedove" --> doF (W.shift "3") ,className =? "Emacs" --> doF (W.shift "1") ,className =? "XTerm" --> doF (W.shift "2") ,className =? "Zathura" --> doF (W.shift "7") ,className =? "OpenOffice.org 3.2" --> doF (W.shift "8") ] -- myManageHook = composeOne [ -- isKDETrayWindow -?> doIgnore, -- transience, -- isFullscreen -?> doFullFloat, -- resource =? "stalonetray" -?> doIgnore -- ] newManageHook = myManageHook <+> manageHook defaultConfig myLayout = smartBorders ( Grid ||| Full ) main = xmonad $ defaultConfig { layoutHook = myLayout , borderWidth = 2 , modMask = mod3Mask -- Rebind Mod to Caps lock , normalBorderColor = "#cccccc" , focusedBorderColor = "#cd8b00" , keys = \c -> myKeys c `M.union` keys defaultConfig c , manageHook = newManageHook }