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.
This commit is contained in:
Jani Nikula 2016-10-22 14:22:49 +03:00 committed by David Bremner
parent d62f9dbfc0
commit cbeb0685c7
2 changed files with 33 additions and 11 deletions

View file

@ -5,13 +5,13 @@ notmuch-emacs-mua
SYNOPSIS SYNOPSIS
======== ========
**notmuch-emacs-mua** [options ...] [<to-address> ...] **notmuch-emacs-mua** [options ...] [<to-address> ... | <mailto-url>]
DESCRIPTION DESCRIPTION
=========== ===========
Start composing an email in the Notmuch Emacs UI with the specified 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 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. Output the resulting elisp to stdout instead of evaluating it.
The supported positional parameters and short options are a compatible 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. Options may be specified multiple times.

View file

@ -38,11 +38,8 @@ NO_WINDOW=
USE_EMACSCLIENT= USE_EMACSCLIENT=
AUTO_DAEMON= AUTO_DAEMON=
CREATE_FRAME= CREATE_FRAME=
ELISP=
escape -v pwd "$PWD" MAILTO=
# The crux of it all: construct an elisp progn and eval it.
ELISP="(prog1 'done (require 'notmuch) (cd \"$pwd\") (notmuch-mua-new-mail)"
# Short options compatible with mutt(1). # Short options compatible with mutt(1).
while getopts :s:c:b:i:h opt; do while getopts :s:c:b:i:h opt; do
@ -129,16 +126,39 @@ done
# Positional parameters. # Positional parameters.
for arg; do for arg; do
escape -v arg "${arg}" 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 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. # Kill the terminal/frame if we're creating one.
if [ -z "$USE_EMACSCLIENT" -o -n "$CREATE_FRAME" -o -n "$NO_WINDOW" ]; then if [ -z "$USE_EMACSCLIENT" -o -n "$CREATE_FRAME" -o -n "$NO_WINDOW" ]; then
ELISP="${ELISP} (message-add-action #'save-buffers-kill-terminal 'exit)" ELISP="${ELISP} (message-add-action #'save-buffers-kill-terminal 'exit)"
fi fi
# End progn. escape -v pwd "$PWD"
ELISP="${ELISP})"
# 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 if [ -n "$PRINT_ONLY" ]; then
echo ${ELISP} echo ${ELISP}