[PATCH 1/2] Add 'cat' subcommand
Michal Sojka
sojkam1 at fel.cvut.cz
Tue Apr 20 00:16:32 PDT 2010
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 at 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
More information about the notmuch
mailing list