From 5cbe8e9ae3bac65ef607942350c70af6a4226272 Mon Sep 17 00:00:00 2001 From: Spencer Janssen Date: Tue, 22 May 2007 00:00:48 +0200 Subject: Add GreedyView darcs-hash:20070521220048-a5988-59d83b4c6eaae48574264b4320db9a07d3df3208.gz --- GreedyView.hs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 GreedyView.hs (limited to 'GreedyView.hs') diff --git a/GreedyView.hs b/GreedyView.hs new file mode 100644 index 0000000..275f44c --- /dev/null +++ b/GreedyView.hs @@ -0,0 +1,25 @@ +-- greedyView is an alternative to standard workspace switching. When a +-- workspace is already visible on another screen, greedyView swaps the +-- contents of that other screen with the current screen. + +module XMonadContrib.GreedyView (greedyView) where + +import StackSet as W +import XMonad +import Operations +import Data.List (find) + +greedyView :: WorkspaceId -> X () +greedyView = windows . greedyView' + +greedyView' :: WorkspaceId -> WindowSet -> WindowSet +greedyView' w ws + | any wTag (hidden ws) = W.view w ws + | (Just s) <- find (wTag . workspace) (visible ws) = ws { current = setScreen s (screen $ current ws) + , visible = setScreen (current ws) (screen s) + : filter (not . wTag . workspace) (visible ws) + } + | otherwise = ws + where + setScreen s i = s { screen = i } + wTag = (w == ) . tag -- cgit v1.2.3