diff --git a/CHANGES.md b/CHANGES.md index 9221af9f..222ae1f6 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,6 +10,9 @@ additional `XPConfig` argument, so that they can take into account the given `searchPredicate`. + A `complCaseSensitivity` field has been added to `XPConfig`, indicating + whether case-sensitivity is desired when performing completion. + * `XMonad.Hooks.EwmhDesktops` It is no longer recommended to use `fullscreenEventHook` directly. @@ -95,19 +98,13 @@ * `XMonad.Actions.DynamicProjects` - Added four new functions: - - `switchProjectPrompt'` - - `shiftToProjectPrompt'` - - `renameProjectPrompt'`, - - `changeProjectDirPrompt'` - - These are like the corresponding sans `'` functions, but accept an additional - `ComplCaseSensitivity` argument. + The `changeProjectDirPrompt` function respects the `complCaseSensitivity` field + of `XPConfig` when performing directory completion. * `XMonad.Layout.WorkspaceDir` - Added `changeDir'`, like `changeDir` with an additional `ComplCaseSensitivity` - argument. + The `changeDir` function respects the `complCaseSensitivity` field of `XPConfig` + when performing directory completion. * `XMonad.Prompt.Directory` diff --git a/XMonad/Actions/DynamicProjects.hs b/XMonad/Actions/DynamicProjects.hs index f0e4bd42..7c631e98 100644 --- a/XMonad/Actions/DynamicProjects.hs +++ b/XMonad/Actions/DynamicProjects.hs @@ -29,13 +29,9 @@ module XMonad.Actions.DynamicProjects -- * Bindings , switchProjectPrompt - , switchProjectPrompt' , shiftToProjectPrompt - , shiftToProjectPrompt' , renameProjectPrompt - , renameProjectPrompt' , changeProjectDirPrompt - , changeProjectDirPrompt' -- * Helper Functions , switchProject @@ -149,24 +145,24 @@ instance ExtensionClass ProjectState where -------------------------------------------------------------------------------- -- 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 instance XPrompt ProjectPrompt where - showXPrompt (ProjectPrompt _ _ submode _) = + showXPrompt (ProjectPrompt _ submode _) = case submode of SwitchMode -> "Switch or Create Project: " ShiftMode -> "Send Window to Project: " RenameMode -> "New Project Name: " DirMode -> "Change Project Directory: " - completionFunction (ProjectPrompt _ _ RenameMode _) = return . (:[]) - completionFunction (ProjectPrompt _ csn DirMode _) = - let xpt = directoryMultipleModes' csn "" (const $ return ()) + completionFunction (ProjectPrompt _ RenameMode _) = return . (:[]) + completionFunction (ProjectPrompt c DirMode _) = + let xpt = directoryMultipleModes' (complCaseSensitivity c) "" (const $ return ()) 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 ps <- XS.gets projects @@ -175,17 +171,17 @@ instance XPrompt ProjectPrompt where Nothing | null name -> return () | 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 ps <- XS.gets projects 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 renameWorkspaceByName 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 dir <- io $ makeAbsolute dir' modifyProject (\p -> p { projectDirectory = dir }) @@ -283,16 +279,11 @@ switchProject p = do -- | Prompt for a project name and then switch to it. Automatically -- creates a project if a new name is returned from the prompt. switchProjectPrompt :: XPConfig -> X () -switchProjectPrompt = switchProjectPrompt' (ComplCaseSensitive True) - --- | Like @switchProjectPrompt@ with a parameter controlling --- completion case-sensitivity. -switchProjectPrompt' :: ComplCaseSensitivity -> XPConfig -> X () -switchProjectPrompt' csn = projectPrompt csn [ SwitchMode - , ShiftMode - , RenameMode - , DirMode - ] +switchProjectPrompt = projectPrompt [ SwitchMode + , ShiftMode + , RenameMode + , DirMode + ] -------------------------------------------------------------------------------- -- | Shift the currently focused window to the given project. @@ -305,30 +296,20 @@ shiftToProject p = do -- | Prompts for a project name and then shifts the currently focused -- window to that project. shiftToProjectPrompt :: XPConfig -> X () -shiftToProjectPrompt = shiftToProjectPrompt' (ComplCaseSensitive True) - --- | Like @shiftToProjectPrompt@ with a parameter controlling --- completion case-sensitivity. -shiftToProjectPrompt' :: ComplCaseSensitivity -> XPConfig -> X () -shiftToProjectPrompt' csn = projectPrompt csn [ ShiftMode - , RenameMode - , SwitchMode - , DirMode - ] +shiftToProjectPrompt = projectPrompt [ ShiftMode + , RenameMode + , SwitchMode + , DirMode + ] -------------------------------------------------------------------------------- -- | Rename the current project. renameProjectPrompt :: XPConfig -> X () -renameProjectPrompt = renameProjectPrompt' (ComplCaseSensitive True) - --- | Like @renameProjectPrompt@ with a parameter controlling --- completion case-sensitivity. -renameProjectPrompt' :: ComplCaseSensitivity -> XPConfig -> X () -renameProjectPrompt' csn = projectPrompt csn [ RenameMode - , DirMode - , SwitchMode - , ShiftMode - ] +renameProjectPrompt = projectPrompt [ RenameMode + , DirMode + , SwitchMode + , ShiftMode + ] -------------------------------------------------------------------------------- -- | Change the working directory used for the current project. @@ -336,26 +317,21 @@ renameProjectPrompt' csn = projectPrompt csn [ RenameMode -- NOTE: This will only affect new processed started in this project. -- Existing processes will maintain the previous working directory. changeProjectDirPrompt :: XPConfig -> X () -changeProjectDirPrompt = changeProjectDirPrompt' (ComplCaseSensitive True) - --- | Like @changeProjectDirPrompt@ with a parameter controlling --- completion case-sensitivity. -changeProjectDirPrompt' :: ComplCaseSensitivity -> XPConfig -> X () -changeProjectDirPrompt' csn = projectPrompt csn [ DirMode - , SwitchMode - , ShiftMode - , RenameMode - ] +changeProjectDirPrompt = projectPrompt [ DirMode + , SwitchMode + , ShiftMode + , RenameMode + ] -------------------------------------------------------------------------------- -- | Prompt for a project name. -projectPrompt :: ComplCaseSensitivity -> [ProjectMode] -> XPConfig -> X () -projectPrompt csn submodes c = do +projectPrompt :: [ProjectMode] -> XPConfig -> X () +projectPrompt submodes c = do ws <- map W.tag <$> gets (W.workspaces . windowset) ps <- XS.gets projects 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 diff --git a/XMonad/Layout/WorkspaceDir.hs b/XMonad/Layout/WorkspaceDir.hs index 22d4e14f..027ba615 100644 --- a/XMonad/Layout/WorkspaceDir.hs +++ b/XMonad/Layout/WorkspaceDir.hs @@ -26,7 +26,6 @@ module XMonad.Layout.WorkspaceDir ( -- $usage workspaceDir, changeDir, - changeDir', WorkspaceDir, ) where @@ -34,8 +33,8 @@ import System.Directory ( setCurrentDirectory, getCurrentDirectory ) import Control.Monad ( when ) import XMonad hiding ( focus ) -import XMonad.Prompt ( ComplCaseSensitivity (ComplCaseSensitive), XPConfig ) -import XMonad.Prompt.Directory ( directoryPrompt' ) +import XMonad.Prompt ( XPConfig ) +import XMonad.Prompt.Directory ( directoryPrompt ) import XMonad.Layout.LayoutModifier import XMonad.StackSet ( tag, currentTag ) @@ -61,7 +60,8 @@ import XMonad.StackSet ( tag, currentTag ) -- -- 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: -- @@ -92,7 +92,4 @@ scd :: String -> X () scd x = catchIO $ setCurrentDirectory x changeDir :: XPConfig -> X () -changeDir = changeDir' (ComplCaseSensitive True) - -changeDir' :: ComplCaseSensitivity -> XPConfig -> X () -changeDir' csn c = directoryPrompt' csn c "Set working directory: " (sendMessage . Chdir) +changeDir c = directoryPrompt c "Set working directory: " (sendMessage . Chdir) diff --git a/XMonad/Prompt/Directory.hs b/XMonad/Prompt/Directory.hs index 407e2e46..c859fd83 100644 --- a/XMonad/Prompt/Directory.hs +++ b/XMonad/Prompt/Directory.hs @@ -16,7 +16,6 @@ module XMonad.Prompt.Directory ( -- * Usage -- $usage directoryPrompt, - directoryPrompt', directoryMultipleModes, directoryMultipleModes', Dir @@ -39,10 +38,8 @@ instance XPrompt Dir where in f dir directoryPrompt :: XPConfig -> String -> (String -> X ()) -> X () -directoryPrompt = directoryPrompt' (ComplCaseSensitive True) - -directoryPrompt' :: ComplCaseSensitivity -> XPConfig -> String -> (String -> X ()) -> X () -directoryPrompt' csn c prom f = mkXPrompt (Dir prom csn f) c (getDirCompl csn) f +directoryPrompt c prom f = mkXPrompt (Dir prom csn f) c (getDirCompl csn) f + where csn = complCaseSensitivity c -- | A @XPType@ entry suitable for using with @mkXPromptWithModes@. directoryMultipleModes :: String -- ^ Prompt.