From 540635fe1c433789f4b92e8c0cc3e4df82c0d139 Mon Sep 17 00:00:00 2001 From: "ramon diaz-uriarte (at Phelsuma)" Date: Tue, 28 Dec 2021 04:29:42 +0100 Subject: [PATCH] X.A.DynamicWorkspaces: Honor searchPredicate in withWorkspace If the user's prompt configuration has a custom `searchPredicate` (e.g., `X.P.FuzzyMatch.fuzzyMatch`) the `withWorkspace` prompt should make use of it (instead of defaulting to an `isPrefixOf`-style matching). For details see https://mail.haskell.org/pipermail/xmonad/2021-December/015491.html --- CHANGES.md | 3 +++ XMonad/Actions/DynamicWorkspaces.hs | 8 ++------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 3baf439c..c2023ab2 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -850,6 +850,9 @@ - Fixed a system freeze when using `X.A.CopyWindow.copy` in combination with `removeWorkspace`. + - `withWorkspace` now honors the users `searchPredicate`, for + example `fuzzyMatch` from `Prompt.FuzzyMatch`. + ## 0.16 ### Breaking Changes diff --git a/XMonad/Actions/DynamicWorkspaces.hs b/XMonad/Actions/DynamicWorkspaces.hs index ef507b34..5992473b 100644 --- a/XMonad/Actions/DynamicWorkspaces.hs +++ b/XMonad/Actions/DynamicWorkspaces.hs @@ -38,7 +38,7 @@ import XMonad.Prelude (find, isNothing, nub, when) import XMonad hiding (workspaces) import XMonad.StackSet hiding (filter, modify, delete) import XMonad.Prompt.Workspace ( Wor(Wor), workspacePrompt ) -import XMonad.Prompt ( XPConfig, mkXPrompt ) +import XMonad.Prompt ( XPConfig, mkComplFunFromList', mkXPrompt ) import XMonad.Util.WorkspaceCompare ( getSortByIndex ) import qualified Data.Map.Strict as Map import qualified XMonad.Util.ExtensibleState as XS @@ -107,17 +107,13 @@ withWorkspaceIndex job widx = do ilookup :: WorkspaceIndex -> X (Maybe WorkspaceTag) ilookup idx = Map.lookup idx <$> XS.gets workspaceIndexMap - -mkCompl :: [String] -> String -> IO [String] -mkCompl l s = return $ filter (\x -> take (length s) x == s) l - withWorkspace :: XPConfig -> (String -> X ()) -> X () withWorkspace c job = do ws <- gets (workspaces . windowset) sort <- getSortByIndex let ts = map tag $ sort ws job' t | t `elem` ts = job t | otherwise = addHiddenWorkspace t >> job t - mkXPrompt (Wor "") c (mkCompl ts) job' + mkXPrompt (Wor "") c (mkComplFunFromList' c ts) job' renameWorkspace :: XPConfig -> X () renameWorkspace conf = workspacePrompt conf renameWorkspaceByName