diff --git a/notmuch-client.h b/notmuch-client.h index 02ff8b74..f3396d0d 100644 --- a/notmuch-client.h +++ b/notmuch-client.h @@ -145,7 +145,9 @@ show_message_body (const char *filename, typedef struct _notmuch_config notmuch_config_t; notmuch_config_t * -notmuch_config_open (void *ctx, const char *filename); +notmuch_config_open (void *ctx, + const char *filename, + notmuch_bool_t *is_new_ret); void notmuch_config_close (notmuch_config_t *config); diff --git a/notmuch-config.c b/notmuch-config.c index f7313bfa..248149c8 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -145,10 +145,15 @@ get_username_from_passwd_file (void *ctx) * in editing the file directly. */ notmuch_config_t * -notmuch_config_open (void *ctx, const char *filename) +notmuch_config_open (void *ctx, + const char *filename, + notmuch_bool_t *is_new_ret) { GError *error = NULL; - int config_file_is_new = 0; + int is_new = 0; + + if (is_new_ret) + *is_new_ret = 0; notmuch_config_t *config = talloc (ctx, notmuch_config_t); if (config == NULL) { @@ -188,7 +193,7 @@ notmuch_config_open (void *ctx, const char *filename) return NULL; } - config_file_is_new = 1; + is_new = 1; } if (notmuch_config_get_database_path (config) == NULL) { @@ -236,7 +241,7 @@ notmuch_config_open (void *ctx, const char *filename) /* When we create a new configuration file here, we add some * comments to help the user understand what can be done. */ - if (config_file_is_new) { + if (is_new) { g_key_file_set_comment (config->key_file, NULL, NULL, toplevel_config_comment, NULL); g_key_file_set_comment (config->key_file, "database", NULL, @@ -245,6 +250,9 @@ notmuch_config_open (void *ctx, const char *filename) user_config_comment, NULL); } + if (is_new_ret) + *is_new_ret = is_new; + return config; } diff --git a/notmuch-setup.c b/notmuch-setup.c index 6fd4ba5a..2c3404ff 100644 --- a/notmuch-setup.c +++ b/notmuch-setup.c @@ -168,6 +168,49 @@ make_path_absolute (void *ctx, const char *path) return path; } +static void +welcome_message_pre_setup (void) +{ + printf ( +"Welcome to notmuch!\n\n" + +"The goal of notmuch is to help you manage and search your collection of\n" +"email, and to efficiently keep up with the flow of email as it comes in.\n\n" + +"Notmuch needs to know a few things about you such as your name and email\n" +"address, as well as the directory that contains your email. This is where\n" +"you already have mail stored and where messages will be delivered in the\n" +"future. This directory can contain any number of sub-directories. Regular\n" +"files in these directories should be individual email messages. If there\n" +"are other, non-email files (such as indexes maintained by other email\n" +"programs) then notmuch will do its best to detect those and ignore them.\n\n" + +"If you already have your email being delivered to directories in either\n" +"maildir or mh format, then that's perfect. Mail storage that uses mbox\n" +"format, (where one mbox file contains many messages), will not work with\n" +"notmuch. If that's how your mail is currently stored, we recommend you\n" +"first convert it to maildir format with a utility such as mb2md. You can\n" +"continue configuring notmuch now, but be sure to complete the conversion\n" +"before you run \"notmuch new\" for the first time.\n\n"); +} + +static void +welcome_message_post_setup (void) +{ + printf ("\n" +"Notmuch is now configured, and the configuration settings are saved in\n" +"a file in your home directory named .notmuch-config . If you'd like to\n" +"change the configuration in the future, you can either edit that file\n" +"directly or run \"notmuch setup\".\n\n" + +"The next step is to run \"notmuch new\" which will create a database\n" +"that indexes all of your mail. Depending on the amount of mail you have\n" +"the initial indexing process can take a long time, so expect that.\n" +"Also, the resulting database will require roughly the same amount of\n" +"storage space as your current collection of email. So please ensure you\n" +"have sufficient storage space available now.\n\n"); +} + int notmuch_setup_command (unused (void *ctx), unused (int argc), unused (char *argv[])) @@ -179,6 +222,7 @@ notmuch_setup_command (unused (void *ctx), size_t old_other_emails_len; GPtrArray *other_emails; unsigned int i; + int is_new; #define prompt(format, ...) \ do { \ @@ -188,7 +232,10 @@ notmuch_setup_command (unused (void *ctx), chomp_newline (response); \ } while (0) - config = notmuch_config_open (ctx, NULL); + config = notmuch_config_open (ctx, NULL, &is_new); + + if (is_new) + welcome_message_pre_setup (); prompt ("Your full name [%s]: ", notmuch_config_get_user_name (config)); if (strlen (response)) @@ -235,5 +282,8 @@ notmuch_setup_command (unused (void *ctx), notmuch_config_save (config); + if (is_new) + welcome_message_post_setup (); + return 0; } diff --git a/notmuch.c b/notmuch.c index c3f0856f..c9b5c8b9 100644 --- a/notmuch.c +++ b/notmuch.c @@ -206,52 +206,13 @@ notmuch_help_command (unused (void *ctx), int argc, char *argv[]) } /* Handle the case of "notmuch" being invoked with no command - * argument. Print a welcome and explanatory message, then invoke - * notmuch_setup_command. + * argument. For now we just call notmuch_setup_command, but we plan + * to be more clever about this in the future. */ static int notmuch (void *ctx) { - int ret; - - printf ( -"Welcome to notmuch!\n\n" - -"The goal of notmuch is to help you manage and search your collection of\n" -"email, and to efficiently keep up with the flow of email as it comes in.\n\n" - -"Notmuch needs to know a few things about you such as your name and email\n" -"address, as well as the directory that contains your email. This is where\n" -"you already have mail stored and where messages will be delivered in the\n" -"future. This directory can contain any number of sub-directories. Regular\n" -"files in these directories should be individual email messages. If there\n" -"are other, non-email files (such as indexes maintained by other email\n" -"programs) then notmuch will do its best to detect those and ignore them.\n\n" - -"If you already have your email being delivered to directories in either\n" -"maildir or mh format, then that's perfect. Mail storage that uses mbox\n" -"format, (where one mbox file contains many messages), will not work with\n" -"notmuch. If that's how your mail is currently stored, we recommend you\n" -"first convert it to maildir format with a utility such as mb2md. You can\n" -"continue configuring notmuch now, but be sure to complete the conversion\n" -"before you run \"notmuch new\" for the first time.\n\n"); - - ret = notmuch_setup_command (ctx, 0, NULL); - - printf ("\n" -"Notmuch is now configured, and the configuration settings are saved in\n" -"a file in your home directory named .notmuch-config . If you'd like to\n" -"change the configuration in the future, you can either edit that file\n" -"directly or run \"notmuch setup\".\n\n" - -"The next step is to run \"notmuch new\" which will create a database\n" -"that indexes all of your mail. Depending on the amount of mail you have\n" -"the initial indexing process can take a long time, so expect that.\n" -"Also, the resulting database will require roughly the same amount of\n" -"storage space as your current collection of email. So please ensure you\n" -"have sufficient storage space available now.\n\n"); - - return ret; + return notmuch_setup_command (ctx, 0, NULL); } int