diff options
author | Miikka Koskinen <arcatan@kapsi.fi> | 2007-05-01 10:20:31 +0200 |
---|---|---|
committer | Miikka Koskinen <arcatan@kapsi.fi> | 2007-05-01 10:20:31 +0200 |
commit | e572762b1d3b6e1ddced0fc8523f53da948a6660 (patch) | |
tree | cc591588d05df6d609d9ef71a04d57c99b69ac5e | |
parent | 42c4186a49ba785deac816a4d69f397d78ab3d90 (diff) | |
download | XMonadContrib-e572762b1d3b6e1ddced0fc8523f53da948a6660.tar.gz XMonadContrib-e572762b1d3b6e1ddced0fc8523f53da948a6660.tar.xz XMonadContrib-e572762b1d3b6e1ddced0fc8523f53da948a6660.zip |
XMonadContrib.DwmPromote: dwm-like promote
I like the way dwm's equivalent to xmonad's promote works, so I
implemented dwmpromote.
darcs-hash:20070501082031-0ff8e-55a153d752dafb238c0e1f51f4484ec5435af430.gz
-rw-r--r-- | DwmPromote.hs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/DwmPromote.hs b/DwmPromote.hs new file mode 100644 index 0000000..7792fdd --- /dev/null +++ b/DwmPromote.hs @@ -0,0 +1,46 @@ +----------------------------------------------------------------------------- +-- | +-- Module : XMonadContrib.DwmPromote +-- Copyright : (c) Miikka Koskinen 2007 +-- License : BSD3-style (see LICENSE) +-- +-- Maintainer : arcatan@kapsi.fi +-- +----------------------------------------------------------------------------- +-- +-- Dwm-like promote function for xmonad. +-- +-- Swaps focused window with the master window. If focus is in the +-- master, swap it with the next window in the stack. Focus stays in the +-- master. +-- +-- To use, modify your Config.hs to: +-- +-- import XMonadContrib.DwmPromote +-- +-- and add a keybinding or substitute promote with dwmpromote: +-- +-- , ((modMask, xK_Return), dwmpromote) +-- + +module XMonadContrib.DwmPromote (dwmpromote) where + +import XMonad +import Operations (windows) +import StackSet hiding (promote) +import qualified Data.Map as M + +dwmpromote :: X () +dwmpromote = windows promote + +promote :: (Integral i, Ord a) => StackSet i j a -> StackSet i j a +promote w = maybe w id $ do + a <- peek w -- fail if null + let stack = index (current w) w + let newstack = swap a (next stack a) stack + return $ w { stacks = M.insert (current w) newstack (stacks w), + focus = M.insert (current w) (head newstack) (focus w) } + where + next s a | head s /= a = head s -- focused is not master + | length s > 1 = s !! 1 + | otherwise = a |