Re: [PATCH v4 5/5] notmuch-emacs-mua: do not create a frame by default with --client
authorJani Nikula <jani@nikula.org>
Fri, 28 Aug 2015 18:22:29 +0000 (21:22 +0300)
committerW. Trevor King <wking@tremily.us>
Sat, 20 Aug 2016 21:49:26 +0000 (14:49 -0700)
13/0918fb360260c4a960cfad37642160fd69784a [new file with mode: 0644]

diff --git a/13/0918fb360260c4a960cfad37642160fd69784a b/13/0918fb360260c4a960cfad37642160fd69784a
new file mode 100644 (file)
index 0000000..bb8c335
--- /dev/null
@@ -0,0 +1,238 @@
+Return-Path: <jani@nikula.org>\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 9F66E6DE0AF8\r
+ for <notmuch@notmuchmail.org>; Fri, 28 Aug 2015 11:22:35 -0700 (PDT)\r
+X-Virus-Scanned: Debian amavisd-new at cworth.org\r
+X-Spam-Flag: NO\r
+X-Spam-Score: -0.296\r
+X-Spam-Level: \r
+X-Spam-Status: No, score=-0.296 tagged_above=-999 required=5 tests=[AWL=0.424,\r
+  RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01]\r
+ 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 PtTBGu0Ci5Gy for <notmuch@notmuchmail.org>;\r
+ Fri, 28 Aug 2015 11:22:33 -0700 (PDT)\r
+Received: from mail-wi0-f177.google.com (mail-wi0-f177.google.com\r
+ [209.85.212.177])\r
+ by arlo.cworth.org (Postfix) with ESMTPS id 4E8676DE005F\r
+ for <notmuch@notmuchmail.org>; Fri, 28 Aug 2015 11:22:33 -0700 (PDT)\r
+Received: by wicfv10 with SMTP id fv10so19246010wic.0\r
+ for <notmuch@notmuchmail.org>; Fri, 28 Aug 2015 11:22:31 -0700 (PDT)\r
+X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;\r
+ d=1e100.net; s=20130820;\r
+ h=x-gm-message-state:from:to:cc:subject:in-reply-to:references\r
+ :user-agent:date:message-id:mime-version:content-type;\r
+ bh=WMQTSKtAXpvzr4+UBJ1BO0gf8S7dw2fK+iiK9fGBElw=;\r
+ b=h27mpvL1YsvFcAOFW1Lzkws42Ori3brS2nFFW5JZyJZEn+USIHDVIE/TkIVe015Coq\r
+ 37ea2w6aZ3B1k1WO/rjLyF378ym0ctUI4g+ZBSicHNdQSr1IoRnQFUg3QieonXTlff70\r
+ qaXwAhzZL7CKHFHvFogZUUpZ96EAGhfMBEa1q4UKg8P8O7gOfmojmTfYr60YHfgLhDBB\r
+ UAoJYxRXH0xWFYuTGdjLGDc3B9aQPg8TW+paKTLvTsnFuHmV2FciigfKjVm5JimMF+kH\r
+ v4okaHbueGhyT+i7AIFBz5US3XvOfrFYryfj82ZAIf/1zzo0UVJ824MC/E90PEK3j7Hi\r
+ x0yg==\r
+X-Gm-Message-State:\r
+ ALoCoQmagIm60FgX0znythkZhfbBaos51pbWGBeoMvti9GnGAnUF5VYCPs+U1N0uhtesD/urelOc\r
+X-Received: by 10.180.91.14 with SMTP id ca14mr6126367wib.5.1440786151486;\r
+ Fri, 28 Aug 2015 11:22:31 -0700 (PDT)\r
+Received: from localhost (mobile-access-bcee4f-131.dhcp.inet.fi.\r
+ [188.238.79.131])\r
+ by smtp.gmail.com with ESMTPSA id fs8sm4926800wib.0.2015.08.28.11.22.30\r
+ (version=TLSv1/SSLv3 cipher=OTHER);\r
+ Fri, 28 Aug 2015 11:22:30 -0700 (PDT)\r
+From: Jani Nikula <jani@nikula.org>\r
+To: Tomi Ollila <tomi.ollila@iki.fi>, 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: <m21tepvpm5.fsf@guru.guru-group.fi>\r
+References: <cover.1439629384.git.jani@nikula.org>\r
+ <455026447d3f75b1038ac11cebe734431604be9d.1439629384.git.jani@nikula.org>\r
+ <m21tepvpm5.fsf@guru.guru-group.fi>\r
+User-Agent: Notmuch/0.20.2+60~gcb08a2e (http://notmuchmail.org) Emacs/24.4.1\r
+ (x86_64-pc-linux-gnu)\r
+Date: Fri, 28 Aug 2015 21:22:29 +0300\r
+Message-ID: <87si73uvbu.fsf@nikula.org>\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: Fri, 28 Aug 2015 18:22:35 -0000\r
+\r
+On Wed, 26 Aug 2015, Tomi Ollila <tomi.ollila@iki.fi> wrote:\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
+This problem is present with the current code already, right now. I\r
+don't see the need to fix everything in my series.\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
+And I am not very happy with being expected to modify these patches ad\r
+infinitum while trying to get back the *one* use case I wrote this\r
+script for in the first place, and that got broken somewhere down the\r
+line.\r
+\r
+Sincerely,\r
+Jani.\r
+\r
+\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