]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve support for desktop restoration in daemon mode
authorEli Zaretskii <eliz@gnu.org>
Sat, 10 Mar 2018 11:48:49 +0000 (13:48 +0200)
committerAndrew G Cohen <cohen@andy.bu.edu>
Tue, 11 Dec 2018 06:15:03 +0000 (14:15 +0800)
* lisp/server.el (server-after-make-frame-hook): New hook.
(server-execute): Call it after creating a new frame or before
switching to a buffer shown in a client frame.  (Bug#30421)

* doc/emacs/misc.texi (Saving Emacs Sessions): Adjust advice for
restoring desktop in daemon mode to the new hook.
* doc/lispref/frames.texi (Creating Frames, Standard Hooks):
Document server-after-make-frame-hook.

* etc/NEWS: Mention server-after-make-frame-hook.

doc/emacs/misc.texi
doc/lispref/frames.texi
doc/lispref/hooks.texi
etc/NEWS
lisp/server.el

index 60986347a71e84a870bf6cf5ef2b83e63f7486b5..68bd308983f476f29ca39a1207052506bdb10f7e 100644 (file)
@@ -2529,7 +2529,7 @@ e.g., the daemon cannot use GUI features, so parameters such as frame
 position, size, and decorations cannot be restored.  For that reason,
 you may wish to delay restoring the desktop in daemon mode until the
 first client connects, by calling @code{desktop-read} in a hook
-function that you add to @code{after-make-frame-functions}
+function that you add to @code{server-after-make-frame-hook}
 (@pxref{Creating Frames,,, elisp, The Emacs Lisp Reference Manual}).
 
 @node Recursive Edit
index 2f9bb398865b3074de9fc16fa41b2cd81dfbe470..459f05cb1c9f3d21df5eba4e2d4d12a1218f24ed 100644 (file)
@@ -181,6 +181,12 @@ the value of that parameter in the created frame to its value in the
 selected frame.
 @end defvar
 
+@defopt server-after-make-frame-hook
+A normal hook run when the Emacs server creates a client frame.  When
+this hook is called, the created frame is the selected one.
+@xref{Emacs Server,,, emacs, The GNU Emacs Manual}.
+@end defopt
+
 
 @node Multiple Terminals
 @section Multiple Terminals
index db4e413921fb126e0b8316c2b8b562ec652aae95..e374d02defbdb3f0220a89dfe7bec02c55389fdc 100644 (file)
@@ -66,6 +66,7 @@ not exactly a hook, but does a similar job.
 
 @item after-make-frame-functions
 @itemx before-make-frame-hook
+@itemx server-after-make-frame-hook
 @xref{Creating Frames}.
 
 @c Not general enough?
index 3ef766b74b415e28c3fc0ed89375900327c4686a..10bccdcbae3027762195df2bc5221e64c70fe8fc 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -83,6 +83,15 @@ Customize the option 'mode-line-default-help-echo' to restore the old
 behavior where the tooltip text is also shown when the corresponding
 action does not apply.
 
++++
+** New hook 'server-after-make-frame-hook'.
+This hook is a convenient place to perform initializations in daemon
+mode which require GUI features to be available.  One example is
+restoration of the previous session using the desktop.el package: put
+the call to 'desktop-read' in this hook, if you want the GUI settings
+to be restored, or if desktop.el needs to interact with you during
+restoration of the session.
+
 +++
 ** New function 'logcount' calculates an integer's Hamming weight.
 
index a892203c24a7a557dc81af5b19245eeb14c93a72..ff03cbe622c4ee674309358087fbeadc8373897c 100644 (file)
@@ -188,6 +188,13 @@ space (this means characters from ! to ~; or from code 33 to
   :group 'server
   :type 'hook)
 
+(defcustom server-after-make-frame-hook nil
+  "Hook run when the Emacs server creates a client frame.
+The created frame is selected when the hook is called."
+  :group 'server
+  :type 'hook
+  :version "27.1")
+
 (defcustom server-done-hook nil
   "Hook run when done editing a buffer for the Emacs server."
   :group 'server
@@ -1336,9 +1343,11 @@ The following commands are accepted by the client:
            ((or isearch-mode (minibufferp))
             nil)
            ((and frame (null buffers))
+            (run-hooks 'server-after-make-frame-hook)
             (message "%s" (substitute-command-keys
                            "When done with this frame, type \\[delete-frame]")))
            ((not (null buffers))
+            (run-hooks 'server-after-make-frame-hook)
             (server-switch-buffer (car buffers) nil (cdr (car files)))
             (run-hooks 'server-switch-hook)
             (unless nowait