Browse Source

employ the prompt sorter for the window selector

as in https://markmail.org/thread/kgrybzqarqzqiige
master
Sergey Alirzaev 1 year ago
parent
commit
6b9fb096d6
2 changed files with 15 additions and 2 deletions
  1. 6
    0
      CHANGES.md
  2. 9
    2
      XMonad/Prompt.hs

+ 6
- 0
CHANGES.md View File

@@ -34,6 +34,12 @@
* `XMonad.Actions.MessageHandling`
Refresh-performing functions updated to better reflect the new `sendMessage`.

* `XMonad.Prompt`

Added `sorter` to `XPConfig` used to sort the possible completions by how
well they match the search string (example: `XMonad.Prompt.FuzzyMatch`).


## 0.14

### Breaking Changes

+ 9
- 2
XMonad/Prompt.hs View File

@@ -156,6 +156,10 @@ data XPConfig =
, searchPredicate :: String -> String -> Bool
-- ^ Given the typed string and a possible
-- completion, is the completion valid?
, sorter :: String -> [String] -> [String]
-- ^ Used to sort the possible completions by how well they
-- match the search string (see X.P.FuzzyMatch for an
-- example).
}

data XPType = forall p . XPrompt p => XPT p
@@ -268,6 +272,7 @@ instance Default XPConfig where
, showCompletionOnTab = False
, searchPredicate = isPrefixOf
, alwaysHighlight = False
, sorter = const id
}
{-# DEPRECATED defaultXPConfig "Use def (from Data.Default, and re-exported from XMonad.Prompt) instead." #-}
defaultXPConfig = def
@@ -956,8 +961,10 @@ getCompletionFunction st = case operationMode st of
getCompletions :: XP [String]
getCompletions = do
s <- get
io $ getCompletionFunction s (commandToComplete (currentXPMode s) (command s))
`E.catch` \(SomeException _) -> return []
let q = commandToComplete (currentXPMode s) (command s)
compl = getCompletionFunction s
srt = sorter (config s)
io $ (srt q <$> compl q) `E.catch` \(SomeException _) -> return []

setComplWin :: Window -> ComplWindowDim -> XP ()
setComplWin w wi =

Loading…
Cancel
Save