From 0cbee237c73b3c4f4125b704d8852db3784199e4 Mon Sep 17 00:00:00 2001
From: slotThe <soliditsallgood@mailbox.org>
Date: Sun, 6 Dec 2020 15:16:27 +0100
Subject: [PATCH 1/4] Add filterOutWs and filterOutWsPP

These are more generic versions of the respective functions in
XMonad.Util.NamedScratchpad.
---
 XMonad/Hooks/DynamicLog.hs      | 19 ++++++++++++++++++-
 XMonad/Util/WorkspaceCompare.hs |  6 ++++++
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/XMonad/Hooks/DynamicLog.hs b/XMonad/Hooks/DynamicLog.hs
index bbc2cb92..40c7ebbf 100644
--- a/XMonad/Hooks/DynamicLog.hs
+++ b/XMonad/Hooks/DynamicLog.hs
@@ -46,7 +46,7 @@ module XMonad.Hooks.DynamicLog (
     wrap, pad, trim, shorten, shortenLeft,
     xmobarColor, xmobarAction, xmobarBorder,
     xmobarRaw, xmobarStrip, xmobarStripTags,
-    dzenColor, dzenEscape, dzenStrip,
+    dzenColor, dzenEscape, dzenStrip, filterOutWsPP,
 
     -- * Internal formatting functions
     pprWindowSet,
@@ -508,6 +508,23 @@ xmobarStripTags tags = strip [] where
     openTag str = "<" ++ str ++ "="
     closeTag str = "</" ++ str ++ ">"
 
+-- | Transforms a pretty-printer into one not displaying the given workspaces.
+--
+-- For example, filtering out the @NSP@ workspace before giving the 'PP' to
+-- 'dynamicLogWithPP':
+--
+-- > logHook = dynamicLogWithPP . filterOutWsPP [scratchpadWorkspaceTag] $ def
+--
+-- Here is another example, when using "XMonad.Layout.IndependentScreens".  If
+-- you have handles @hLeft@ and @hRight@ for bars on the left and right screens,
+-- respectively, and @pp@ is a pretty-printer function that takes a handle, you
+-- could write
+--
+-- > logHook = let log screen handle = dynamicLogWithPP . filterOutWsPP [scratchpadWorkspaceTag] . marshallPP screen . pp $ handle
+-- >           in log 0 hLeft >> log 1 hRight
+filterOutWsPP :: [WorkspaceId] -> PP -> PP
+filterOutWsPP ws pp = pp { ppSort = (. filterOutWs ws) <$> ppSort pp }
+
 -- | The 'PP' type allows the user to customize the formatting of
 --   status information.
 data PP = PP { ppCurrent :: WorkspaceId -> String
diff --git a/XMonad/Util/WorkspaceCompare.hs b/XMonad/Util/WorkspaceCompare.hs
index f2a320d9..7aabb1d2 100644
--- a/XMonad/Util/WorkspaceCompare.hs
+++ b/XMonad/Util/WorkspaceCompare.hs
@@ -11,6 +11,7 @@
 -----------------------------------------------------------------------------
 
 module XMonad.Util.WorkspaceCompare ( WorkspaceCompare, WorkspaceSort
+                                    , filterOutWs
                                     , getWsIndex
                                     , getWsCompare
                                     , getWsCompareByTag
@@ -33,6 +34,11 @@ import Data.Function (on)
 type WorkspaceCompare = WorkspaceId -> WorkspaceId -> Ordering
 type WorkspaceSort = [WindowSpace] -> [WindowSpace]
 
+-- | Transforms a workspace list by filtering out the workspaces that
+-- correspond to the given 'tag's.  Intended for use with logHooks.
+filterOutWs :: [WorkspaceId] -> WorkspaceSort
+filterOutWs ws = filter (\S.Workspace{ S.tag = tag } -> tag `notElem` ws)
+
 -- | Lookup the index of a workspace id in the user's config, return Nothing
 -- if that workspace does not exist in the config.
 getWsIndex :: X (WorkspaceId -> Maybe Int)

From d3f11d041a0b2abf4f7c8bfffe14b3429124aa58 Mon Sep 17 00:00:00 2001
From: slotThe <soliditsallgood@mailbox.org>
Date: Fri, 11 Dec 2020 10:50:04 +0100
Subject: [PATCH 2/4] Export scratchpadWorkspaceTag

Users are now able to use this, instead of hard-coding the "NSP" name in
their configurations
---
 XMonad/Util/NamedScratchpad.hs | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/XMonad/Util/NamedScratchpad.hs b/XMonad/Util/NamedScratchpad.hs
index 40edae99..a8bdcd49 100644
--- a/XMonad/Util/NamedScratchpad.hs
+++ b/XMonad/Util/NamedScratchpad.hs
@@ -17,6 +17,7 @@ module XMonad.Util.NamedScratchpad (
   -- * Usage
   -- $usage
   NamedScratchpad(..),
+  scratchpadWorkspaceTag,
   nonFloating,
   defaultFloating,
   customFloating,
@@ -176,8 +177,7 @@ someNamedScratchpadAction f runApp scratchpadConfig scratchpadName =
 
         Nothing -> return ()
 
-
--- tag of the scratchpad workspace
+-- | Tag of the scratchpad workspace
 scratchpadWorkspaceTag :: String
 scratchpadWorkspaceTag = "NSP"
 

From 6087bdd40de41a4715d492e4b6120f872c80d487 Mon Sep 17 00:00:00 2001
From: slotThe <soliditsallgood@mailbox.org>
Date: Sun, 6 Dec 2020 15:17:26 +0100
Subject: [PATCH 3/4] Deprecate namedScratchpadFilterOutWorkspace[PP]

These were superseded by more generic function in
XMonad.Hooks.DynamicLog.
---
 XMonad/Util/NamedScratchpad.hs | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/XMonad/Util/NamedScratchpad.hs b/XMonad/Util/NamedScratchpad.hs
index a8bdcd49..9efd9e62 100644
--- a/XMonad/Util/NamedScratchpad.hs
+++ b/XMonad/Util/NamedScratchpad.hs
@@ -90,6 +90,12 @@ import qualified XMonad.StackSet as W
 -- For detailed instruction on editing the key binding see
 -- "XMonad.Doc.Extending#Editing_key_bindings"
 --
+-- For some applications (like displaying your workspaces in a status bar) it is
+-- convenient to filter out the @NSP@ workspace when looking at all workspaces.
+-- For this, you can use functions 'XMonad.Hooks.DynamicLog.filterOutWsPP' and
+-- 'XMonad.Util.WorkspaceCompare.filterOutWs'.  See the documentation of these
+-- functions for examples.
+--
 
 -- | Single named scratchpad configuration
 data NamedScratchpad = NS { name   :: String      -- ^ Scratchpad name
@@ -190,6 +196,7 @@ namedScratchpadManageHook = composeAll . fmap (\c -> query c --> hook c)
 -- doesn't contain it. Intended for use with logHooks.
 namedScratchpadFilterOutWorkspace :: [WindowSpace] -> [WindowSpace]
 namedScratchpadFilterOutWorkspace = filter (\(W.Workspace tag _ _) -> tag /= scratchpadWorkspaceTag)
+{-# DEPRECATED namedScratchpadFilterOutWorkspace "Use XMonad.Util.WorkspaceCompare.filterOutWs [scratchpadWorkspaceTag] instead" #-}
 
 -- | Transforms a pretty-printer into one not displaying the NSP workspace.
 --
@@ -206,5 +213,6 @@ namedScratchpadFilterOutWorkspacePP :: PP -> PP
 namedScratchpadFilterOutWorkspacePP pp = pp {
   ppSort = fmap (. namedScratchpadFilterOutWorkspace) (ppSort pp)
   }
+{-# DEPRECATED namedScratchpadFilterOutWorkspacePP "Use XMonad.Hooks.DynamicLog.filterOutWsPP [scratchpadWorkspaceTag] instead" #-}
 
 -- vim:ts=4:shiftwidth=4:softtabstop=4:expandtab:foldlevel=20:

From e956fbf3ce988e07da254eff46612cf08b4ce8db Mon Sep 17 00:00:00 2001
From: slotThe <soliditsallgood@mailbox.org>
Date: Fri, 11 Dec 2020 15:24:46 +0100
Subject: [PATCH 4/4] Update CHANGES

---
 CHANGES.md | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/CHANGES.md b/CHANGES.md
index 6434dd51..cd7c152d 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -176,17 +176,25 @@
     - Added `shortenLeft` function, like existing `shorten` but shortens by
       truncating from left instead of right. Useful for showing directories.
 
+    - Added `filterOutWsPP` for filtering out certain workspaces from being
+      displayed.
+
   * `XMonad.Layout.BoringWindows`
 
      Added boring-aware `swapUp`, `swapDown`, `siftUp`, and `siftDown` functions.
 
   * `XMonad.Util.NamedScratchpad`
 
-     Added two new exported functions to the module:
-     - `customRunNamedScratchpadAction`
-         (provides the option to customize the `X ()` action the scratchpad is launched by)
-     - `spawnHereNamedScratchpadAction`
-         (uses `XMonad.Actions.SpawnOn.spawnHere` to initially start the scratchpad on the workspace it was launched on)
+     - Added two new exported functions to the module:
+         - `customRunNamedScratchpadAction`
+             (provides the option to customize the `X ()` action the scratchpad is launched by)
+         - `spawnHereNamedScratchpadAction`
+             (uses `XMonad.Actions.SpawnOn.spawnHere` to initially start the scratchpad on the workspace it was launched on)
+     - Deprecated `namedScratchpadFilterOutWorkspace` and
+       `namedScratchpadFilterOutWorkspacePP`.  Use
+       `XMonad.Util.WorkspaceCompare.filterOutWs` respectively
+       `XMonad.Hooks.DynamicLog.filterOutWsPP` instead.
+     - Exported the `scratchpadWorkspaceTag`.
 
   * `XMonad.Util.Run`
 
@@ -302,6 +310,10 @@
   * `XMonad.Util.DebugWindow`
     Fixed a bottom in `debugWindow` when used on windows with UTF8 encoded titles.
 
+  * `XMonad.Hooks.WorkspaceCompare`
+
+    - Added `filterOutWs` for workspace filtering.
+
 ## 0.16
 
 ### Breaking Changes