]> gitweb.michael.orlitzky.com - dead/halcyon.git/blobdiff - src/CommandLine.hs
Add a farewell TODO list.
[dead/halcyon.git] / src / CommandLine.hs
index 06c072e8715af292cb8a5d83ffa5ed0cd29b2aa4..45d43abe41dc5082d6edcf3b71267b32c18f4c43 100644 (file)
 module CommandLine (
-  apply_args,
-  show_help
-  )
+  get_args,
+  show_help )
 where
 
-import System.Console.CmdArgs
-import System.Console.CmdArgs.Explicit (process)
-import System.Environment (getArgs, withArgs)
-import System.Exit (ExitCode(..), exitWith)
-import System.IO (hPutStrLn, stderr)
+import System.Console.CmdArgs (
+  (&=),
+  args,
+  cmdArgs,
+  def,
+  details,
+  groupname,
+  help,
+  helpArg,
+  program,
+  summary,
+  typ,
+  typFile,
+  versionArg )
+import System.Environment ( withArgs )
 
 -- Get the version from Cabal.
-import Paths_halcyon (version)
-import Data.Version (showVersion)
+import Paths_halcyon ( version )
+import Data.Version ( showVersion )
 
-import ExitCodes
-import OptionalConfiguration
+import OptionalConfiguration ( OptionalCfg(..) )
 
+
+-- | The description of the program, displayed as part of the help.
+--
 description :: String
 description =
   "Monitor a list of Twitter accounts and display or email any new tweets."
 
+
+-- | The name of this program.
+--
 program_name :: String
 program_name = "halcyon"
 
+
+-- | A summary string output as part of the help.
+--
 my_summary :: String
 my_summary = program_name ++ "-" ++ (showVersion version)
 
+
+-- | Help string for the \"access_secret\" option.
+--
+access_secret_help :: String
+access_secret_help = "Your Twitter API access secret"
+
+
+-- | Help string for the \"access_token\" option
+--
+access_token_help :: String
+access_token_help = "Your Twitter API access token"
+
+
+-- | Help string for the \"consumer_key\" option.
+--
 consumer_key_help :: String
 consumer_key_help = "Your Twitter API consumer key"
 
+
+-- | Help string for the \"consumer_secret\" option.
+--
 consumer_secret_help :: String
 consumer_secret_help = "Your Twitter API consumer secret"
 
-access_token_help :: String
-access_token_help = "Your Twitter API access token"
-
-access_secret_help :: String
-access_secret_help = "Your Twitter API access secret"
 
-heartbeat_help :: String
-heartbeat_help = "How many seconds to wait between polling"
+-- | A description of the \"daemonize\" option.
+--
+daemonize_help :: String
+daemonize_help = "Run as a daemon, in the background."
 
-to_address_help :: String
-to_address_help = "Send tweets to ADDRESS"
 
+-- | Help string for the \"from_address\" option.
+--
 from_address_help :: String
 from_address_help = "Send tweets from ADDRESS"
 
-sendmail_path_help :: String
-sendmail_path_help = "Use PATH to send mail"
 
+-- | Help string for the \"heartbeat\" option.
+--
+heartbeat_help :: String
+heartbeat_help = "How many seconds to wait between polling"
+
+
+-- | Help string for the \"ignore_replies\" option.
+--
 ignore_replies_help :: String
 ignore_replies_help = "Ignore replies to other tweets"
 
+
+-- | Help string for the \"ignore_retweets\" option.
+--
 ignore_retweets_help :: String
 ignore_retweets_help = "Ignore retweets from other users"
 
+
+-- | A description of the "pidfile" option.
+pidfile_help :: String
+pidfile_help =
+  "Location to create PID file (daemon only)."
+
+
+-- | A description of the "run_as_group" option.
+run_as_group_help :: String
+run_as_group_help =
+  "System group to run as (daemon only)."
+
+
+-- | A description of the "run_as_user" option.
+run_as_user_help :: String
+run_as_user_help =
+  "System user to run under (daemon only)."
+
+
+-- | Help string for the \"to_address\" option.
+--
+to_address_help :: String
+to_address_help = "Send tweets to ADDRESS"
+
+
+
+-- | Help string for the \"sendmail_path\" option.
+--
+sendmail_path_help :: String
+sendmail_path_help = "Use PATH to send mail"
+
+
+-- | Help string for the \"verbose\" option.
+--
 verbose_help :: String
 verbose_help = "Be verbose about stuff"
 
-arg_spec :: Mode (CmdArgs OptionalCfg)
+
+arg_spec :: OptionalCfg
 arg_spec =
