From 1d3c55f3e9d0288a9346f1af2c194358685c5eeb Mon Sep 17 00:00:00 2001 From: "EEva (JPotier)" Date: Thu, 6 May 2021 17:23:07 +0300 Subject: [PATCH] Fix pass --- lib/Password.hs | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/Password.hs b/lib/Password.hs index 6d18d86..00d1a32 100644 --- a/lib/Password.hs +++ b/lib/Password.hs @@ -40,17 +40,8 @@ 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 passwords <- sort <$> liftIO getPasswords - -- Other change, use infixof instead of prefixof - mkXPrompt (Pass label) conf - (\input -> pure (sortBy (compare `on` levenshtein input) - . take 5 - . filter (consumes input) - $ passwords)) f + mkXPrompt (Pass label) conf (passComplFun passwords) f where - 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" @@ -58,6 +49,19 @@ mkPassPrompt label f conf = do , "%p\n"] [] return . lines $ files +-- | Find all entries (`allPasses`) matching `input` +passComplFun :: [String] -> String -> IO [String] +passComplFun allPasses input = pure $ + sortBy (compare `on` levenshtein input) + . take 5 + . filter (consumes input) + $ allPasses + where + consumes [] _ = True -- everything consumed + consumes (_:_) [] = False -- all not consumed + consumes (a:xs) (a':ys) | a == a' = consumes xs ys + | otherwise = consumes (a:xs) ys + selectPassword :: String -> X () selectPassword pass = spawn $ "gpg --decrypt " ++ pass ++ " | copy" -- “copy” comes with the xmonad module in the nix configuration