mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-07-26 09:41:52 -07:00
Merge pull request #294 from alhirzel/add-isOnAnyVisibleWS
Add isOnAnyVisibleWS function to Actions.GroupNavigation
This commit is contained in:
11
CHANGES.md
11
CHANGES.md
@@ -54,9 +54,16 @@
|
||||
into `foo/bar`, instead of `~/bar` as expected.
|
||||
|
||||
* `XMonad.Actions.DynamicWorkspaceOrder`
|
||||
|
||||
Add a version of `withNthWorkspace` that takes a `[WorkspaceId] ->
|
||||
[WorkspaceId]` transformation to apply over the list of workspace tags
|
||||
resulting from the dynamic order.
|
||||
[WorkspaceId]` transformation to apply over the list of workspace tags
|
||||
resulting from the dynamic order.
|
||||
|
||||
* `XMonad.Actions.GroupNavigation`
|
||||
|
||||
Add a utility function `isOnAnyVisibleWS :: Query Bool` to allow easy
|
||||
cycling between all windows on all visible workspaces.
|
||||
|
||||
|
||||
## 0.15
|
||||
|
||||
|
@@ -16,7 +16,7 @@
|
||||
-- query.
|
||||
--
|
||||
-- Also provides a method for jumping back to the most recently used
|
||||
-- window in any given group.
|
||||
-- window in any given group, and predefined groups.
|
||||
--
|
||||
----------------------------------------------------------------------
|
||||
|
||||
@@ -27,6 +27,10 @@ module XMonad.Actions.GroupNavigation ( -- * Usage
|
||||
, nextMatchOrDo
|
||||
, nextMatchWithThis
|
||||
, historyHook
|
||||
|
||||
-- * Utilities
|
||||
-- $utilities
|
||||
, isOnAnyVisibleWS
|
||||
) where
|
||||
|
||||
import Control.Monad.Reader
|
||||
@@ -142,7 +146,7 @@ orderedWorkspaceList ss wsids = rotateTo isCurWS wspcs'
|
||||
where
|
||||
wspcs = SS.workspaces ss
|
||||
wspcsMap = Fold.foldl' (\m ws -> Map.insert (SS.tag ws) ws m) Map.empty wspcs
|
||||
wspcs' = fmap (\wsid -> wspcsMap ! wsid) wsids
|
||||
wspcs' = fmap (wspcsMap !) wsids
|
||||
isCurWS ws = SS.tag ws == SS.tag (SS.workspace $ SS.current ss)
|
||||
|
||||
--- History navigation, requires a layout modifier -------------------
|
||||
@@ -167,7 +171,7 @@ updateHistory :: HistoryDB -> X HistoryDB
|
||||
updateHistory (HistoryDB oldcur oldhist) = withWindowSet $ \ss -> do
|
||||
let newcur = SS.peek ss
|
||||
wins = Set.fromList $ SS.allWindows ss
|
||||
newhist = flt (flip Set.member wins) (ins oldcur oldhist)
|
||||
newhist = flt (`Set.member` wins) (ins oldcur oldhist)
|
||||
return $ HistoryDB newcur (del newcur newhist)
|
||||
where
|
||||
ins x xs = maybe xs (<| xs) x
|
||||
@@ -216,3 +220,22 @@ findM cond xs = findM' cond (viewl xs)
|
||||
if isMatch
|
||||
then return (Just x')
|
||||
else findM qry xs'
|
||||
|
||||
|
||||
-- $utilities
|
||||
-- #utilities#
|
||||
-- Below are handy queries for use with 'nextMatch', 'nextMatchOrDo',
|
||||
-- and 'nextMatchWithThis'.
|
||||
|
||||
-- | A query that matches all windows on visible workspaces. This is
|
||||
-- useful for configurations with multiple screens, and matches even
|
||||
-- invisible windows.
|
||||
isOnAnyVisibleWS :: Query Bool
|
||||
isOnAnyVisibleWS = do
|
||||
w <- ask
|
||||
ws <- liftX $ gets windowset
|
||||
let allVisible = concat $ maybe [] W.integrate . W.stack . W.workspace <$> W.current ws:W.visible ws
|
||||
visibleWs = w `elem` allVisible
|
||||
unfocused = maybe True (w /=) $ W.peek ws
|
||||
return $ visibleWs && unfocused
|
||||
|
||||
|
Reference in New Issue
Block a user