diff --git a/lib/Password.hs b/lib/Password.hs index 7302b28..6d18d86 100644 --- a/lib/Password.hs +++ b/lib/Password.hs @@ -37,18 +37,25 @@ passPrompt = mkPassPrompt "Select password" selectPassword mkPassPrompt :: String -> (String -> X ()) -> XPConfig -> X () mkPassPrompt label f conf = do - -- I'm just sorting here, but could use some kind of fuzzy matching instead, but it requires a bit more effort + -- I'm just sorting here, but could use some kind of fuzzy matching instead, + -- but it requires a bit more effort passwords <- sort <$> liftIO getPasswords -- Other change, use infixof instead of prefixof - mkXPrompt (Pass label) conf (\input -> pure (sortBy (compare `on` levenshtein input) . filter (consumes input) $ passwords)) f + mkXPrompt (Pass label) conf + (\input -> pure (sortBy (compare `on` levenshtein input) + . take 5 + . filter (consumes input) + $ passwords)) f where - consumes [] _ = True -- everything consumed - consumes (_:_) [] = False -- all not consumed - consumes (a:xs) (a':ys) | a == a' = consumes xs ys + consumes [] _ = True -- everything consumed + consumes (_:_) [] = False -- all not consumed + consumes (a:xs) (a':ys) | a == a' = consumes xs ys | otherwise = consumes (a:xs) ys getPasswords = do passwordStoreDir <- ( "pass") <$> getHomeDirectory - files <- runProcessWithInput "find" [ passwordStoreDir, "-type", "f", "-name", "*.gpg", "-printf", "%p\n"] [] + files <- runProcessWithInput "find" + [ passwordStoreDir, "-type", "f", "-name", "*.gpg", "-printf" + , "%p\n"] [] return . lines $ files selectPassword :: String -> X ()