diff options
author | David Roundy <droundy@darcs.net> | 2007-05-12 21:13:15 +0200 |
---|---|---|
committer | David Roundy <droundy@darcs.net> | 2007-05-12 21:13:15 +0200 |
commit | a27649dcabb864253e3496e15a24842a0fcd3b92 (patch) | |
tree | 038ff238e069b9ebd43f3d9daf987cb9ecfb4fde /SwapFocus.hs | |
parent | 7c37e6463f860d01cfb0c12b91e5f2ab1c7589c5 (diff) | |
download | XMonadContrib-a27649dcabb864253e3496e15a24842a0fcd3b92.tar.gz XMonadContrib-a27649dcabb864253e3496e15a24842a0fcd3b92.tar.xz XMonadContrib-a27649dcabb864253e3496e15a24842a0fcd3b92.zip |
add SwapFocus.
darcs-hash:20070512191315-72aca-791c0e5c24b0d5ae0432f76f1e3c5baf8552e882.gz
Diffstat (limited to '')
-rw-r--r-- | SwapFocus.hs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/SwapFocus.hs b/SwapFocus.hs new file mode 100644 index 0000000..339f526 --- /dev/null +++ b/SwapFocus.hs @@ -0,0 +1,30 @@ +module XMonadContrib.SwapFocus ( swapFocus ) where + +-- swaps focus with last-focussed window. + +-- To use: +-- import XMonadContrib.SwapFocus ( swapFocus ) + +-- , ((modMask .|. shiftMask, xK_Tab), swapFocus) + +import Control.Monad.State + +import Operations ( refresh ) +import XMonad ( X, WindowSet, workspace ) +import StackSet ( StackSet, peekStack, popFocus, pushFocus, current ) + +sf :: (Integral i, Integral j, Ord a) => StackSet i j a -> Maybe (StackSet i j a) +sf w = do let i = current w + f1 <- peekStack i w + f2 <- peekStack i $ popFocus i f1 w + return $ pushFocus i f2 $ pushFocus i f1 w + +swapFocus :: X () +swapFocus = smartwindows sf + +-- | smartwindows. Modify the current window list with a pure function, and only refresh if necesary +smartwindows :: (WindowSet -> Maybe WindowSet) -> X () +smartwindows f = do w <- gets workspace + case (f w) of Just f' -> do modify $ \s -> s { workspace = f' } + refresh + Nothing -> return () |