*
* Examples include:
*
- * 5 minutes ago (For times less than 60 minutes ago)
- * 12:30 (For times >60 minutes but still today)
- * Yesterday
- * Monday (Before yesterday but fewer than 7 days ago)
- * Oct. 12 (Between 7 and 180 days ago (about 6 months))
+ * 5 mins. ago (For times less than 60 minutes ago)
+ * Today 12:30 (For times >60 minutes but still today)
+ * Yest. 12:30
+ * Mon. 12:30 (Before yesterday but fewer than 7 days ago)
+ * October 12 (Between 7 and 180 days ago (about 6 months))
* 2008-06-30 (More than 180 days ago)
*/
#define MINUTE (60)
if (delta < 3600) {
snprintf (result, RELATIVE_DATE_MAX,
- "%d minutes ago", (int) (delta / 60));
+ "%d mins. ago", (int) (delta / 60));
return result;
}
delta < DAY)
{
strftime (result, RELATIVE_DATE_MAX,
- "%R", &tm_then); /* 12:30 */
+ "Today %R", &tm_then); /* Today 12:30 */
return result;
} else if ((tm_now.tm_wday + 7 - tm_then.tm_wday) % 7 == 1) {
- return "Yesterday";
+ strftime (result, RELATIVE_DATE_MAX,
+ "Yest. %R", &tm_then); /* Yest. 12:30 */
+ return result;
} else {
if (tm_then.tm_wday != tm_now.tm_wday) {
strftime (result, RELATIVE_DATE_MAX,
- "%A", &tm_then); /* Monday */
+ "%a. %R", &tm_then); /* Mon. 12:30 */
return result;
}
}
}
strftime (result, RELATIVE_DATE_MAX,
- "%b %d", &tm_then); /* Oct. 12 */
+ "%B %d", &tm_then); /* October 12 */
return result;
}
#undef MINUTE
date = notmuch_thread_get_oldest_date (thread);
relative_date = _format_relative_date (local, date);
- printf ("%s (%s) %s",
+ printf ("%s %12s %s",
notmuch_thread_get_thread_id (thread),
relative_date,
notmuch_thread_get_subject (thread));
const char *filename = g_mime_part_get_filename (GMIME_PART (part));
content_type = g_mime_object_get_content_type (GMIME_OBJECT (part));
- printf ("%%attachment{ ID: %d, Content-type: %s, ",
+ printf ("\fattachment{ ID: %d, Content-type: %s\n",
*part_count,
g_mime_content_type_to_string (content_type));
- printf ("Filename: %s ", filename);
- printf ("%%attachment}\n");
+ printf ("Attachment: %s (%s)\n", filename,
+ g_mime_content_type_to_string (content_type));
+ printf ("\fattachment}\n");
return;
}
content_type = g_mime_object_get_content_type (GMIME_OBJECT (part));
- printf ("%%part{ ID: %d, Content-type: %s\n",
+ printf ("\fpart{ ID: %d, Content-type: %s\n",
*part_count,
g_mime_content_type_to_string (content_type));
if (wrapper)
g_mime_data_wrapper_write_to_stream (wrapper, stream);
}
+ else
+ {
+ printf ("Non-text part: %s\n",
+ g_mime_content_type_to_string (content_type));
+ }
- printf ("%%part}\n");
+ printf ("\fpart}\n");
g_object_unref (stream);
}
return ret;
}
+static int
+_message_is_unread (notmuch_message_t *message)
+{
+ notmuch_tags_t *tags;
+ const char *tag;
+
+ for (tags = notmuch_message_get_tags (message);
+ notmuch_tags_has_more (tags);
+ notmuch_tags_advance (tags))
+ {
+ tag = notmuch_tags_get (tags);
+
+ if (strcmp (tag, "unread") == 0)
+ return 1;
+ }
+
+ return 0;
+}
+
static int
show_command (void *ctx, unused (int argc), unused (char *argv[]))
{
notmuch_messages_t *messages;
notmuch_message_t *message;
int ret = 0;
+ int unread;
const char *headers[] = {
"Subject", "From", "To", "Cc", "Bcc", "Date"
notmuch_messages_advance (messages))
{
message = notmuch_messages_get (messages);
+ unread = _message_is_unread (message);
- printf ("%%message{\n");
+ printf ("\fmessage{ ID: %s %s\n",
+ notmuch_message_get_message_id (message),
+ unread ? "unread" : "");
- printf ("%%header{\n");
+ printf ("\fheader{\n");
printf ("%s\n", _get_one_line_summary (local, message));
printf ("%s: %s\n", name, value);
}
- printf ("%%header}\n");
+ printf ("\fheader}\n");
+ printf ("\fbody{\n");
show_message_body (notmuch_message_get_filename (message));
- printf ("%%message}\n");
+ printf ("\fbody}\n");
+
+ printf ("\fmessage}\n");
notmuch_message_destroy (message);
}