[PATCH] notmuch-emacs-mua: add support for mailto: URL handling
Tomi Ollila
tomi.ollila at iki.fi
Fri Sep 30 11:24:12 PDT 2016
On Fri, Sep 30 2016, Jani Nikula <jani at nikula.org> wrote:
> 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 | 35 +++++++++++++++++++++++++++++------
> 2 files changed, 34 insertions(+), 9 deletions(-)
>
> diff --git a/doc/man1/notmuch-emacs-mua.rst b/doc/man1/notmuch-emacs-mua.rst
> index 7c5729047173..651d00fa4eb8 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 ...] [<to-address> ...]
> +**notmuch-emacs-mua** [options ...] [<to-address> ... | <mailto-url>]
>
> 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 f9d83713b789..89d7956b3e2e 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,9 +126,35 @@ 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
> +
> +escape -v pwd "$PWD"
> +
> +# The crux of it all: construct an elisp progn and eval it.
> +ELISP="(prog1 'done (require 'notmuch) (cd \"$pwd\") ${ELISP}"
Looks fine by me.
IMO it would look better if the above part would be combined with #End progn.
line below (the patch context here). In there the parentheses could
be balanced. e.g.
-# End progn.
-ELISP="${ELISP})"
+escape -v pwd "$PWD"
+
+# Complete the elisp progn and eval it.
+ELISP="(prog1 'done (require 'notmuch) (cd \"$pwd\") ${ELISP})"
> +
> # 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)"
> --
> 2.1.4
More information about the notmuch
mailing list