fuzzy/partial matching on prompts?

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

* 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
participants (2)
-
Adam Vogt
-
Eric Abrahamsen