From cbeb0685c744e77fdae69b0a868916c6a87e2edb Mon Sep 17 00:00:00 2001 From: Jani Nikula Date: Sat, 22 Oct 2016 14:22:49 +0300 Subject: [PATCH] notmuch-emacs-mua: add support for mailto: URL handling Add support for composing an email in the Notmuch Emacs UI using a mailto: URL. The mailto: URL mode is mutually exclusive with specifying other message modifying parameters and positional arguments. --- doc/man1/notmuch-emacs-mua.rst | 8 +++++--- notmuch-emacs-mua | 36 ++++++++++++++++++++++++++-------- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/doc/man1/notmuch-emacs-mua.rst b/doc/man1/notmuch-emacs-mua.rst index 7c572904..651d00fa 100644 --- a/doc/man1/notmuch-emacs-mua.rst +++ b/doc/man1/notmuch-emacs-mua.rst @@ -5,13 +5,13 @@ notmuch-emacs-mua SYNOPSIS ======== -**notmuch-emacs-mua** [options ...] [ ...] +**notmuch-emacs-mua** [options ...] [ ... | ] DESCRIPTION =========== Start composing an email in the Notmuch Emacs UI with the specified -subject, recipients, and message body. +subject, recipients, and message body, or mailto: URL. Supported options for **notmuch-emacs-mua** include @@ -56,7 +56,9 @@ Supported options for **notmuch-emacs-mua** include Output the resulting elisp to stdout instead of evaluating it. The supported positional parameters and short options are a compatible -subset of the **mutt** MUA command-line options. +subset of the **mutt** MUA command-line options. The options and +positional parameters modifying the message can't be combined with the +mailto: URL. Options may be specified multiple times. diff --git a/notmuch-emacs-mua b/notmuch-emacs-mua index f9d83713..98103972 100755 --- a/notmuch-emacs-mua +++ b/notmuch-emacs-mua @@ -38,11 +38,8 @@ NO_WINDOW= USE_EMACSCLIENT= AUTO_DAEMON= CREATE_FRAME= - -escape -v pwd "$PWD" - -# The crux of it all: construct an elisp progn and eval it. -ELISP="(prog1 'done (require 'notmuch) (cd \"$pwd\") (notmuch-mua-new-mail)" +ELISP= +MAILTO= # Short options compatible with mutt(1). while getopts :s:c:b:i:h opt; do @@ -129,16 +126,39 @@ done # Positional parameters. for arg; do escape -v arg "${arg}" - ELISP="${ELISP} (message-goto-to) (insert \"${arg}, \")" + case $arg in + mailto:*) + if [ -n "${MAILTO}" ]; then + echo "$0: more than one mailto: argument." >&2 + exit 1 + fi + MAILTO="${arg}" + ;; + *) + ELISP="${ELISP} (message-goto-to) (insert \"${arg}, \")" + ;; + esac done +if [ -n "${MAILTO}" ]; then + if [ -n "${ELISP}" ]; then + echo "$0: mailto: is not compatible with other message parameters." >&2 + exit 1 + fi + ELISP="(browse-url-mail \"${MAILTO}\")" +else + ELISP="(notmuch-mua-new-mail) ${ELISP}" +fi + # Kill the terminal/frame if we're creating one. if [ -z "$USE_EMACSCLIENT" -o -n "$CREATE_FRAME" -o -n "$NO_WINDOW" ]; then ELISP="${ELISP} (message-add-action #'save-buffers-kill-terminal 'exit)" fi -# End progn. -ELISP="${ELISP})" +escape -v pwd "$PWD" + +# The crux of it all: construct an elisp progn and eval it. +ELISP="(prog1 'done (require 'notmuch) (cd \"$pwd\") ${ELISP})" if [ -n "$PRINT_ONLY" ]; then echo ${ELISP}