]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch.c
notmuch: Reference help, don't print it for unknown commands.
[notmuch] / notmuch.c
index c6807e832af2fef868e346630321bdd3e8d94aaa..2465e16a3da6c9b0fcf1801a2ba25861a03f5834 100644 (file)
--- a/notmuch.c
+++ b/notmuch.c
@@ -733,70 +733,6 @@ query_string_from_args (void *ctx, int argc, char *argv[])
     return query_string;
 }
 
-static int
-search_command (int argc, char *argv[])
-{
-    void *local = talloc_new (NULL);
-    notmuch_database_t *notmuch = NULL;
-    notmuch_query_t *query;
-    notmuch_thread_results_t *results;
-    notmuch_thread_t *thread;
-    notmuch_tags_t *tags;
-    char *query_str;
-    notmuch_status_t ret = NOTMUCH_STATUS_SUCCESS;
-
-    notmuch = notmuch_database_open (NULL);
-    if (notmuch == NULL) {
-       ret = 1;
-       goto DONE;
-    }
-
-    query_str = query_string_from_args (local, argc, argv);
-
-    query = notmuch_query_create (notmuch, query_str);
-    if (query == NULL) {
-       fprintf (stderr, "Out of memory\n");
-       ret = 1;
-       goto DONE;
-    }
-
-    for (results = notmuch_query_search_threads (query);
-        notmuch_thread_results_has_more (results);
-        notmuch_thread_results_advance (results))
-    {
-       int first = 1;
-
-       thread = notmuch_thread_results_get (results);
-
-       printf ("%s %s",
-               notmuch_thread_get_thread_id (thread),
-               notmuch_thread_get_subject (thread));
-
-       printf (" (");
-       for (tags = notmuch_thread_get_tags (thread);
-            notmuch_tags_has_more (tags);
-            notmuch_tags_advance (tags))
-       {
-           if (! first)
-               printf (" ");
-           printf ("%s", notmuch_tags_get (tags));
-           first = 0;
-       }
-       printf (")\n");
-
-       notmuch_thread_destroy (thread);
-    }
-
-    notmuch_query_destroy (query);
-
-  DONE:
-    if (notmuch)
-       notmuch_database_close (notmuch);
-    talloc_free (local);
-
-    return ret;
-}
-
 /* Format a nice representation of 'time' relative to the current time.
  *
  * Examples include:
@@ -834,7 +770,7 @@ _format_relative_date (void *ctx, time_t then)
 
     if (delta > 180 * DAY) {
        strftime (result, RELATIVE_DATE_MAX,
-                 "%F", &tm_then);
+                 "%F", &tm_then); /* 2008-06-30 */
        return result;
     }
 
@@ -844,30 +780,102 @@ _format_relative_date (void *ctx, time_t then)
        return result;
     }
 
-    if (delta <= 6 * DAY) {
+    if (delta <= 7 * DAY) {
        if (tm_then.tm_wday == tm_now.tm_wday &&
            delta < DAY)
        {
            strftime (result, RELATIVE_DATE_MAX,
-                     "%R", &tm_then);
+                     "%R", &tm_then); /* 12:30 */
            return result;
        } else if ((tm_now.tm_wday + 7 - tm_then.tm_wday) % 7 == 1) {
            return "Yesterday";
        } else {
-           strftime (result, RELATIVE_DATE_MAX,
-                     "%A", &tm_then);
-           return result;
+           if (tm_then.tm_wday != tm_now.tm_wday) {
+               strftime (result, RELATIVE_DATE_MAX,
+                         "%A", &tm_then); /* Monday */
+               return result;
+           }
        }
     }
 
     strftime (result, RELATIVE_DATE_MAX,
-             "%b %d", &tm_then);
+             "%b %d", &tm_then); /* Oct. 12 */
     return result;
 }
 #undef MINUTE
 #undef HOUR
 #undef DAY
 
+static int
+search_command (int argc, char *argv[])
+{
+    void *local = talloc_new (NULL);
+    notmuch_database_t *notmuch = NULL;
+    notmuch_query_t *query;
+    notmuch_thread_results_t *results;
+    notmuch_thread_t *thread;
+    notmuch_tags_t *tags;
+    char *query_str;
+    const char *relative_date;
+    time_t date;
+    notmuch_status_t ret = NOTMUCH_STATUS_SUCCESS;
+
+    notmuch = notmuch_database_open (NULL);
+    if (notmuch == NULL) {
+       ret = 1;
+       goto DONE;
+    }
+
+    query_str = query_string_from_args (local, argc, argv);
+
+    query = notmuch_query_create (notmuch, query_str);
+    if (query == NULL) {
+       fprintf (stderr, "Out of memory\n");
+       ret = 1;
+       goto DONE;
+    }
+
+    for (results = notmuch_query_search_threads (query);
+        notmuch_thread_results_has_more (results);
+        notmuch_thread_results_advance (results))
+    {
+       int first = 1;
+
+       thread = notmuch_thread_results_get (results);
+
+       date = notmuch_thread_get_oldest_date (thread);
+       relative_date = _format_relative_date (local, date);
+
+       printf ("%s (%s) %s",
+               notmuch_thread_get_thread_id (thread),
+               relative_date,
+               notmuch_thread_get_subject (thread));
+
+       printf (" (");
+       for (tags = notmuch_thread_get_tags (thread);
+            notmuch_tags_has_more (tags);
+            notmuch_tags_advance (tags))
+       {
+           if (! first)
+               printf (" ");
+           printf ("%s", notmuch_tags_get (tags));
+           first = 0;
+       }
+       printf (")\n");
+
+       notmuch_thread_destroy (thread);
+    }
+
+    notmuch_query_destroy (query);
+
+  DONE:
+    if (notmuch)
+       notmuch_database_close (notmuch);
+    talloc_free (local);
+
+    return ret;
+}
+
 /* Get a nice, single-line summary of message. */
 static const char *
 _get_one_line_summary (void *ctx, notmuch_message_t *message)
@@ -1442,8 +1450,8 @@ main (int argc, char *argv[])
 
     /* Don't complain about "help" being an unknown command when we're
        about to provide exactly what's wanted anyway. */
-    fprintf (stderr, "Error: Unknown command '%s'\n\n", argv[1]);
-    usage ();
+    fprintf (stderr, "Error: Unknown command '%s' (see \"notmuch help\")\n",
+            argv[1]);
 
     return 1;
 }