use complCaseSensitivity field

Use the newly-added complCaseSensitivity field of XPConfig where
possible, rather than declaring primed function variants.
This commit is contained in:
ivanbrennan 2020-09-28 22:27:07 -04:00
parent b63159fd00
commit 52c5bd61cb
No known key found for this signature in database
GPG Key ID: 79C3C47DC652EA54
4 changed files with 47 additions and 80 deletions

View File

@ -10,6 +10,9 @@
additional `XPConfig` argument, so that they can take into additional `XPConfig` argument, so that they can take into
account the given `searchPredicate`. account the given `searchPredicate`.
A `complCaseSensitivity` field has been added to `XPConfig`, indicating
whether case-sensitivity is desired when performing completion.
* `XMonad.Hooks.EwmhDesktops` * `XMonad.Hooks.EwmhDesktops`
It is no longer recommended to use `fullscreenEventHook` directly. It is no longer recommended to use `fullscreenEventHook` directly.
@ -95,19 +98,13 @@
* `XMonad.Actions.DynamicProjects` * `XMonad.Actions.DynamicProjects`
Added four new functions: The `changeProjectDirPrompt` function respects the `complCaseSensitivity` field
- `switchProjectPrompt'` of `XPConfig` when performing directory completion.
- `shiftToProjectPrompt'`
- `renameProjectPrompt'`,
- `changeProjectDirPrompt'`
These are like the corresponding sans `'` functions, but accept an additional
`ComplCaseSensitivity` argument.
* `XMonad.Layout.WorkspaceDir` * `XMonad.Layout.WorkspaceDir`
Added `changeDir'`, like `changeDir` with an additional `ComplCaseSensitivity` The `changeDir` function respects the `complCaseSensitivity` field of `XPConfig`
argument. when performing directory completion.
* `XMonad.Prompt.Directory` * `XMonad.Prompt.Directory`

View File

