notmuch-emacs-mua: add support for mailto: URL handling
authorJani Nikula <jani@nikula.org>
Sat, 22 Oct 2016 11:22:49 +0000 (14:22 +0300)
committerDavid Bremner <david@tethera.net>
Wed, 2 Nov 2016 10:40:33 +0000 (07:40 -0300)
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
notmuch-emacs-mua

index 7c5729047173815a08bb2ce0c10754120a528db3..651d00fa4eb8e665cb2f910727c293019bba3c52 100644 (file)
@@ -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.
 
index f9d83713b78958093e1fdd731596271ab3af3be4..98103972f400c69af957b51e8bbfa390109c3e21 100755 (executable)
@@ -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}