Re: [PATCH v4 5/5] notmuch-emacs-mua: do not create a frame by default with --client

2015-09-30 Thread Tomi Ollila
On Tue, Sep 29 2015, Tomi Ollila  wrote:

> On Mon, Sep 28 2015, David Bremner  wrote:
>
>> Tomi Ollila  writes:
>>
>>
>>> 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
>>>
>>
>> I think what you propose is fine for a followup patch; note that the
>> scenario you worry about also needs --client to be a problem. Apparently
>> nothing is uncontroversial here, but if auto-daemon only works with
>> create frame, then perhaps the followup would be to have auto-daemon
>> imply create-frame
>
> Without --client --auto-daemon is no-op (as it is no-op in case emacs
> server is already running). I am (only) concerned about user experience
> when one runs --client --auto-daemon and user gets nothing (i.e. emacs
> server is running in the background w/o any clients connected to it.
>
> We could make --auto-daemon imply --create-frame, but then 
>
> ./notmuch-emacs-mua --auto-daemon (i.e. w/o --client) starts new mail
> compose window to separate frame (even though user did not request
> it w/ --create-frame)

Hmm, a few more tests. it now looks like in case the command line is

./notmuch-emacs-mua --client --auto-daemon

Then the --create-frame should be implied. w/o --client --create-frame
would ... well, create that (only) emacs frame anyways... oh, the
combinations; for reference I just paste from my history...


1  07:57  0:01  ccd notmuch
2  07:57  0:06  git pull --rebase
3  07:57  0:01  git log
4  07:57  0:04  tig
5  07:58  0:10  ./notmuch-emacs-mua --auto-daemon
6  07:58  0:00  ps ax
8  07:58  0:00  emacs &
9  07:58  0:07  ./notmuch-emacs-mua --auto-daemon
   10  07:59  0:01  ./notmuch-emacs-mua --client --auto-daemon
   12  08:01  0:03  ./notmuch-emacs-mua --auto-daemon
   13  08:02  0:00  ps ax
   14  08:02  0:00  ls /tmp/emacs1001
   15  08:02  0:00  ./notmuch-emacs-mua -nw --auto-daemon
   16  08:02  0:04  DISPLAY= ./notmuch-emacs-mua  --auto-daemon
   17  08:02  0:05  tig
   18  08:03  0:02  DISPLAY= ./notmuch-emacs-mua --auto-daemon
   19  08:04  0:01  DISPLAY= ./notmuch-emacs-mua --client --auto-daemon
   20  08:04  0:00  ps ax
   21  08:04  0:00  kill 1860
   22  08:04  0:00  ps ax
   23  08:06  0:00   ./notmuch-emacs-mua --client --auto-daemon
   24  08:06  0:00  ps ax
   25  08:06  0:00  kill 1875
   26  08:06  0:00   ./notmuch-emacs-mua --client --auto-daemon
   27  08:06  0:00  ps ax
   28  08:06  0:00  kill 1926
   29  08:06  0:06  ./notmuch-emacs-mua --client --auto-daemon --create-frame
   30  08:07  0:28  ./notmuch-emacs-mua --auto-daemon --create-frame
   31  08:08  0:00  ps x
   32  08:08  0:00  h

So. I'm going w/ the suggestion making --auto-daemon imply --create-frame


>
> (actually I already did the 'imply' option (easy, one line in script,
> another in namual), just that testing it gave this thought...
>
> ... therefore I'd rather make ./notmuch-emacs-mua --auto-daemon
> spit an error and exit -- but I can be convinced otherwise :)
>
> Tomi
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


Re: [PATCH v4 5/5] notmuch-emacs-mua: do not create a frame by default with --client

2015-09-29 Thread Tomi Ollila
On Mon, Sep 28 2015, David Bremner  wrote:

> Tomi Ollila  writes:
>
>
>> 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
>>
>
> I think what you propose is fine for a followup patch; note that the
> scenario you worry about also needs --client to be a problem. Apparently
> nothing is uncontroversial here, but if auto-daemon only works with
> create frame, then perhaps the followup would be to have auto-daemon
> imply create-frame

Without --client --auto-daemon is no-op (as it is no-op in case emacs
server is already running). I am (only) concerned about user experience
when one runs --client --auto-daemon and user gets nothing (i.e. emacs
server is running in the background w/o any clients connected to it.

We could make --auto-daemon imply --create-frame, but then 

./notmuch-emacs-mua --auto-daemon (i.e. w/o --client) starts new mail
compose window to separate frame (even though user did not request
it w/ --create-frame)

(actually I already did the 'imply' option (easy, one line in script,
another in namual), just that testing it gave this thought...

... therefore I'd rather make ./notmuch-emacs-mua --auto-daemon
spit an error and exit -- but I can be convinced otherwise :)

Tomi
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


Re: [PATCH v4 5/5] notmuch-emacs-mua: do not create a frame by default with --client

2015-09-28 Thread David Bremner
Tomi Ollila  writes:


> 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
>

I think what you propose is fine for a followup patch; note that the
scenario you worry about also needs --client to be a problem. Apparently
nothing is uncontroversial here, but if auto-daemon only works with
create frame, then perhaps the followup would be to have auto-daemon
imply create-frame

>>  
>> +# 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.

I'm somewhat less sympathetic here. AIUI, the goal of notmuch-emacs-mua
is to provide a drop in tool to replace mutt for sending mail in the
shell or from other programs. In this case, I think the most common
expectation is to terminate after sending mail (e.g. to return use of
the shell to the user, or allow the spawning program to continue).
However, it seems like this would be relatively easy to set up some
customization in notmuch-message-mode so that it could check if running
from the cli, and then either kill-or-not emacs depending on some
variable. So I think I'd like to keep the current behaviour as default,
and make it customizable at the emacs level.

___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


Re: [PATCH v4 5/5] notmuch-emacs-mua: do not create a frame by default with --client

2015-08-28 Thread Jani Nikula
On Wed, 26 Aug 2015, Tomi Ollila tomi.oll...@iki.fi wrote:
 On Sat, Aug 15 2015, Jani Nikula j...@nikula.org 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

This problem is present with the current code already, right now. I
don't see the need to fix everything in my series.

 $ 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 

Re: [PATCH v4 5/5] notmuch-emacs-mua: do not create a frame by default with --client

2015-08-28 Thread Tomi Ollila
On Fri, Aug 28 2015, Jani Nikula j...@nikula.org wrote:

 On Wed, 26 Aug 2015, Tomi Ollila tomi.oll...@iki.fi wrote:
 On Sat, Aug 15 2015, Jani Nikula j...@nikula.org 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

 This problem is present with the current code already, right now. I
 don't see the need to fix everything in my series.

Yes, the problem was already present in patch 4/5 (and probably earlier as
you mentioned that there was problem already) -- I just did not want
to pick that also in this discussion... ;/

 $ 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 

Re: [PATCH v4 5/5] notmuch-emacs-mua: do not create a frame by default with --client

2015-08-26 Thread Tomi Ollila
On Sat, Aug 15 2015, Jani Nikula j...@nikula.org 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 

[PATCH v4 5/5] notmuch-emacs-mua: do not create a frame by default with --client

2015-08-15 Thread Jani Nikula
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
@@ -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
+
 # End progn.
 ELISP="${ELISP})"

-- 
2.1.4



[PATCH v4 5/5] notmuch-emacs-mua: do not create a frame by default with --client

2015-08-15 Thread Jani Nikula
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
@@ -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
+
 # End progn.
 ELISP=${ELISP})
 
-- 
2.1.4

___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch