This command dumps a raw message identified by a filename to the standard output. It allows MUAs to access the messages for piping, attachment manipulation, etc. in the same way as it is done in notmuch-show-mode (through notmuch show subcommand). This will simplify the MUAs when they need to operate with a remote database. Signed-off-by: Michal Sojka <sojkam1@fel.cvut.cz> --- NEWS | 3 +++ notmuch-client.h | 3 +++ notmuch-show.c | 39 +++++++++++++++++++++++++++++++++++++++ notmuch.c | 4 ++++ 4 files changed, 49 insertions(+), 0 deletions(-) diff --git a/NEWS b/NEWS index eba0fd5..1a81e64 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,6 @@ +A new subcommand 'cat' was added, which simplifies use of Emacs +interface with remote database (accessed over SSH). + Notmuch 0.2 (2010-04-16) ======================== This is the second release of the notmuch mail system, with actual diff --git a/notmuch-client.h b/notmuch-client.h index d36b9ec..0efc41c 100644 --- a/notmuch-client.h +++ b/notmuch-client.h @@ -111,6 +111,9 @@ int notmuch_search_tags_command (void *ctx, int argc, char *argv[]); int +notmuch_cat_command (void *ctx, int argc, char *argv[]); + +int notmuch_part_command (void *ctx, int argc, char *argv[]); const char * diff --git a/notmuch-show.c b/notmuch-show.c index 76873a1..bade9bb 100644 --- a/notmuch-show.c +++ b/notmuch-show.c @@ -504,6 +504,45 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[])) } int +notmuch_cat_command (void *ctx, unused (int argc), unused (char *argv[])) +{ + int i; + FILE *file; + const char *filename; + size_t size; + char buf[4096]; + + (void)ctx; + + for (i = 0; i < argc && argv[i][0] == '-'; i++) { + fprintf (stderr, "Unrecognized option: %s\n", argv[i]); + return 1; + } + + argc -= i; + argv += i; + + if (argc == 0) { + fprintf (stderr, "Error: No filename given\n"); + return 1; + } + filename = argv[0]; + + file = fopen (filename, "r"); + if (file == NULL) { + fprintf (stderr, "Error: Cannot open %s: %s\n", filename, strerror (errno)); + return 1; + } + while (!feof (file)) { + size = fread(buf, 1, sizeof(buf), file); + fwrite (buf, size, 1, stdout); + } + fclose (file); + + return 0; +} + +int notmuch_part_command (void *ctx, unused (int argc), unused (char *argv[])) { notmuch_config_t *config; diff --git a/notmuch.c b/notmuch.c index 0eea5e1..477d746 100644 --- a/notmuch.c +++ b/notmuch.c @@ -296,6 +296,10 @@ command_t commands[] = { "\tcontain tags only from messages that match the search-term(s).\n" "\n" "\tIn both cases the list will be alphabetically sorted." }, + { "cat", notmuch_cat_command, + "<path>", + "Dump raw message identified by path to standard output.", + "" }, { "part", notmuch_part_command, "--part=<num> <search-terms>", "Output a single MIME part of a message.", -- 1.7.0.4