@ -29,13 +29,9 @@ module XMonad.Actions.DynamicProjects
-- * Bindings -- * Bindings
, switchProjectPrompt , switchProjectPrompt
, switchProjectPrompt'
, shiftToProjectPrompt , shiftToProjectPrompt
, shiftToProjectPrompt'
, renameProjectPrompt , renameProjectPrompt
, renameProjectPrompt'
, changeProjectDirPrompt , changeProjectDirPrompt
, changeProjectDirPrompt'
-- * Helper Functions -- * Helper Functions
, switchProject , switchProject
@ -149,24 +145,24 @@ instance ExtensionClass ProjectState where
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- Internal types for working with XPrompt. -- Internal types for working with XPrompt.
data ProjectPrompt = ProjectPrompt XPConfig ComplCaseSensitivity ProjectMode [ProjectName] data ProjectPrompt = ProjectPrompt XPConfig ProjectMode [ProjectName]
data ProjectMode = SwitchMode | ShiftMode | RenameMode | DirMode data ProjectMode = SwitchMode | ShiftMode | RenameMode | DirMode
instance XPrompt ProjectPrompt where instance XPrompt ProjectPrompt where
showXPrompt (ProjectPrompt _ _ submode _) = showXPrompt (ProjectPrompt _ submode _) =
case submode of case submode of
SwitchMode -> "Switch or Create Project: " SwitchMode -> "Switch or Create Project: "
ShiftMode -> "Send Window to Project: " ShiftMode -> "Send Window to Project: "
RenameMode -> "New Project Name: " RenameMode -> "New Project Name: "
DirMode -> "Change Project Directory: " DirMode -> "Change Project Directory: "
completionFunction (ProjectPrompt _ _ RenameMode _) = return . (:[]) completionFunction (ProjectPrompt _ RenameMode _) = return . (:[])
completionFunction (ProjectPrompt _ csn DirMode _) = completionFunction (ProjectPrompt c DirMode _) =
let xpt = directoryMultipleModes' csn "" (const $ return ()) let xpt = directoryMultipleModes' (complCaseSensitivity c) "" (const $ return ())
in completionFunction xpt in completionFunction xpt
completionFunction (ProjectPrompt c _ _ ns) = mkComplFunFromList' c ns completionFunction (ProjectPrompt c _ ns) = mkComplFunFromList' c ns
modeAction (ProjectPrompt _ _ SwitchMode _) buf auto = do modeAction (ProjectPrompt _ SwitchMode _) buf auto = do
let name = if null auto then buf else auto let name = if null auto then buf else auto
ps <- XS.gets projects ps <- XS.gets projects
@ -175,17 +171,17 @@ instance XPrompt ProjectPrompt where
Nothing | null name -> return () Nothing | null name -> return ()
| otherwise -> switchProject (defProject name) | otherwise -> switchProject (defProject name)
modeAction (ProjectPrompt _ _ ShiftMode _) buf auto = do modeAction (ProjectPrompt _ ShiftMode _) buf auto = do
let name = if null auto then buf else auto let name = if null auto then buf else auto
ps <- XS.gets projects ps <- XS.gets projects
shiftToProject . fromMaybe (defProject name) $ Map.lookup name ps shiftToProject . fromMaybe (defProject name) $ Map.lookup name ps
modeAction (ProjectPrompt _ _ RenameMode _) name _ = modeAction (ProjectPrompt _ RenameMode _) name _ =
when (not (null name) && not (all isSpace name)) $ do when (not (null name) && not (all isSpace name)) $ do
renameWorkspaceByName name renameWorkspaceByName name
modifyProject (\p -> p { projectName = name }) modifyProject (\p -> p { projectName = name })
modeAction (ProjectPrompt _ _ DirMode _) buf auto = do modeAction (ProjectPrompt _ DirMode _) buf auto = do
let dir' = if null auto then buf else auto let dir' = if null auto then buf else auto
dir <- io $ makeAbsolute dir' dir <- io $ makeAbsolute dir'
modifyProject (\p -> p { projectDirectory = dir }) modifyProject (\p -> p { projectDirectory = dir })
@ -283,12 +279,7 @@ switchProject p = do
-- | Prompt for a project name and then switch to it. Automatically -- | Prompt for a project name and then switch to it. Automatically
-- creates a project if a new name is returned from the prompt. -- creates a project if a new name is returned from the prompt.
switchProjectPrompt :: XPConfig -> X () switchProjectPrompt :: XPConfig -> X ()
switchProjectPrompt = switchProjectPrompt' (ComplCaseSensitive True) switchProjectPrompt = projectPrompt [ SwitchMode
-- | Like @switchProjectPrompt@ with a parameter controlling
-- completion case-sensitivity.
switchProjectPrompt' :: ComplCaseSensitivity -> XPConfig -> X ()
switchProjectPrompt' csn = projectPrompt csn [ SwitchMode
, ShiftMode , ShiftMode
, RenameMode , RenameMode
, DirMode , DirMode
@ -305,12 +296,7 @@ shiftToProject p = do
-- | Prompts for a project name and then shifts the currently focused -- | Prompts for a project name and then shifts the currently focused
-- window to that project. -- window to that project.
shiftToProjectPrompt :: XPConfig -> X () shiftToProjectPrompt :: XPConfig -> X ()
shiftToProjectPrompt = shiftToProjectPrompt' (ComplCaseSensitive True) shiftToProjectPrompt = projectPrompt [ ShiftMode
-- | Like @shiftToProjectPrompt@ with a parameter controlling
-- completion case-sensitivity.
shiftToProjectPrompt' :: ComplCaseSensitivity -> XPConfig -> X ()
shiftToProjectPrompt' csn = projectPrompt csn [ ShiftMode
, RenameMode , RenameMode
, SwitchMode , SwitchMode
, DirMode , DirMode
@ -319,12 +305,7 @@ shiftToProjectPrompt' csn = projectPrompt csn [ ShiftMode
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- | Rename the current project. -- | Rename the current project.
renameProjectPrompt :: XPConfig -> X () renameProjectPrompt :: XPConfig -> X ()
renameProjectPrompt = renameProjectPrompt' (ComplCaseSensitive True) renameProjectPrompt = projectPrompt [ RenameMode
-- | Like @renameProjectPrompt@ with a parameter controlling
-- completion case-sensitivity.
renameProjectPrompt' :: ComplCaseSensitivity -> XPConfig -> X ()
renameProjectPrompt' csn = projectPrompt csn [ RenameMode
, DirMode , DirMode
, SwitchMode , SwitchMode
, ShiftMode , ShiftMode
@ -336,12 +317,7 @@ renameProjectPrompt' csn = projectPrompt csn [ RenameMode
-- NOTE: This will only affect new processed started in this project. -- NOTE: This will only affect new processed started in this project.
-- Existing processes will maintain the previous working directory. -- Existing processes will maintain the previous working directory.
changeProjectDirPrompt :: XPConfig -> X () changeProjectDirPrompt :: XPConfig -> X ()
changeProjectDirPrompt = changeProjectDirPrompt' (ComplCaseSensitive True) changeProjectDirPrompt = projectPrompt [ DirMode
-- | Like @changeProjectDirPrompt@ with a parameter controlling
-- completion case-sensitivity.
changeProjectDirPrompt' :: ComplCaseSensitivity -> XPConfig -> X ()
changeProjectDirPrompt' csn = projectPrompt csn [ DirMode
, SwitchMode , SwitchMode
, ShiftMode , ShiftMode
, RenameMode , RenameMode
@ -349,13 +325,13 @@ changeProjectDirPrompt' csn = projectPrompt csn [ DirMode
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- | Prompt for a project name. -- | Prompt for a project name.
projectPrompt :: ComplCaseSensitivity -> [ProjectMode] -> XPConfig -> X () projectPrompt :: [ProjectMode] -> XPConfig -> X ()
projectPrompt csn submodes c = do projectPrompt submodes c = do
ws <- map W.tag <$> gets (W.workspaces . windowset) ws <- map W.tag <$> gets (W.workspaces . windowset)
ps <- XS.gets projects ps <- XS.gets projects
let names = sort (Map.keys ps `union` ws) let names = sort (Map.keys ps `union` ws)
modes = map (\m -> XPT $ ProjectPrompt c csn m names) submodes modes = map (\m -> XPT $ ProjectPrompt c m names) submodes
mkXPromptWithModes modes c mkXPromptWithModes modes c