-  cmdArgsMode $
-    OptionalCfg {
-      consumer_key =
-        def &= typ "KEY"
-            &= groupname "Twitter API"
-            &= help consumer_key_help,
-
-      consumer_secret =
-        def &= typ "SECRET"
-            &= groupname "Twitter API"
-            &= help consumer_secret_help,
-
-      access_token =
-        def &= typ "TOKEN"
-            &= groupname "Twitter API"
-            &= help access_token_help,
-
-      access_secret =
-        def &= typ "SECRET"
-            &= groupname "Twitter API"
-            &= help access_secret_help,
-
-      heartbeat =
-        def &= groupname "Miscellaneous"
-            &= help heartbeat_help,
-
-      ignore_replies =
-        def &= groupname "Miscellaneous"
-            &= help ignore_replies_help,
-
-      ignore_retweets =
-        def &= groupname "Miscellaneous"
-            &= help ignore_retweets_help,
-
-      verbose =
-        def &= groupname "Miscellaneous"
-            &= help verbose_help,
-
-      sendmail_path =
-        def &= typ "PATH"
-            &= groupname "Mail Options"
-            &= help sendmail_path_help,
-
-      from_address =
-        def &= typ "ADDRESS"
-            &= groupname "Mail Options"
-            &= help from_address_help,
-
-      to_address =
-        def &= typ "ADDRESS"
-            &= groupname "Mail Options"
-            &= help to_address_help,
-
-      usernames =
-        def &= args
-            &= typ "USERNAMES" }
-
-    &= program program_name
-    &= summary my_summary
-    &= details [description]
-    &= helpArg [groupname "Common flags"]
-    &= versionArg [groupname "Common flags"]
+  OptionalCfg {
 
-show_help :: IO OptionalCfg
-show_help = withArgs ["--help"] parse_args >>= cmdArgsApply
+   access_secret =
+      def &= typ "SECRET"
+          &= groupname "Twitter API"
+          &= help access_secret_help,
+
+    access_token =
+      def &= typ "TOKEN"
+          &= groupname "Twitter API"
+          &= help access_token_help,
 
+    consumer_key =
+      def &= typ "KEY"
+          &= groupname "Twitter API"
+          &= help consumer_key_help,
 
+    consumer_secret =
+      def &= typ "SECRET"
+          &= groupname "Twitter API"
+          &= help consumer_secret_help,
 
-parse_args :: IO (CmdArgs OptionalCfg)
-parse_args = do
-  x <- getArgs
-  let y = process arg_spec x
-  case y of
-    Right result -> return result
-    Left err -> do
-      hPutStrLn stderr err
-      exitWith (ExitFailure exit_args_parse_failed)
+
+   daemonize =
+      def &= groupname "Miscellaneous"
+          &= help daemonize_help,
+
+   from_address =
+      def &= typ "ADDRESS"
+          &= groupname "Mail Options"
+          &= help from_address_help,
+
+    heartbeat =
+      def &= groupname "Miscellaneous"
+          &= help heartbeat_help,
+
+    ignore_replies =
+      def &= groupname "Miscellaneous"
+          &= help ignore_replies_help,
+
+    ignore_retweets =
+      def &= groupname "Miscellaneous"
+          &= help ignore_retweets_help,
+
+    pidfile =
+      def &= typFile
+          &= help pidfile_help,
+
+    run_as_group =
+      def &= typ "GROUP"
+          &= help run_as_group_help,
+
+    run_as_user =
+      def &= typ "USER"
+          &= help run_as_user_help,
+
+    sendmail_path =
+      def &= typ "PATH"
+          &= groupname "Mail Options"
+          &= help sendmail_path_help,
+
+    to_address =
+      def &= typ "ADDRESS"
+          &= groupname "Mail Options"
+          &= help to_address_help,
+
+    usernames =
+      def &= args
+          &= typ "USERNAMES",
+
+    verbose =
+      def &= groupname "Miscellaneous"
+          &= help verbose_help }
+
+  &= program program_name
+  &= summary my_summary
+  &= details [description]
+  &= helpArg [groupname "Common flags"]
+  &= versionArg [groupname "Common flags"]
+
+
+show_help :: IO OptionalCfg
+show_help = withArgs ["--help"] get_args
 
 
--- | Really get the command-line arguments. This calls 'parse_args'
---   first to replace the default "wrong number of arguments" error,
---   and then runs 'cmdArgsApply' on the result to do what the
---   'cmdArgs' function usually does.
-apply_args :: IO OptionalCfg
-apply_args =
-  parse_args >>= cmdArgsApply
+get_args :: IO OptionalCfg
+get_args = cmdArgs arg_spec