mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 11:30:22 -07:00
Added focusMaster to BoringWindows
This commit is contained in:
parent
ca29a33f56
commit
41a53e7d15
@ -19,7 +19,7 @@ module XMonad.Layout.BoringWindows (
|
|||||||
-- $usage
|
-- $usage
|
||||||
boringWindows, boringAuto,
|
boringWindows, boringAuto,
|
||||||
markBoring, clearBoring,
|
markBoring, clearBoring,
|
||||||
focusUp, focusDown,
|
focusUp, focusDown, focusMaster,
|
||||||
|
|
||||||
UpdateBoring(UpdateBoring),
|
UpdateBoring(UpdateBoring),
|
||||||
BoringMessage(Replace,Merge),
|
BoringMessage(Replace,Merge),
|
||||||
@ -52,14 +52,15 @@ import qualified XMonad.StackSet as W
|
|||||||
-- Then to your keybindings, add:
|
-- Then to your keybindings, add:
|
||||||
--
|
--
|
||||||
-- > , ((modMask, xK_j), focusUp)
|
-- > , ((modMask, xK_j), focusUp)
|
||||||
-- > , ((modMask, xk_k), focusDown)
|
-- > , ((modMask, xK_k), focusDown)
|
||||||
|
-- > , ((modMask, xK_m), focusMaster)
|
||||||
--
|
--
|
||||||
-- For more detailed instructions on editing the layoutHook see:
|
-- For more detailed instructions on editing the layoutHook see:
|
||||||
--
|
--
|
||||||
-- "XMonad.Doc.Extending#Editing_the_layout_hook"
|
-- "XMonad.Doc.Extending#Editing_the_layout_hook"
|
||||||
|
|
||||||
|
|
||||||
data BoringMessage = FocusUp | FocusDown | IsBoring Window | ClearBoring
|
data BoringMessage = FocusUp | FocusDown | FocusMaster | IsBoring Window | ClearBoring
|
||||||
| Replace String [Window]
|
| Replace String [Window]
|
||||||
| Merge String [Window]
|
| Merge String [Window]
|
||||||
deriving ( Read, Show, Typeable )
|
deriving ( Read, Show, Typeable )
|
||||||
@ -72,11 +73,12 @@ data UpdateBoring = UpdateBoring
|
|||||||
deriving (Typeable)
|
deriving (Typeable)
|
||||||
instance Message UpdateBoring
|
instance Message UpdateBoring
|
||||||
|
|
||||||
markBoring, clearBoring, focusUp, focusDown :: X ()
|
markBoring, clearBoring, focusUp, focusDown, focusMaster :: 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
|
||||||
|
|
||||||
data BoringWindows a = BoringWindows
|
data BoringWindows a = BoringWindows
|
||||||
{ namedBoring :: M.Map String [a] -- ^ store borings with a specific source
|
{ namedBoring :: M.Map String [a] -- ^ store borings with a specific source
|
||||||
@ -115,6 +117,12 @@ instance LayoutModifier BoringWindows Window where
|
|||||||
| Just FocusDown <- fromMessage m =
|
| Just FocusDown <- fromMessage m =
|
||||||
do windows $ W.modify' $ skipBoring W.focusDown'
|
do windows $ W.modify' $ skipBoring W.focusDown'
|
||||||
return Nothing
|
return Nothing
|
||||||
|
| Just FocusMaster <- fromMessage m =
|
||||||
|
do windows $ W.modify'
|
||||||
|
$ skipBoring W.focusDown' -- wiggle focus to make sure
|
||||||
|
. skipBoring W.focusUp' -- no boring window gets the focus
|
||||||
|
. focusMaster'
|
||||||
|
return Nothing
|
||||||
where skipBoring f st = fromMaybe st $ listToMaybe
|
where skipBoring f st = fromMaybe st $ listToMaybe
|
||||||
$ filter ((`notElem` W.focus st:bs) . W.focus)
|
$ filter ((`notElem` W.focus st:bs) . W.focus)
|
||||||
$ take (length $ W.integrate st)
|
$ take (length $ W.integrate st)
|
||||||
@ -122,3 +130,9 @@ instance LayoutModifier BoringWindows Window where
|
|||||||
bs = concat $ cbs:maybeToList lbs ++ M.elems nbs
|
bs = concat $ cbs:maybeToList lbs ++ M.elems nbs
|
||||||
rjl = return . Just . Left
|
rjl = return . Just . Left
|
||||||
handleMessOrMaybeModifyIt _ _ = return Nothing
|
handleMessOrMaybeModifyIt _ _ = return Nothing
|
||||||
|
|
||||||
|
-- | Variant of 'focusMaster' that works on a
|
||||||
|
-- 'Stack' rather than an entire 'StackSet'.
|
||||||
|
focusMaster' :: W.Stack a -> W.Stack a
|
||||||
|
focusMaster' c@(W.Stack _ [] _) = c
|
||||||
|
focusMaster' (W.Stack t ls rs) = W.Stack x [] (xs ++ t : rs) where (x:xs) = reverse ls
|
||||||
|
Loading…
x
Reference in New Issue
Block a user