Re: [PATCH v4 5/5] notmuch-emacs-mua: do not create a frame by default with --client
authorTomi Ollila <tomi.ollila@iki.fi>
Wed, 26 Aug 2015 19:03:46 +0000 (22:03 +0300)
committerW. Trevor King <wking@tremily.us>
Sat, 20 Aug 2016 21:49:25 +0000 (14:49 -0700)
34/4dc02f48187a9fd0119c492655760604c1bdd4 [new file with mode: 0644]

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