From e572762b1d3b6e1ddced0fc8523f53da948a6660 Mon Sep 17 00:00:00 2001 From: Miikka Koskinen Date: Tue, 1 May 2007 10:20:31 +0200 Subject: 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 --- DwmPromote.hs | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 DwmPromote.hs (limited to 'DwmPromote.hs') 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 -- cgit v1.2.3