From dabbfc3b62b1699b30611802f4cbba69e14bd41c Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Sun, 31 Jul 2011 12:17:14 +0300 Subject: [PATCH] * use the sexp export that moved to mu-msg-sexp --- NEWS | 2 +- src/Makefile.am | 1 + src/mu-cmd-find.c | 103 +++++++++++++++------------------------------- src/mu-cmd.c | 25 ++++++++--- 4 files changed, 56 insertions(+), 75 deletions(-) diff --git a/NEWS b/NEWS index 9aedbe70..c49868ee 100644 --- a/NEWS +++ b/NEWS @@ -23,7 +23,7 @@ wildcards - remove --xquery completely; use --output=xquery instead - fix progress info in 'mu index' - - display the references for a message using the 'r' character (mu find) + - display the references for a message using the 'r' character (xmu find) - remove --summary-len/-k, instead use --summary for mu view and mu find, and - support colorized output for some sub-commands (view, cfind and extract). Disabled by default, use --color to enable, or set env diff --git a/src/Makefile.am b/src/Makefile.am index 1028c34b..5733ac74 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -85,6 +85,7 @@ libmu_la_SOURCES= \ mu-msg-prio.c \ mu-msg-prio.h \ mu-msg-priv.h \ + mu-msg-sexp.c \ mu-msg.c \ mu-msg.h \ mu-msg.h \ diff --git a/src/mu-cmd-find.c b/src/mu-cmd-find.c index f93ce5f2..cc3ea10a 100644 --- a/src/mu-cmd-find.c +++ b/src/mu-cmd-find.c @@ -709,6 +709,38 @@ print_attr_xml (const char* elm, const char *str) g_free (esc); } + + +static gboolean +output_sexp (MuMsgIter *iter, size_t *count) +{ + MuMsgIter *myiter; + size_t mycount; + + g_return_val_if_fail (iter, FALSE); + + for (myiter = iter, mycount = 0; !mu_msg_iter_is_done (myiter); + mu_msg_iter_next (myiter), ++mycount) { + + MuMsg *msg; + char *sexp; + + msg = mu_msg_iter_get_msg (iter, NULL); /* don't unref */ + if (!msg) + return FALSE; + + sexp = mu_msg_to_sexp (msg, TRUE); + fputs (sexp, stdout); + g_free (sexp); + } + + + if (count) + *count = mycount; + + return TRUE; +} + static gboolean output_xml (MuMsgIter *iter, size_t *count) { @@ -761,7 +793,7 @@ print_attr_json (const char* elm, const char *str, gboolean comma) if (!str || strlen(str) == 0) return; /* empty: don't include */ - esc = mu_str_escape_c_literal (str); + esc = mu_str_escape_c_literal (str, FALSE); g_print ("\t\t\t\"%s\":\"%s\"%s\n", elm, esc, comma ? "," : ""); g_free (esc); } @@ -793,6 +825,7 @@ output_json (MuMsgIter *iter, size_t *count) print_attr_json ("to", mu_msg_get_to (msg),TRUE); print_attr_json ("cc", mu_msg_get_cc (msg),TRUE); print_attr_json ("subject", mu_msg_get_subject (msg), TRUE); + /* emacs likes it's date in a particular way... */ g_print ("\t\t\t\"date\":%u,\n", (unsigned) mu_msg_get_date (msg)); g_print ("\t\t\t\"size\":%u,\n", @@ -811,74 +844,6 @@ output_json (MuMsgIter *iter, size_t *count) } -static void -print_attr_sexp (const char* elm, const char *str, gboolean nl) -{ - gchar *esc; - - if (!str || strlen(str) == 0) - return; /* empty: don't include */ - - esc = mu_str_escape_c_literal (str); - - g_print (" :%s \"%s\"%s", elm, esc, nl ? "\n" : ""); - g_free (esc); -} - -static void -output_sexp_date (time_t t) -{ - unsigned date_high, date_low; - - /* emacs likes it's date in a particular way... */ - date_high = t >> 16; - date_low = t & 0xffff; - - g_print (" :date %u\n", (unsigned)t); - g_print (" :date-high %u\n", date_high); - g_print (" :date-low %u\n", date_low); -} - -static gboolean -output_sexp (MuMsgIter *iter, size_t *count) -{ - MuMsgIter *myiter; - size_t mycount; - g_return_val_if_fail (iter, FALSE); - - for (myiter = iter, mycount = 0; !mu_msg_iter_is_done (myiter); - mu_msg_iter_next (myiter), ++mycount) { - - MuMsg *msg; - if (!(msg = mu_msg_iter_get_msg (iter, NULL))) /* don't unref */ - return FALSE; - - if (mycount != 0) - g_print ("\n"); - - g_print ("(%u\n", (unsigned)mycount); - print_attr_sexp ("from", mu_msg_get_from (msg),TRUE); - print_attr_sexp ("to", mu_msg_get_to (msg),TRUE); - print_attr_sexp ("cc", mu_msg_get_cc (msg),TRUE); - print_attr_sexp ("subject", mu_msg_get_subject (msg),TRUE); - output_sexp_date (mu_msg_get_date (msg)); - g_print (" :size %u\n", (unsigned) mu_msg_get_size (msg)); - print_attr_sexp ("msgid", mu_msg_get_msgid (msg),TRUE); - print_attr_sexp ("path", mu_msg_get_path (msg),TRUE); - print_attr_sexp ("maildir", mu_msg_get_maildir (msg),FALSE); - g_print (")\n;;eom"); - } - - fputs ("\n", stdout); - - if (count) - *count = mycount; - - return TRUE; -} - - - MuExitCode mu_cmd_find (MuConfig *opts) { diff --git a/src/mu-cmd.c b/src/mu-cmd.c index 7190cf77..7870e33a 100644 --- a/src/mu-cmd.c +++ b/src/mu-cmd.c @@ -38,6 +38,14 @@ #define VIEW_TERMINATOR '\f' /* form-feed */ +static gboolean +view_msg_sexp (MuMsg *msg) +{ + fputs (mu_msg_to_sexp (msg, FALSE), stdout); + return TRUE; +} + + static void each_part (MuMsg *msg, MuMsgPart *part, gchar **attach) { @@ -114,7 +122,7 @@ body_or_summary (MuMsg *msg, gboolean summary, gboolean color) /* we ignore fields for now */ static gboolean -view_msg (MuMsg *msg, const gchar *fields, gboolean summary, +view_msg_plain (MuMsg *msg, const gchar *fields, gboolean summary, gboolean color) { gchar *attachs; @@ -164,11 +172,18 @@ handle_msg (const char *fname, MuConfig *opts) g_error_free (err); return MU_EXITCODE_ERROR; } - - if (view_msg (msg, NULL, opts->summary, opts->color)) - rv = MU_EXITCODE_OK; - else + + switch (opts->format) { + case MU_CONFIG_FORMAT_PLAIN: + rv = view_msg_plain (msg, NULL, opts->summary, opts->color); + break; + case MU_CONFIG_FORMAT_SEXP: + rv = view_msg_sexp (msg); + break; + default: + g_critical ("bug: should not be reached"); rv = MU_EXITCODE_ERROR; + } mu_msg_unref (msg);