From: Tomi Ollila Date: Wed, 26 Aug 2015 19:03:46 +0000 (+0300) Subject: Re: [PATCH v4 5/5] notmuch-emacs-mua: do not create a frame by default with --client X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=20519ad4d22598a02f63601f6a005f4a84e9e9d4;p=notmuch-archives.git Re: [PATCH v4 5/5] notmuch-emacs-mua: do not create a frame by default with --client --- diff --git a/34/4dc02f48187a9fd0119c492655760604c1bdd4 b/34/4dc02f48187a9fd0119c492655760604c1bdd4 new file mode 100644 index 000000000..96bcccd0e --- /dev/null +++ b/34/4dc02f48187a9fd0119c492655760604c1bdd4 @@ -0,0 +1,206 @@ +Return-Path: +X-Original-To: notmuch@notmuchmail.org +Delivered-To: notmuch@notmuchmail.org +Received: from localhost (localhost [127.0.0.1]) + by arlo.cworth.org (Postfix) with ESMTP id BF9916DE02DD + for ; Wed, 26 Aug 2015 12:05:22 -0700 (PDT) +X-Virus-Scanned: Debian amavisd-new at cworth.org +X-Spam-Flag: NO +X-Spam-Score: 0.859 +X-Spam-Level: +X-Spam-Status: No, score=0.859 tagged_above=-999 required=5 tests=[AWL=0.207, + SPF_NEUTRAL=0.652] autolearn=disabled +Received: from arlo.cworth.org ([127.0.0.1]) + by localhost (arlo.cworth.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP id SqmYe6owfXOF for ; + Wed, 26 Aug 2015 12:05:20 -0700 (PDT) +Received: from guru.guru-group.fi (guru.guru-group.fi [46.183.73.34]) + by arlo.cworth.org (Postfix) with ESMTP id 4C0856DE0275 + for ; Wed, 26 Aug 2015 12:05:19 -0700 (PDT) +Received: from guru.guru-group.fi (localhost [IPv6:::1]) + by guru.guru-group.fi (Postfix) with ESMTP id C1C5E10008E; + Wed, 26 Aug 2015 22:03:46 +0300 (EEST) +From: Tomi Ollila +To: Jani Nikula , notmuch@notmuchmail.org +Subject: Re: [PATCH v4 5/5] notmuch-emacs-mua: do not create a frame by + default with --client +In-Reply-To: + <455026447d3f75b1038ac11cebe734431604be9d.1439629384.git.jani@nikula.org> +References: + <455026447d3f75b1038ac11cebe734431604be9d.1439629384.git.jani@nikula.org> +User-Agent: Notmuch/0.20.2+67~g287e782 (http://notmuchmail.org) Emacs/24.3.1 + (x86_64-unknown-linux-gnu) +X-Face: HhBM'cA~ +MIME-Version: 1.0 +Content-Type: text/plain +X-BeenThere: notmuch@notmuchmail.org +X-Mailman-Version: 2.1.18 +Precedence: list +List-Id: "Use and development of the notmuch mail system." + +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +X-List-Received-Date: Wed, 26 Aug 2015 19:05:22 -0000 + +On Sat, Aug 15 2015, Jani Nikula wrote: + +> Make the default behaviour for --client the same as emacsclient +> default: do not create a new frame. Add a new option --create-frame, +> passing the same option to emacsclient to create a frame. +> +> --- +> +> v2: fix killing frame with --create-frame +> +> v3: fix --create-frame w/o --client parameter check +> +> v4: fix kill terminal logic, document behaviour with daemon mode +> --- +> doc/man1/notmuch-emacs-mua.rst | 6 ++++++ +> notmuch-emacs-mua | 14 ++++++++++---- +> 2 files changed, 16 insertions(+), 4 deletions(-) +> +> diff --git a/doc/man1/notmuch-emacs-mua.rst b/doc/man1/notmuch-emacs-mua.rst +> index 89a2fead17b1..c3689eb82c8a 100644 +> --- a/doc/man1/notmuch-emacs-mua.rst +> +++ b/doc/man1/notmuch-emacs-mua.rst +> @@ -45,6 +45,12 @@ Supported options for **notmuch-emacs-mua** include +> Automatically start Emacs in daemon mode, if the Emacs server +> is not running. Applicable with ``--client``. +> +> + ``--create-frame`` +> + Create a new frame instead of trying to use the current Emacs +> + frame. Applicable with ``--client``. This will be required +> + when Emacs is running (or automatically started with +> + ``--auto-daemon``) in daemon mode. +> + +> ``--print`` +> Output the resulting elisp to stdout instead of evaluating it. +> +> diff --git a/notmuch-emacs-mua b/notmuch-emacs-mua +> index ac03a4a60d56..b51d8d0e2c5b 100755 +> --- a/notmuch-emacs-mua +> +++ b/notmuch-emacs-mua +> @@ -37,11 +37,10 @@ PRINT_ONLY= +> NO_WINDOW= +> USE_EMACSCLIENT= +> AUTO_DAEMON= +> -CREATE_FRAME="-c" +> +CREATE_FRAME= +> +> # 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))" +> +> # Short options compatible with mutt(1). +> while getopts :s:c:b:i:h opt; do +> @@ -65,7 +64,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 +> @@ -103,7 +102,6 @@ while getopts :s:c:b:i:h opt; do +> ;; +> --no-window-system) +> NO_WINDOW="-nw" +> - CREATE_FRAME= +> ;; +> --client) +> USE_EMACSCLIENT="yes" +> @@ -111,6 +109,9 @@ while getopts :s:c:b:i:h opt; do +> --auto-daemon) +> AUTO_DAEMON="--alternate-editor=" +> ;; +> + --create-frame) +> + CREATE_FRAME="-c" +> + ;; +> *) +> # We should never end up here. +> echo "$0: internal error (option ${opt})." >&2 + +This looks pretty good now; I player quite a bit with --client, +--create-frame and --auto-daemon +(with and without setting EMACSCLIENT='echo emacsclient') + +Based on that I think this check should be added here (after option +parsing): + +if [ -n "$AUTO_DAEMON" -a -z "$CREATE_FRAME" ]; then + echo "$0: --auto-daemon is only applicable with --create-frame." >&2 + exit 1 +fi + +without this one may execute ./notmuch-emacs-mua --client --auto-daemon +which yields starting emacs in daemon mode (in this example it is expected +emacs is not running; otherwise --auto-daemon has no use in this example) +-- but no ui to that newly-running emacs is provided. Similar behaviour +can be observed by the following + +$ emacsclient --eval '(kill emacs) ;; but beware! ' +$ emacsclient --alternate-editor= --eval '(find-file "/etc/passwd")' + +(side note: using this --alternate-editor= is pretty nifty way to get it done) + +emacs --daemon is executed which loaded /etc/passwd but w/o ui + +Note the difference in: + +emacsclient --alternate-editor= /etc/passwd + +now emacs --daemon is executed *and* ui where /etc/passwd is available is +provided! + +otoh, +emacsclient --alternate-editor= -c [-nw] --eval '(find-file "/etc/passwd")' + +works fine, albeit a bit different than the one where /etc/passwd was given +as a simple filename argument. + +comparative to ./notmuch-emacs-mua --client --create-frame --auto-daemon + +> @@ -128,6 +129,11 @@ for arg; do +> ELISP="${ELISP} (message-goto-to) (insert \"${arg}, \")" +> done +> +> +# Kill the terminal/frame if we're creating one. +> +if [ -z "$USE_EMACSCLIENT" -o -n "$CREATE_FRAME" -o -n "$NO_WINDOW" ]; then +> + ELISP="${ELISP} (setq message-exit-actions (list #'save-buffers-kill-terminal))" +> +fi + +I am not very happy that message-exit-actions was added to $ELISP when +not using emacsclient; when emacs is started its sole (initial) purpose is +to serve mail sending (and not lending a frame in some other emacs) -- in +this case it would be nice to be able to retrieve the sent mail buffer. + +perhaps the above could be changed to just + +if [ -n "$CREATE_FRAME" ]; then + ELISP="${ELISP} (setq message-exit-actions (list #'save-buffers-kill-terminal))" +fi + +another option is --yet-another-option ;/ + +No other issues (relevant to this series). + +Tomi + + +> + +> # End progn. +> ELISP="${ELISP})" +> +> -- +> 2.1.4