[RFC PATCH 1/2] cli: add support for global options that get passed to sub-commands
Jani Nikula
jani at nikula.org
Sat Aug 31 03:34:30 PDT 2013
This allows sub-commands to have access to global options.
---
notmuch-client.h | 21 +++++++++++++++++++++
notmuch-config.c | 29 +++++++++++++++++++++++++++++
notmuch.c | 10 ++++++++++
3 files changed, 60 insertions(+)
diff --git a/notmuch-client.h b/notmuch-client.h
index afb0ddf..5656426 100644
--- a/notmuch-client.h
+++ b/notmuch-client.h
@@ -320,6 +320,27 @@ notmuch_config_set_search_exclude_tags (notmuch_config_t *config,
const char *list[],
size_t length);
+/* global options */
+typedef struct _notmuch_global_options {
+ notmuch_bool_t debug;
+ notmuch_bool_t verbose;
+ notmuch_bool_t no_hooks;
+} notmuch_global_options_t;
+
+void
+notmuch_global_set (notmuch_config_t *config,
+ const notmuch_global_options_t *global_options);
+
+notmuch_bool_t
+notmuch_global_get_debug (notmuch_config_t *config);
+
+notmuch_bool_t
+notmuch_global_get_verbose (notmuch_config_t *config);
+
+notmuch_bool_t
+notmuch_global_get_no_hooks (notmuch_config_t *config);
+
+
int
notmuch_run_hook (const char *db_path, const char *hook);
diff --git a/notmuch-config.c b/notmuch-config.c
index 6845e3c..4cb29eb 100644
--- a/notmuch-config.c
+++ b/notmuch-config.c
@@ -118,6 +118,9 @@ struct _notmuch_config {
notmuch_bool_t maildir_synchronize_flags;
const char **search_exclude_tags;
size_t search_exclude_tags_length;
+
+ /* global options */
+ notmuch_global_options_t global_options;
};
static int
@@ -883,3 +886,29 @@ notmuch_config_set_maildir_synchronize_flags (notmuch_config_t *config,
"maildir", "synchronize_flags", synchronize_flags);
config->maildir_synchronize_flags = synchronize_flags;
}
+
+/* global options */
+void
+notmuch_global_set (notmuch_config_t *config,
+ const notmuch_global_options_t *global_options)
+{
+ config->global_options = *global_options;
+}
+
+notmuch_bool_t
+notmuch_global_get_debug (notmuch_config_t *config)
+{
+ return config->global_options.debug;
+}
+
+notmuch_bool_t
+notmuch_global_get_verbose (notmuch_config_t *config)
+{
+ return config->global_options.verbose;
+}
+
+notmuch_bool_t
+notmuch_global_get_no_hooks (notmuch_config_t *config)
+{
+ return config->global_options.no_hooks;
+}
diff --git a/notmuch.c b/notmuch.c
index 78d29a8..11cdfd7 100644
--- a/notmuch.c
+++ b/notmuch.c
@@ -252,11 +252,19 @@ main (int argc, char *argv[])
notmuch_bool_t print_help=FALSE, print_version=FALSE;
int opt_index;
int ret = 0;
+ notmuch_global_options_t global_options = {
+ .debug = FALSE,
+ .verbose = FALSE,
+ .no_hooks = FALSE,
+ };
notmuch_opt_desc_t options[] = {
{ NOTMUCH_OPT_BOOLEAN, &print_help, "help", 'h', 0 },
{ NOTMUCH_OPT_BOOLEAN, &print_version, "version", 'v', 0 },
{ NOTMUCH_OPT_STRING, &config_file_name, "config", 'c', 0 },
+ { NOTMUCH_OPT_BOOLEAN, &global_options.debug, "debug", 'd', 0 },
+ { NOTMUCH_OPT_BOOLEAN, &global_options.verbose, "verbose", 'V', 0 },
+ { NOTMUCH_OPT_BOOLEAN, &global_options.no_hooks, "no-hooks", 'N', 0 },
{ 0, 0, 0, 0, 0 }
};
@@ -300,6 +308,8 @@ main (int argc, char *argv[])
if (!config)
return 1;
+ notmuch_global_set (config, &global_options);
+
ret = (command->function)(config, argc - opt_index, argv + opt_index);
notmuch_config_close (config);
--
1.7.10.4
More information about the notmuch
mailing list