* bug#51374: New options for emacsclient
@ 2021-10-24 14:27 Gregory Heytings
2021-10-30 15:25 ` Stefan Kangas
0 siblings, 1 reply; 4+ messages in thread
From: Gregory Heytings @ 2021-10-24 14:27 UTC (permalink / raw)
To: 51374
[-- Attachment #1: Type: text/plain, Size: 548 bytes --]
When emacsclient is used in a terminal, emacsclient FILE opens a
non-graphical Emacs frame, and emacsclient -c FILE always creates a new
graphical Emacs frame. A third option, which creates a graphical frame if
none exist and reuses a graphical frame is one exists, would be useful
(see for example [1] and [2]).
Patch attached.
[1] https://superuser.com/questions/358037/emacsclient-create-a-frame-if-a-frame-does-not-exist
[2] https://emacs.stackexchange.com/questions/12894/make-emacsclient-create-a-frame-only-if-there-isnt-one-already
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-diff; name=New-emacsclient-option-to-either-create-or-reuse-an-.patch, Size: 3097 bytes --]
From f44c01bb1f1a90aa511186e5310fecda1d107985 Mon Sep 17 00:00:00 2001
From: Gregory Heytings <gregory@heytings.org>
Date: Sun, 24 Oct 2021 14:14:32 +0000
Subject: [PATCH] New emacsclient option to either create or reuse an existing
frame.
* lib-src/emacsclient.c (reuse_frame): New variable.
(longopts): New option.
(decode_options): Decode the new option.
(print_help_and_exit): Document the new option.
(main): Use the new option.
* doc/emacs/misc.texi (emacsclient Options): Document the new option.
---
doc/emacs/misc.texi | 5 +++++
lib-src/emacsclient.c | 13 ++++++++++++-
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
index 5123a716dc..810d212021 100644
--- a/doc/emacs/misc.texi
+++ b/doc/emacs/misc.texi
@@ -1986,6 +1986,11 @@ emacsclient Options
can customize this behavior with the variable @code{initial-buffer-choice}
(@pxref{Entering Emacs}).
+@item -r
+@itemx --reuse-frame
+Create a new graphical @dfn{client frame} if none exists, otherwise
+use an existing Emacs frame.
+
@item -F @var{alist}
@itemx --frame-parameters=@var{alist}
Set the parameters for a newly-created graphical frame
diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c
index cff3cec2a7..0e800dd7e8 100644
--- a/lib-src/emacsclient.c
+++ b/lib-src/emacsclient.c
@@ -116,6 +116,9 @@ Copyright (C) 1986-1987, 1994, 1999-2021 Free Software Foundation, Inc.
/* True means open a new frame. --create-frame etc. */
static bool create_frame;
+/* True means reuse a frame if it already exists. */
+static bool reuse_frame;
+
/* The display on which Emacs should work. --display. */
static char const *display;
@@ -165,6 +168,7 @@ Copyright (C) 1986-1987, 1994, 1999-2021 Free Software Foundation, Inc.
{ "tty", no_argument, NULL, 't' },
{ "nw", no_argument, NULL, 't' },
{ "create-frame", no_argument, NULL, 'c' },
+ { "reuse-frame", no_argument, NULL, 'r' },
{ "alternate-editor", required_argument, NULL, 'a' },
{ "frame-parameters", required_argument, NULL, 'F' },
#ifdef SOCKETS_IN_FILE_SYSTEM
@@ -551,6 +555,11 @@ decode_options (int argc, char **argv)
create_frame = true;
break;
+ case 'r':
+ create_frame = true;
+ reuse_frame = true;
+ break;
+
case 'p':
parent_id = optarg;
create_frame = true;
@@ -647,6 +656,8 @@ print_help_and_exit (void)
-nw, -t, --tty Open a new Emacs frame on the current terminal\n\
-c, --create-frame Create a new frame instead of trying to\n\
use the current Emacs frame\n\
+-r, --reuse-frame Create a new frame if none exists, otherwise\n\
+ use the current Emacs frame\n\
", "\
-F ALIST, --frame-parameters=ALIST\n\
Set the parameters of a new frame\n\
@@ -1941,7 +1952,7 @@ main (int argc, char **argv)
if (nowait)
send_to_emacs (emacs_socket, "-nowait ");
- if (!create_frame)
+ if (!create_frame || reuse_frame)
send_to_emacs (emacs_socket, "-current-frame ");
if (display)
--
2.33.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* bug#51374: New options for emacsclient
2021-10-24 14:27 bug#51374: New options for emacsclient Gregory Heytings
@ 2021-10-30 15:25 ` Stefan Kangas
2021-10-30 22:31 ` Gregory Heytings
0 siblings, 1 reply; 4+ messages in thread
From: Stefan Kangas @ 2021-10-30 15:25 UTC (permalink / raw)
To: Gregory Heytings; +Cc: 51374
Gregory Heytings <gregory@heytings.org> writes:
> When emacsclient is used in a terminal, emacsclient FILE opens a non-graphical
> Emacs frame, and emacsclient -c FILE always creates a new graphical Emacs frame.
> A third option, which creates a graphical frame if none exist and reuses a
> graphical frame is one exists, would be useful (see for example [1] and [2]).
It seems like tons of users are using home-cooked solutions and scripts
to do this, so there is a clear need for it. I think we should add it.
> Patch attached.
Your patch LGTM, but it's missing a NEWS entry.
(Perhaps we could also update the man page, but that's no requirement as
we don't really make an effort to maintain it.)
> [1]
> https://superuser.com/questions/358037/emacsclient-create-a-frame-if-a-frame-does-not-exist
> [2]
> https://emacs.stackexchange.com/questions/12894/make-emacsclient-create-a-frame-only-if-there-isnt-one-already
>
> From f44c01bb1f1a90aa511186e5310fecda1d107985 Mon Sep 17 00:00:00 2001
> From: Gregory Heytings <gregory@heytings.org>
> Date: Sun, 24 Oct 2021 14:14:32 +0000
> Subject: [PATCH] New emacsclient option to either create or reuse an existing
> frame.
>
> * lib-src/emacsclient.c (reuse_frame): New variable.
> (longopts): New option.
> (decode_options): Decode the new option.
> (print_help_and_exit): Document the new option.
> (main): Use the new option.
>
> * doc/emacs/misc.texi (emacsclient Options): Document the new option.
> ---
> doc/emacs/misc.texi | 5 +++++
> lib-src/emacsclient.c | 13 ++++++++++++-
> 2 files changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
> index 5123a716dc..810d212021 100644
> --- a/doc/emacs/misc.texi
> +++ b/doc/emacs/misc.texi
> @@ -1986,6 +1986,11 @@ emacsclient Options
> can customize this behavior with the variable @code{initial-buffer-choice}
> (@pxref{Entering Emacs}).
>
> +@item -r
> +@itemx --reuse-frame
> +Create a new graphical @dfn{client frame} if none exists, otherwise
> +use an existing Emacs frame.
> +
> @item -F @var{alist}
> @itemx --frame-parameters=@var{alist}
> Set the parameters for a newly-created graphical frame
> diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c
> index cff3cec2a7..0e800dd7e8 100644
> --- a/lib-src/emacsclient.c
> +++ b/lib-src/emacsclient.c
> @@ -116,6 +116,9 @@ Copyright (C) 1986-1987, 1994, 1999-2021 Free Software Foundation, Inc.
> /* True means open a new frame. --create-frame etc. */
> static bool create_frame;
>
> +/* True means reuse a frame if it already exists. */
> +static bool reuse_frame;
> +
> /* The display on which Emacs should work. --display. */
> static char const *display;
>
> @@ -165,6 +168,7 @@ Copyright (C) 1986-1987, 1994, 1999-2021 Free Software Foundation, Inc.
> { "tty", no_argument, NULL, 't' },
> { "nw", no_argument, NULL, 't' },
> { "create-frame", no_argument, NULL, 'c' },
> + { "reuse-frame", no_argument, NULL, 'r' },
> { "alternate-editor", required_argument, NULL, 'a' },
> { "frame-parameters", required_argument, NULL, 'F' },
> #ifdef SOCKETS_IN_FILE_SYSTEM
> @@ -551,6 +555,11 @@ decode_options (int argc, char **argv)
> create_frame = true;
> break;
>
> + case 'r':
> + create_frame = true;
> + reuse_frame = true;
> + break;
> +
> case 'p':
> parent_id = optarg;
> create_frame = true;
> @@ -647,6 +656,8 @@ print_help_and_exit (void)
> -nw, -t, --tty Open a new Emacs frame on the current terminal\n\
> -c, --create-frame Create a new frame instead of trying to\n\
> use the current Emacs frame\n\
> +-r, --reuse-frame Create a new frame if none exists, otherwise\n\
> + use the current Emacs frame\n\
> ", "\
> -F ALIST, --frame-parameters=ALIST\n\
> Set the parameters of a new frame\n\
> @@ -1941,7 +1952,7 @@ main (int argc, char **argv)
> if (nowait)
> send_to_emacs (emacs_socket, "-nowait ");
>
> - if (!create_frame)
> + if (!create_frame || reuse_frame)
> send_to_emacs (emacs_socket, "-current-frame ");
>
> if (display)
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#51374: New options for emacsclient
2021-10-30 15:25 ` Stefan Kangas
@ 2021-10-30 22:31 ` Gregory Heytings
2021-11-04 23:14 ` Lars Ingebrigtsen
0 siblings, 1 reply; 4+ messages in thread
From: Gregory Heytings @ 2021-10-30 22:31 UTC (permalink / raw)
To: Stefan Kangas; +Cc: 51374
[-- Attachment #1: Type: text/plain, Size: 717 bytes --]
>> When emacsclient is used in a terminal, emacsclient FILE opens a
>> non-graphical Emacs frame, and emacsclient -c FILE always creates a new
>> graphical Emacs frame. A third option, which creates a graphical frame
>> if none exist and reuses a graphical frame is one exists, would be
>> useful (see for example [1] and [2]).
>
> It seems like tons of users are using home-cooked solutions and scripts
> to do this, so there is a clear need for it. I think we should add it.
>
Thanks for your comment!
> Your patch LGTM, but it's missing a NEWS entry.
>
> (Perhaps we could also update the man page, but that's no requirement as
> we don't really make an effort to maintain it.)
>
Updated patch attached.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-diff; name=New-emacsclient-option-to-either-create-or-reuse-an-.patch, Size: 4361 bytes --]
From c366e458f567e37b3b844808b56eaa95861be9d8 Mon Sep 17 00:00:00 2001
From: Gregory Heytings <gregory@heytings.org>
Date: Sat, 30 Oct 2021 22:29:00 +0000
Subject: [PATCH] New emacsclient option to either create or reuse an existing
frame.
* lib-src/emacsclient.c (reuse_frame): New variable.
(longopts): New option.
(decode_options): Decode the new option.
(print_help_and_exit): Document the new option.
(main): Use the new option.
* doc/emacs/misc.texi (emacsclient Options): Document the new option.
* etc/NEWS: Mention the new option.
* doc/man/emacsclient.1: Mention the new option.
---
doc/emacs/misc.texi | 5 +++++
doc/man/emacsclient.1 | 3 +++
etc/NEWS | 8 ++++++++
lib-src/emacsclient.c | 13 ++++++++++++-
4 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
index 5123a716dc..810d212021 100644
--- a/doc/emacs/misc.texi
+++ b/doc/emacs/misc.texi
@@ -1986,6 +1986,11 @@ emacsclient Options
can customize this behavior with the variable @code{initial-buffer-choice}
(@pxref{Entering Emacs}).
+@item -r
+@itemx --reuse-frame
+Create a new graphical @dfn{client frame} if none exists, otherwise
+use an existing Emacs frame.
+
@item -F @var{alist}
@itemx --frame-parameters=@var{alist}
Set the parameters for a newly-created graphical frame
diff --git a/doc/man/emacsclient.1 b/doc/man/emacsclient.1
index ba64efa282..cc58f106e6 100644
--- a/doc/man/emacsclient.1
+++ b/doc/man/emacsclient.1
@@ -69,6 +69,9 @@ start Emacs in daemon mode, and try to connect to it.
.B -c, \-\-create-frame
Create a new frame instead of trying to use the current Emacs frame.
.TP
+.B -r \-\-reuse-frame
+Reuse an existing frame if one exists, otherwise create a new frame.
+.TP
.B \-F, \-\-frame-parameters=ALIST
Set the parameters of a newly-created frame.
.TP
diff --git a/etc/NEWS b/etc/NEWS
index 6d3256959e..a318d4c262 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -74,6 +74,14 @@ Image specifiers can now use ':type webp'.
For example, an alist entry as '(window-width . (body-columns . 40))'
will make the body of the chosen window 40 columns wide.
\f
+
+** Emacs server and client changes
+
++++
+*** New command-line option '-r' for emacsclient.
+With this command-line option, Emacs reuses an existing graphical client
+frame if one exists; otherwise a new frame is created.
+
* Editing Changes in Emacs 29.1
---
diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c
index cff3cec2a7..0e800dd7e8 100644
--- a/lib-src/emacsclient.c
+++ b/lib-src/emacsclient.c
@@ -116,6 +116,9 @@ Copyright (C) 1986-1987, 1994, 1999-2021 Free Software Foundation, Inc.
/* True means open a new frame. --create-frame etc. */
static bool create_frame;
+/* True means reuse a frame if it already exists. */
+static bool reuse_frame;
+
/* The display on which Emacs should work. --display. */
static char const *display;
@@ -165,6 +168,7 @@ Copyright (C) 1986-1987, 1994, 1999-2021 Free Software Foundation, Inc.
{ "tty", no_argument, NULL, 't' },
{ "nw", no_argument, NULL, 't' },
{ "create-frame", no_argument, NULL, 'c' },
+ { "reuse-frame", no_argument, NULL, 'r' },
{ "alternate-editor", required_argument, NULL, 'a' },
{ "frame-parameters", required_argument, NULL, 'F' },
#ifdef SOCKETS_IN_FILE_SYSTEM
@@ -551,6 +555,11 @@ decode_options (int argc, char **argv)
create_frame = true;
break;
+ case 'r':
+ create_frame = true;
+ reuse_frame = true;
+ break;
+
case 'p':
parent_id = optarg;
create_frame = true;
@@ -647,6 +656,8 @@ print_help_and_exit (void)
-nw, -t, --tty Open a new Emacs frame on the current terminal\n\
-c, --create-frame Create a new frame instead of trying to\n\
use the current Emacs frame\n\
+-r, --reuse-frame Create a new frame if none exists, otherwise\n\
+ use the current Emacs frame\n\
", "\
-F ALIST, --frame-parameters=ALIST\n\
Set the parameters of a new frame\n\
@@ -1941,7 +1952,7 @@ main (int argc, char **argv)
if (nowait)
send_to_emacs (emacs_socket, "-nowait ");
- if (!create_frame)
+ if (!create_frame || reuse_frame)
send_to_emacs (emacs_socket, "-current-frame ");
if (display)
--
2.33.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* bug#51374: New options for emacsclient
2021-10-30 22:31 ` Gregory Heytings
@ 2021-11-04 23:14 ` Lars Ingebrigtsen
0 siblings, 0 replies; 4+ messages in thread
From: Lars Ingebrigtsen @ 2021-11-04 23:14 UTC (permalink / raw)
To: Gregory Heytings; +Cc: Stefan Kangas, 51374
Gregory Heytings <gregory@heytings.org> writes:
> Updated patch attached.
Makes sense to me; pushed to Emacs 29 now.
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-11-04 23:14 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-10-24 14:27 bug#51374: New options for emacsclient Gregory Heytings
2021-10-30 15:25 ` Stefan Kangas
2021-10-30 22:31 ` Gregory Heytings
2021-11-04 23:14 ` Lars Ingebrigtsen
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).