[xmonad] fuzzy/partial matching on prompts?
Adam Vogt
vogt.adam at gmail.com
Sun Oct 17 18:01:17 EDT 2010
* On Sunday, October 17 2010, Eric Abrahamsen wrote:
>I haven't been able to find anything in the docs on this… All I want is
>for certain prompts to use fuzzy or partial matching: the XMondad.Topic
>switchTopic function was what prompted this, but I see plenty of cases
>(dzen) where it would be very nice. But particularly for switching
>topic/workspaces: it's a pain having to type out whole names, even when
>the list has already been narrowed to a single member…
>
>There's probably some configuration option I'm missing—does anyone have
>any pointers?
>
>Thanks,
>Eric
An edit distance for the definition of fuzzy might help:
http://hackage.haskell.org/package/edit-distance
Which you could used in something like:
import Data.List
import Text.EditDistance
import XMonad; import XMonad.Prompt; import XMonad.Prompt.Shell
data FuzzySpawn = FuzzySpawn deriving (Read, Show)
instance XPrompt FuzzySpawn where showXPrompt _ = "Spawn: "
fuzzySpawn = do
cmds <- io getCommands
let compl s
| null s = []
| otherwise = let weight c = levenshteinDistance defaultEditCosts s c
in map snd $ take 20 $ sort $ map (\c -> (weight c,c)) cmds
mkXPrompt FuzzySpawn defaultXPConfig (return . compl) spawn
XMonad.Prompt is a bit inconsistent (XPrompt class vs. XPConfig data,
where all configurations could be data AFAICT), so it takes a bit of
work to understand, but it isn't that bad.
--
Adam
More information about the xmonad
mailing list