Shorten the list of return passes shown when searching

This commit is contained in:
EEva (JPotier) 2021-04-02 09:44:53 +03:00
parent b6b5e0d467
commit 2cf1863ef3
1 changed files with 13 additions and 6 deletions

View File

@ -37,18 +37,25 @@ passPrompt = mkPassPrompt "Select password" selectPassword
mkPassPrompt :: String -> (String -> X ()) -> XPConfig -> X () mkPassPrompt :: String -> (String -> X ()) -> XPConfig -> X ()
mkPassPrompt label f conf = do 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 passwords <- sort <$> liftIO getPasswords
-- Other change, use infixof instead of prefixof -- 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 where
consumes [] _ = True -- everything consumed consumes [] _ = True -- everything consumed
consumes (_:_) [] = False -- all not consumed consumes (_:_) [] = False -- all not consumed
consumes (a:xs) (a':ys) | a == a' = consumes xs ys consumes (a:xs) (a':ys) | a == a' = consumes xs ys
| otherwise = consumes (a:xs) ys | otherwise = consumes (a:xs) ys
getPasswords = do getPasswords = do
passwordStoreDir <- (</> "pass") <$> getHomeDirectory 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 return . lines $ files
selectPassword :: String -> X () selectPassword :: String -> X ()