]> git.eshelyaron.com Git - emacs.git/commitdiff
New emacsclient option to either create or reuse an existing frame.
authorGregory Heytings <gregory@heytings.org>
Thu, 4 Nov 2021 23:14:30 +0000 (00:14 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Thu, 4 Nov 2021 23:14:30 +0000 (00:14 +0100)
* doc/emacs/misc.texi (emacsclient Options): Document the new option.

* doc/man/emacsclient.1: Mention the new option (bug#51374).
* etc/NEWS: Mention the new option.

* 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
doc/man/emacsclient.1
etc/NEWS
lib-src/emacsclient.c

index f66b69cdd733cdc42ecdf4faf61634e24461b5bf..4be47990d1f16605571541b063bae261ac8ccb44 100644 (file)
@@ -1992,6 +1992,11 @@ the new frame displays the @file{*scratch*} buffer by default.  You
 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
index ba64efa282c9757085d987061651a9e6cc62e665..cc58f106e696bfc601fee7c3622788ccfd7be312 100644 (file)
@@ -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
index 1b3f4c0524fa97d550bb2148bd0b4dc63daee37e..899f3567e6e5681ad509c322568a2ad8e5b010a6 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -102,6 +102,14 @@ highlights segments of buffer text whose reordering for display is
 suspicious and could be malicious.
 
 \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
 
 ---
index cff3cec2a79f26d9b9211083cc6515c33fd4c66b..0e800dd7e89e3b063de6d403b8e013ee2ed2b0d0 100644 (file)
@@ -116,6 +116,9 @@ static bool eval;
 /* 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 @@ static struct option const longopts[] =
   { "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 @@ The following OPTIONS are accepted:\n\
 -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)