mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-08-21 23:13:48 -07:00
Merge pull request #378 from ivanbrennan/boring-swaps
BoringWindows: swapUp, swapDown
This commit is contained in:
@@ -70,6 +70,10 @@
|
|||||||
|
|
||||||
### Bug Fixes and Minor Changes
|
### Bug Fixes and Minor Changes
|
||||||
|
|
||||||
|
* `XMonad.Layout.BoringWindows`
|
||||||
|
|
||||||
|
Added boring-aware `swapUp` and `swapDown` functions.
|
||||||
|
|
||||||
* `XMonad.Util.NamedScratchpad`
|
* `XMonad.Util.NamedScratchpad`
|
||||||
|
|
||||||
Added two new exported functions to the module:
|
Added two new exported functions to the module:
|
||||||
|
@@ -20,7 +20,7 @@ module XMonad.Layout.BoringWindows (
|
|||||||
boringWindows, boringAuto,
|
boringWindows, boringAuto,
|
||||||
markBoring, markBoringEverywhere,
|
markBoring, markBoringEverywhere,
|
||||||
clearBoring, focusUp, focusDown,
|
clearBoring, focusUp, focusDown,
|
||||||
focusMaster,
|
focusMaster, swapUp, swapDown,
|
||||||
|
|
||||||
UpdateBoring(UpdateBoring),
|
UpdateBoring(UpdateBoring),
|
||||||
BoringMessage(Replace,Merge),
|
BoringMessage(Replace,Merge),
|
||||||
@@ -65,6 +65,8 @@ import qualified XMonad.StackSet as W
|
|||||||
data BoringMessage = FocusUp | FocusDown | FocusMaster | IsBoring Window | ClearBoring
|
data BoringMessage = FocusUp | FocusDown | FocusMaster | IsBoring Window | ClearBoring
|
||||||
| Replace String [Window]
|
| Replace String [Window]
|
||||||
| Merge String [Window]
|
| Merge String [Window]
|
||||||
|
| SwapUp
|
||||||
|
| SwapDown
|
||||||
deriving ( Read, Show, Typeable )
|
deriving ( Read, Show, Typeable )
|
||||||
|
|
||||||
instance Message BoringMessage
|
instance Message BoringMessage
|
||||||
@@ -75,12 +77,14 @@ data UpdateBoring = UpdateBoring
|
|||||||
deriving (Typeable)
|
deriving (Typeable)
|
||||||
instance Message UpdateBoring
|
instance Message UpdateBoring
|
||||||
|
|
||||||
markBoring, clearBoring, focusUp, focusDown, focusMaster :: X ()
|
markBoring, clearBoring, focusUp, focusDown, focusMaster, swapUp, swapDown :: X ()
|
||||||
markBoring = withFocused (sendMessage . IsBoring)
|
markBoring = withFocused (sendMessage . IsBoring)
|
||||||
clearBoring = sendMessage ClearBoring
|
clearBoring = sendMessage ClearBoring
|
||||||
focusUp = sendMessage UpdateBoring >> sendMessage FocusUp
|
focusUp = sendMessage UpdateBoring >> sendMessage FocusUp
|
||||||
focusDown = sendMessage UpdateBoring >> sendMessage FocusDown
|
focusDown = sendMessage UpdateBoring >> sendMessage FocusDown
|
||||||
focusMaster = sendMessage UpdateBoring >> sendMessage FocusMaster
|
focusMaster = sendMessage UpdateBoring >> sendMessage FocusMaster
|
||||||
|
swapUp = sendMessage UpdateBoring >> sendMessage SwapUp
|
||||||
|
swapDown = sendMessage UpdateBoring >> sendMessage SwapDown
|
||||||
|
|
||||||
-- | Mark current focused window boring for all layouts.
|
-- | Mark current focused window boring for all layouts.
|
||||||
-- This is useful in combination with the 'XMonad.Actions.CopyWindow' module.
|
-- This is useful in combination with the 'XMonad.Actions.CopyWindow' module.
|
||||||
@@ -130,12 +134,24 @@ instance LayoutModifier BoringWindows Window where
|
|||||||
. skipBoring W.focusUp' -- no boring window gets the focus
|
. skipBoring W.focusUp' -- no boring window gets the focus
|
||||||
. focusMaster'
|
. focusMaster'
|
||||||
return Nothing
|
return Nothing
|
||||||
where skipBoring f st = fromMaybe st $ listToMaybe
|
| Just SwapUp <- fromMessage m =
|
||||||
$ filter ((`notElem` W.focus st:bs) . W.focus)
|
do windows $ W.modify' skipBoringSwapUp
|
||||||
|
return Nothing
|
||||||
|
| Just SwapDown <- fromMessage m =
|
||||||
|
do windows $ W.modify' (reverseStack . skipBoringSwapUp . reverseStack)
|
||||||
|
return Nothing
|
||||||
|
where skipBoring = skipBoring' ((`notElem` bs) . W.focus)
|
||||||
|
skipBoringSwapUp = skipBoring'
|
||||||
|
(maybe True (`notElem` bs) . listToMaybe . W.down)
|
||||||
|
swapUp'
|
||||||
|
skipBoring' p f st = fromMaybe st $ listToMaybe
|
||||||
|
$ filter p
|
||||||
|
$ drop 1
|
||||||
$ take (length $ W.integrate st)
|
$ take (length $ W.integrate st)
|
||||||
$ iterate f st
|
$ iterate f st
|
||||||
bs = concat $ cbs:maybeToList lbs ++ M.elems nbs
|
bs = concat $ cbs:maybeToList lbs ++ M.elems nbs
|
||||||
rjl = return . Just . Left
|
rjl = return . Just . Left
|
||||||
|
reverseStack (W.Stack t ls rs) = W.Stack t rs ls
|
||||||
handleMessOrMaybeModifyIt _ _ = return Nothing
|
handleMessOrMaybeModifyIt _ _ = return Nothing
|
||||||
|
|
||||||
-- | Variant of 'focusMaster' that works on a
|
-- | Variant of 'focusMaster' that works on a
|
||||||
@@ -144,6 +160,10 @@ focusMaster' :: W.Stack a -> W.Stack a
|
|||||||
focusMaster' c@(W.Stack _ [] _) = c
|
focusMaster' c@(W.Stack _ [] _) = c
|
||||||
focusMaster' (W.Stack t ls rs) = W.Stack x [] (xs ++ t : rs) where (x:xs) = reverse ls
|
focusMaster' (W.Stack t ls rs) = W.Stack x [] (xs ++ t : rs) where (x:xs) = reverse ls
|
||||||
|
|
||||||
|
swapUp' :: W.Stack a -> W.Stack a
|
||||||
|
swapUp' (W.Stack t (l:ls) rs) = W.Stack t ls (l:rs)
|
||||||
|
swapUp' (W.Stack t [] rs) = W.Stack t (reverse rs) []
|
||||||
|
|
||||||
{- $simplest
|
{- $simplest
|
||||||
|
|
||||||
An alternative to 'Full' is "XMonad.Layout.Simplest". Less windows are
|
An alternative to 'Full' is "XMonad.Layout.Simplest". Less windows are
|
||||||
|
Reference in New Issue
Block a user