View File

@ -26,7 +26,6 @@ module XMonad.Layout.WorkspaceDir (
-- $usage -- $usage
workspaceDir, workspaceDir,
changeDir, changeDir,
changeDir',
WorkspaceDir, WorkspaceDir,
) where ) where
@ -34,8 +33,8 @@ import System.Directory ( setCurrentDirectory, getCurrentDirectory )
import Control.Monad ( when ) import Control.Monad ( when )
import XMonad hiding ( focus ) import XMonad hiding ( focus )
import XMonad.Prompt ( ComplCaseSensitivity (ComplCaseSensitive), XPConfig ) import XMonad.Prompt ( XPConfig )
import XMonad.Prompt.Directory ( directoryPrompt' ) import XMonad.Prompt.Directory ( directoryPrompt )
import XMonad.Layout.LayoutModifier import XMonad.Layout.LayoutModifier
import XMonad.StackSet ( tag, currentTag ) import XMonad.StackSet ( tag, currentTag )
@ -61,7 +60,8 @@ import XMonad.StackSet ( tag, currentTag )
-- --
-- If you prefer a prompt with case-insensitive completion: -- If you prefer a prompt with case-insensitive completion:
-- --
-- > , ((modm .|. shiftMask, xK_x ), changeDir' (ComplCaseSensitive False) def) -- > , ((modm .|. shiftMask, xK_x ),
-- changeDir def {complCaseSensitivity = ComplCaseSensitive False})
-- --
-- For detailed instruction on editing the key binding see: -- For detailed instruction on editing the key binding see:
-- --
@ -92,7 +92,4 @@ scd :: String -> X ()
scd x = catchIO $ setCurrentDirectory x scd x = catchIO $ setCurrentDirectory x
changeDir :: XPConfig -> X () changeDir :: XPConfig -> X ()
changeDir = changeDir' (ComplCaseSensitive True) changeDir c = directoryPrompt c "Set working directory: " (sendMessage . Chdir)
changeDir' :: ComplCaseSensitivity -> XPConfig -> X ()
changeDir' csn c = directoryPrompt' csn c "Set working directory: " (sendMessage . Chdir)

View File

@ -16,7 +16,6 @@ module XMonad.Prompt.Directory (
-- * Usage -- * Usage
-- $usage -- $usage
directoryPrompt, directoryPrompt,
directoryPrompt',
directoryMultipleModes, directoryMultipleModes,
directoryMultipleModes', directoryMultipleModes',
Dir Dir
@ -39,10 +38,8 @@ instance XPrompt Dir where
in f dir in f dir
directoryPrompt :: XPConfig -> String -> (String -> X ()) -> X () directoryPrompt :: XPConfig -> String -> (String -> X ()) -> X ()
directoryPrompt = directoryPrompt' (ComplCaseSensitive True) directoryPrompt c prom f = mkXPrompt (Dir prom csn f) c (getDirCompl csn) f
where csn = complCaseSensitivity c
directoryPrompt' :: ComplCaseSensitivity -> XPConfig -> String -> (String -> X ()) -> X ()
directoryPrompt' csn c prom f = mkXPrompt (Dir prom csn f) c (getDirCompl csn) f
-- | A @XPType@ entry suitable for using with @mkXPromptWithModes@. -- | A @XPType@ entry suitable for using with @mkXPromptWithModes@.
directoryMultipleModes :: String -- ^ Prompt. directoryMultipleModes :: String -- ^ Prompt.