X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch-emacs-mua;h=98103972f400c69af957b51e8bbfa390109c3e21;hp=ac03a4a60d565e512f4062052757f8e20d267281;hb=caa9dcb70798bbd06bc52489109988ed1c01806c;hpb=17fcf24d8b2dd6afcda2e3eaf40f9b7b51d8f30d diff --git a/notmuch-emacs-mua b/notmuch-emacs-mua index ac03a4a6..98103972 100755 --- a/notmuch-emacs-mua +++ b/notmuch-emacs-mua @@ -15,7 +15,7 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/ . +# along with this program. If not, see https://www.gnu.org/licenses/ . # # Authors: Jani Nikula # @@ -30,18 +30,16 @@ escape () printf -v $2 '%s' "${__escape_arg__//\"/\\\"}" } -EMACS=${EMACS-emacs} -EMACSCLIENT=${EMACSCLIENT-emacsclient} +EMACS=${EMACS:-emacs} +EMACSCLIENT=${EMACSCLIENT:-emacsclient} PRINT_ONLY= NO_WINDOW= USE_EMACSCLIENT= AUTO_DAEMON= -CREATE_FRAME="-c" - -# The crux of it all: construct an elisp progn and eval it. -ELISP="(prog1 'done (require 'notmuch) (notmuch-mua-new-mail)" -ELISP="${ELISP} (setq message-exit-actions (list #'save-buffers-kill-terminal))" +CREATE_FRAME= +ELISP= +MAILTO= # Short options compatible with mutt(1). while getopts :s:c:b:i:h opt; do @@ -65,7 +63,7 @@ while getopts :s:c:b:i:h opt; do opt=${opt%%=*} ;; # Long options without arguments. - --help|--print|--no-window-system|--client|--auto-daemon) + --help|--print|--no-window-system|--client|--auto-daemon|--create-frame) ;; *) echo "$0: unknown long option ${opt}, or argument mismatch." >&2 @@ -96,20 +94,23 @@ while getopts :s:c:b:i:h opt; do ELISP="${ELISP} (message-goto-bcc) (insert \"${OPTARG}, \")" ;; --body|i) - ELISP="${ELISP} (message-goto-body) (cd \"${PWD}\") (insert-file \"${OPTARG}\")" + ELISP="${ELISP} (message-goto-body) (insert-file \"${OPTARG}\")" ;; --print) PRINT_ONLY=1 ;; --no-window-system) NO_WINDOW="-nw" - CREATE_FRAME= ;; --client) USE_EMACSCLIENT="yes" ;; --auto-daemon) AUTO_DAEMON="--alternate-editor=" + CREATE_FRAME="-c" + ;; + --create-frame) + CREATE_FRAME="-c" ;; *) # We should never end up here. @@ -125,11 +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 -# End progn. -ELISP="${ELISP})" +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 + +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}