Add preliminary arguments handling

This commit is contained in:
rnhmjoj 2015-07-07 21:00:34 +02:00
parent b45c3ad8f1
commit 2bfc5a440d

View File

@ -1,10 +1,14 @@
{-# LANGUAGE RecordWildCards #-}
import Types import Types
import Pretty import Pretty
import Parser import Parser
import Control.Monad (when)
import Data.List (isInfixOf) import Data.List (isInfixOf)
import System.FilePath (takeBaseName) import System.FilePath (takeBaseName)
import System.Process (readProcess, callCommand) import System.Process (readProcess, callCommand)
import System.Console.ArgParser
-- Search functions -- -- Search functions --
@ -51,10 +55,40 @@ sendClipboard text =
callCommand $ "echo " ++ (show text) ++ " | pbcopy" callCommand $ "echo " ++ (show text) ++ " | pbcopy"
-- CLI arguments --
data ProgArgs = ProgArgs
{ searchTerm :: String
, keychain :: FilePath
, exactMatches :: String
, resultsLimit :: Int
, contentOnly :: Bool
, noClipboard :: Bool
} deriving (Show)
parser :: ParserSpec ProgArgs
parser = ProgArgs
`parsedBy` reqPos "term" `Descr` "Keychain search term"
`andBy` optFlag "" "keychain" `Descr` "Use a specific keychain"
`andBy` optFlag "" "exact" `Descr` "Only return exact matches"
`andBy` optFlag 10 "limit" `Descr` "Set upper results limit"
`andBy` boolFlag "content" `Descr` "Print only the items content"
`andBy` boolFlag "clipboard" `Descr` "Disable clipboard paste"
interface :: IO (CmdLnInterface ProgArgs)
interface =
(`setAppDescr` "Quickly access the OSX keychain") <$>
(`setAppEpilog` "TODO") <$>
mkApp parser
main :: IO () main :: IO ()
main = do main = interface >>= (`runApp` search)
search :: ProgArgs -> IO ()
search ProgArgs {..} = do
res <- fuzzy "gog.com" <$> getKeychain res <- fuzzy "gog.com" <$> getKeychain
sendClipboard (content (head res))
pprint res pprint res
when (not noClipboard) (sendClipboard (content $ head res))