diff options
Diffstat (limited to 'lisp/server.el')
-rw-r--r-- | lisp/server.el | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/lisp/server.el b/lisp/server.el index 151ba35503f..05ac345d904 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -361,7 +361,7 @@ Updates `server-clients'." (defconst server-buffer " *server*" "Buffer used internally by Emacs's server. -One use is to log the I/O for debugging purposes (see `server-log'), +One use is to log the I/O for debugging purposes (see option `server-log'), the other is to provide a current buffer in which the process filter can safely let-bind buffer-local variables like `default-directory'.") @@ -369,7 +369,7 @@ safely let-bind buffer-local variables like `default-directory'.") "If non-nil, log the server's inputs and outputs in the `server-buffer'.") (defun server-log (string &optional client) - "If `server-log' is non-nil, log STRING to `server-buffer'. + "If option `server-log' is non-nil, log STRING to `server-buffer'. If CLIENT is non-nil, add a description of it to the logged message." (when server-log (with-current-buffer (get-buffer-create server-buffer) @@ -1257,12 +1257,17 @@ The following commands are accepted by the client: (mapc 'funcall (nreverse commands)) ;; If we were told only to open a new client, obey - ;; `initial-buffer-choice' if it specifies a file. - (unless (or files commands) - (if (stringp initial-buffer-choice) - (find-file initial-buffer-choice) - (switch-to-buffer (get-buffer-create "*scratch*") - 'norecord))) + ;; `initial-buffer-choice' if it specifies a file + ;; or a function. + (unless (or files commands) + (let ((buf + (cond ((stringp initial-buffer-choice) + (find-file-noselect initial-buffer-choice)) + ((functionp initial-buffer-choice) + (funcall initial-buffer-choice))))) + (switch-to-buffer + (if (buffer-live-p buf) buf (get-buffer-create "*scratch*")) + 'norecord))) ;; Delete the client if necessary. (cond |