* [PATCH] Add --emit-message-id flag to notmuch-insert.
@ 2024-09-10 20:33 Brennan Vincent
2024-09-11 15:00 ` [PATCH v2] " Brennan Vincent
2024-09-11 16:09 ` [PATCH] emacs: Introduce notmuch-draftify-buffer command Brennan Vincent
0 siblings, 2 replies; 3+ messages in thread
From: Brennan Vincent @ 2024-09-10 20:33 UTC (permalink / raw)
To: notmuch
---
doc/man1/notmuch-insert.rst | 5 +++++
notmuch-insert.c | 26 +++++++++++++++++++++-----
2 files changed, 26 insertions(+), 5 deletions(-)
diff --git a/doc/man1/notmuch-insert.rst b/doc/man1/notmuch-insert.rst
index e05bd0b5..3848b8f6 100644
--- a/doc/man1/notmuch-insert.rst
+++ b/doc/man1/notmuch-insert.rst
@@ -66,6 +66,11 @@ Supported options for **insert** include
umask. By default, delivered mail is only readable by the current
user.
+.. option:: --emit-message-id
+
+ On successful exit (or with ``--keep``),
+ print the message ID of the newly indexed message.
+
.. option:: --decrypt=(true|nostash|auto|false)
If ``true`` and the message is encrypted, try to decrypt the
diff --git a/notmuch-insert.c b/notmuch-insert.c
index e44607ad..cbc88240 100644
--- a/notmuch-insert.c
+++ b/notmuch-insert.c
@@ -399,9 +399,10 @@ maildir_write_new (const void *ctx, int fdin, const char *maildir, bool world_re
* database results in error status regardless of keep.
*/
static notmuch_status_t
-add_file (notmuch_database_t *notmuch, const char *path, tag_op_list_t *tag_ops,
+add_file (const void *ctx, notmuch_database_t *notmuch, const char *path, tag_op_list_t *tag_ops,
bool synchronize_flags, bool keep,
- notmuch_indexopts_t *indexopts)
+ notmuch_indexopts_t *indexopts,
+ char **message_id_out)
{
notmuch_message_t *message;
notmuch_status_t status;
@@ -441,8 +442,6 @@ add_file (notmuch_database_t *notmuch, const char *path, tag_op_list_t *tag_ops,
}
DONE:
- notmuch_message_destroy (message);
-
if (status) {
if (keep) {
status = NOTMUCH_STATUS_SUCCESS;
@@ -458,6 +457,15 @@ add_file (notmuch_database_t *notmuch, const char *path, tag_op_list_t *tag_ops,
}
}
}
+ if (message_id_out) {
+ if (!status) {
+ *message_id_out = talloc_strdup(ctx, notmuch_message_get_message_id(message));
+ } else {
+ *message_id_out = NULL;
+ }
+ }
+ notmuch_message_destroy (message);
+
FAIL:
return status;
@@ -477,10 +485,12 @@ notmuch_insert_command (notmuch_database_t *notmuch, int argc, char *argv[])
bool keep = false;
bool hooks = true;
bool world_readable = false;
+ bool emit_message_id = true;
notmuch_bool_t synchronize_flags;
char *maildir;
char *newpath;
int opt_index;
+ char *message_id;
notmuch_indexopts_t *indexopts = notmuch_database_get_default_indexopts (notmuch);
void *local = talloc_new (NULL);
@@ -491,6 +501,7 @@ notmuch_insert_command (notmuch_database_t *notmuch, int argc, char *argv[])
{ .opt_bool = &keep, .name = "keep" },
{ .opt_bool = &hooks, .name = "hooks" },
{ .opt_bool = &world_readable, .name = "world-readable" },
+ { .opt_bool = &emit_message_id, .name = "emit-message-id" },
{ .opt_inherit = notmuch_shared_indexing_options },
{ .opt_inherit = notmuch_shared_options },
{ }
@@ -580,7 +591,8 @@ notmuch_insert_command (notmuch_database_t *notmuch, int argc, char *argv[])
}
/* Index the message. */
- status = add_file (notmuch, newpath, tag_ops, synchronize_flags, keep, indexopts);
+ status = add_file (local, notmuch, newpath, tag_ops, synchronize_flags, keep, indexopts,
+ emit_message_id ? &message_id : NULL);
/* Commit changes. */
close_status = notmuch_database_close (notmuch);
@@ -606,6 +618,10 @@ notmuch_insert_command (notmuch_database_t *notmuch, int argc, char *argv[])
}
}
+ if (!status && emit_message_id && message_id) {
+ printf("%s\n", message_id);
+ }
+
if (hooks && status == NOTMUCH_STATUS_SUCCESS) {
/* Ignore hook failures. */
notmuch_run_hook (notmuch, "post-insert");
--
2.45.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH v2] Add --emit-message-id flag to notmuch-insert.
2024-09-10 20:33 [PATCH] Add --emit-message-id flag to notmuch-insert Brennan Vincent
@ 2024-09-11 15:00 ` Brennan Vincent
2024-09-11 16:09 ` [PATCH] emacs: Introduce notmuch-draftify-buffer command Brennan Vincent
1 sibling, 0 replies; 3+ messages in thread
From: Brennan Vincent @ 2024-09-11 15:00 UTC (permalink / raw)
To: notmuch
---
doc/man1/notmuch-insert.rst | 5 +++++
notmuch-insert.c | 26 +++++++++++++++++++++-----
2 files changed, 26 insertions(+), 5 deletions(-)
diff --git a/doc/man1/notmuch-insert.rst b/doc/man1/notmuch-insert.rst
index e05bd0b5..3848b8f6 100644
--- a/doc/man1/notmuch-insert.rst
+++ b/doc/man1/notmuch-insert.rst
@@ -66,6 +66,11 @@ Supported options for **insert** include
umask. By default, delivered mail is only readable by the current
user.
+.. option:: --emit-message-id
+
+ On successful exit (or with ``--keep``),
+ print the message ID of the newly indexed message.
+
.. option:: --decrypt=(true|nostash|auto|false)
If ``true`` and the message is encrypted, try to decrypt the
diff --git a/notmuch-insert.c b/notmuch-insert.c
index e44607ad..5554245b 100644
--- a/notmuch-insert.c
+++ b/notmuch-insert.c
@@ -399,9 +399,10 @@ maildir_write_new (const void *ctx, int fdin, const char *maildir, bool world_re
* database results in error status regardless of keep.
*/
static notmuch_status_t
-add_file (notmuch_database_t *notmuch, const char *path, tag_op_list_t *tag_ops,
+add_file (const void *ctx, notmuch_database_t *notmuch, const char *path, tag_op_list_t *tag_ops,
bool synchronize_flags, bool keep,
- notmuch_indexopts_t *indexopts)
+ notmuch_indexopts_t *indexopts,
+ char **message_id_out)
{
notmuch_message_t *message;
notmuch_status_t status;
@@ -441,8 +442,6 @@ add_file (notmuch_database_t *notmuch, const char *path, tag_op_list_t *tag_ops,
}
DONE:
- notmuch_message_destroy (message);
-
if (status) {
if (keep) {
status = NOTMUCH_STATUS_SUCCESS;
@@ -458,6 +457,15 @@ add_file (notmuch_database_t *notmuch, const char *path, tag_op_list_t *tag_ops,
}
}
}
+ if (message_id_out) {
+ if (!status) {
+ *message_id_out = talloc_strdup(ctx, notmuch_message_get_message_id(message));
+ } else {
+ *message_id_out = NULL;
+ }
+ }
+ notmuch_message_destroy (message);
+
FAIL:
return status;
@@ -477,10 +485,12 @@ notmuch_insert_command (notmuch_database_t *notmuch, int argc, char *argv[])
bool keep = false;
bool hooks = true;
bool world_readable = false;
+ bool emit_message_id = false;
notmuch_bool_t synchronize_flags;
char *maildir;
char *newpath;
int opt_index;
+ char *message_id;
notmuch_indexopts_t *indexopts = notmuch_database_get_default_indexopts (notmuch);
void *local = talloc_new (NULL);
@@ -491,6 +501,7 @@ notmuch_insert_command (notmuch_database_t *notmuch, int argc, char *argv[])
{ .opt_bool = &keep, .name = "keep" },
{ .opt_bool = &hooks, .name = "hooks" },
{ .opt_bool = &world_readable, .name = "world-readable" },
+ { .opt_bool = &emit_message_id, .name = "emit-message-id" },
{ .opt_inherit = notmuch_shared_indexing_options },
{ .opt_inherit = notmuch_shared_options },
{ }
@@ -580,7 +591,8 @@ notmuch_insert_command (notmuch_database_t *notmuch, int argc, char *argv[])
}
/* Index the message. */
- status = add_file (notmuch, newpath, tag_ops, synchronize_flags, keep, indexopts);
+ status = add_file (local, notmuch, newpath, tag_ops, synchronize_flags, keep, indexopts,
+ emit_message_id ? &message_id : NULL);
/* Commit changes. */
close_status = notmuch_database_close (notmuch);
@@ -606,6 +618,10 @@ notmuch_insert_command (notmuch_database_t *notmuch, int argc, char *argv[])
}
}
+ if (!status && emit_message_id && message_id) {
+ printf("%s\n", message_id);
+ }
+
if (hooks && status == NOTMUCH_STATUS_SUCCESS) {
/* Ignore hook failures. */
notmuch_run_hook (notmuch, "post-insert");
--
2.45.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH] emacs: Introduce notmuch-draftify-buffer command.
2024-09-10 20:33 [PATCH] Add --emit-message-id flag to notmuch-insert Brennan Vincent
2024-09-11 15:00 ` [PATCH v2] " Brennan Vincent
@ 2024-09-11 16:09 ` Brennan Vincent
1 sibling, 0 replies; 3+ messages in thread
From: Brennan Vincent @ 2024-09-11 16:09 UTC (permalink / raw)
To: notmuch
This command inserts the current buffer as a draft. It optionally
begins editing the draft.
This can be useful for email-based Git contribution workflows. For
example, one can use git format-patch to generate a patch, then
notmuch-draftify-buffer on the generated patch to immediately begin
editing a message for submission to an appropriate mailing list.
---
emacs/notmuch-draft.el | 10 ++++++++++
emacs/notmuch-lib.el | 12 ++++++++----
emacs/notmuch-maildir-fcc.el | 16 ++++++++++------
3 files changed, 28 insertions(+), 10 deletions(-)
diff --git a/emacs/notmuch-draft.el b/emacs/notmuch-draft.el
index fcc45503..4bff68f2 100644
--- a/emacs/notmuch-draft.el
+++ b/emacs/notmuch-draft.el
@@ -278,6 +278,16 @@ applied to newly inserted messages)."
;; message is resaved or sent.
(setq notmuch-draft-id (and draft id)))))
+(defun notmuch-draftify-buffer (arg)
+ "Inserts the current buffer as a draft. With prefix argument, begins editing the draft."
+ (interactive "P")
+ (let ((message-id (notmuch-maildir-notmuch-insert-current-buffer
+ notmuch-draft-folder
+ t
+ notmuch-draft-tags)))
+ (when (and arg message-id)
+ (notmuch-draft-resume (format "id:%s" message-id)))))
+
;;; _
(add-hook 'message-send-hook 'notmuch-draft--mark-deleted)
diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
index bf9c4a53..1e371f67 100644
--- a/emacs/notmuch-lib.el
+++ b/emacs/notmuch-lib.el
@@ -935,11 +935,15 @@ supported keyword arguments are:
If notmuch exits with a non-zero status, output from the process
will appear in a buffer named \"*Notmuch errors*\" and an error
-will be signaled."
+will be signaled.
+
+Otherwise, returns the output from the process as a string."
(with-temp-buffer
- (let ((status (notmuch-call-notmuch--helper t args)))
- (notmuch-check-exit-status status (cons notmuch-command args)
- (buffer-string)))))
+ (let ((status (notmuch-call-notmuch--helper t args))
+ (output (buffer-string)))
+ (and (notmuch-check-exit-status status (cons notmuch-command args)
+ output)
+ output))))
(defun notmuch-call-notmuch-sexp (&rest args)
"Invoke `notmuch-command' with ARGS and return the parsed S-exp output.
diff --git a/emacs/notmuch-maildir-fcc.el b/emacs/notmuch-maildir-fcc.el
index c7b403cf..09fc832d 100644
--- a/emacs/notmuch-maildir-fcc.el
+++ b/emacs/notmuch-maildir-fcc.el
@@ -215,12 +215,16 @@ normal fcc."
This inserts the current buffer as a message into the notmuch
database in folder FOLDER. If CREATE is non-nil it will supply
the --create-folder flag to create the folder if necessary. TAGS
-should be a list of tag changes to apply to the inserted message."
- (apply 'notmuch-call-notmuch-process
- :stdin-string (buffer-string) "insert"
- (append (and create (list "--create-folder"))
- (list (concat "--folder=" folder))
- tags)))
+should be a list of tag changes to apply to the inserted message.
+
+Returns the message ID of the inserted message."
+ (let ((output (apply 'notmuch-call-notmuch-process
+ :stdin-string (buffer-string) "insert"
+ (append (and create (list "--create-folder"))
+ (list (concat "--folder=" folder)
+ "--emit-message-id")
+ tags))))
+ (string-trim output)))
(defun notmuch-maildir-fcc-with-notmuch-insert (fcc-header &optional create)
"Store message with notmuch insert.
--
2.45.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-09-11 16:09 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-10 20:33 [PATCH] Add --emit-message-id flag to notmuch-insert Brennan Vincent
2024-09-11 15:00 ` [PATCH v2] " Brennan Vincent
2024-09-11 16:09 ` [PATCH] emacs: Introduce notmuch-draftify-buffer command Brennan Vincent
Code repositories for project(s) associated with this public inbox
https://yhetil.org/notmuch.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).