mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 03:20:21 -07:00
use complCaseSensitivity field
Use the newly-added complCaseSensitivity field of XPConfig where possible, rather than declaring primed function variants.
This commit is contained in:
parent
b63159fd00
commit
52c5bd61cb
17
CHANGES.md
17
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`
|
||||
|
||||
|
@ -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,12 +279,7 @@ 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
|
||||
switchProjectPrompt = projectPrompt [ SwitchMode
|
||||
, ShiftMode
|
||||
, RenameMode
|
||||
, DirMode
|
||||
@ -305,12 +296,7 @@ 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
|
||||
shiftToProjectPrompt = projectPrompt [ ShiftMode
|
||||
, RenameMode
|
||||
, SwitchMode
|
||||
, DirMode
|
||||
@ -319,12 +305,7 @@ shiftToProjectPrompt' csn = projectPrompt csn [ ShiftMode
|
||||
--------------------------------------------------------------------------------
|
||||
-- | 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
|
||||
renameProjectPrompt = projectPrompt [ RenameMode
|
||||
, DirMode
|
||||
, SwitchMode
|
||||
, ShiftMode
|
||||
@ -336,12 +317,7 @@ 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
|
||||
changeProjectDirPrompt = projectPrompt [ DirMode
|
||||
, SwitchMode
|
||||
, ShiftMode
|
||||
, RenameMode
|
||||
@ -349,13 +325,13 @@ changeProjectDirPrompt' csn = projectPrompt csn [ DirMode
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- | 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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user