From 6892ab9fecbe6c85b3c8e2c2c807cebbfca42c4e Mon Sep 17 00:00:00 2001 From: Antoine Eiche Date: Mon, 1 Jun 2015 11:32:53 +0200 Subject: XMonad.Actions.WorkspaceName.workspaceNamePrompt is XMonad.Prompt.Workspace.workspacePrompt acting on the workspace name. Ignore-this: 6a34c0ed8a8d78b90b915f93e0c34cd9 darcs-hash:20150601093253-9943a-cc0b0854c5b1e1d2501885a1a94c1a3c343722dc.gz --- XMonad/Actions/WorkspaceNames.hs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'XMonad') diff --git a/XMonad/Actions/WorkspaceNames.hs b/XMonad/Actions/WorkspaceNames.hs index 368e6e1..16661c0 100644 --- a/XMonad/Actions/WorkspaceNames.hs +++ b/XMonad/Actions/WorkspaceNames.hs @@ -32,6 +32,9 @@ module XMonad.Actions.WorkspaceNames ( swapTo, swapTo', swapWithCurrent, + + -- * Workspace prompt + workspaceNamePrompt ) where import XMonad @@ -47,6 +50,7 @@ import XMonad.Util.WorkspaceCompare (getSortByIndex) import qualified Data.Map as M import Data.Maybe (fromMaybe) +import Data.List (isInfixOf) -- $usage -- You can use this module with the following in your @~\/.xmonad\/xmonad.hs@ file: @@ -150,3 +154,18 @@ swapNames w1 w2 = do let getname w = fromMaybe "" $ M.lookup w m set w name m' = if null name then M.delete w m' else M.insert w name m' XS.put $ WorkspaceNames $ set w1 (getname w2) $ set w2 (getname w1) $ m + +-- | Same behavior than 'XMonad.Prompt.Workspace.workspacePrompt' excepted it acts on the workspace name provided by this module. +workspaceNamePrompt :: XPConfig -> (String -> X ()) -> X () +workspaceNamePrompt conf job = do + myWorkspaces <- gets $ map W.tag . W.workspaces . windowset + myWorkspacesName <- getWorkspaceNames >>= \f -> return $ map f myWorkspaces + let pairs = zip myWorkspacesName myWorkspaces + mkXPrompt (Wor "Select workspace: ") conf + (contains myWorkspacesName) + (job . toWsId pairs) + where toWsId pairs name = case lookup name pairs of + Nothing -> "" + Just i -> i + contains completions input = + return $ filter (Data.List.isInfixOf input) completions -- cgit v1.2.3