[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