aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJani Nikula <jani@nikula.org>2016-10-22 14:22:49 +0300
committerDavid Bremner <david@tethera.net>2016-11-02 07:40:33 -0300
commitcbeb0685c744e77fdae69b0a868916c6a87e2edb (patch)
tree53591f9dbc2f4fceeb4efa66a6b5ddb196287abe
parentd62f9dbfc0722d16f4b3a8801967e040c2033ff4 (diff)
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.
-rw-r--r--doc/man1/notmuch-emacs-mua.rst8
-rwxr-xr-xnotmuch-emacs-mua36
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 ...] [<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 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}