emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs/lisp server.el


From: Chong Yidong
Subject: [Emacs-diffs] emacs/lisp server.el
Date: Sun, 11 Jan 2009 16:45:37 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Chong Yidong <cyd>      09/01/11 16:45:37

Modified files:
        lisp           : server.el 

Log message:
        (server-save-buffers-kill-terminal): Args changed.  Handle nowait
        client frames.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/lisp/server.el?cvsroot=emacs&r1=1.182&r2=1.183

Patches:
Index: server.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/server.el,v
retrieving revision 1.182
retrieving revision 1.183
diff -u -b -r1.182 -r1.183
--- server.el   11 Jan 2009 16:15:38 -0000      1.182
+++ server.el   11 Jan 2009 16:45:36 -0000      1.183
@@ -1341,24 +1341,32 @@
       (select-frame-set-input-focus (window-frame (selected-window))))))
 
 ;;;###autoload
-(defun server-save-buffers-kill-terminal (proc &optional arg)
+(defun server-save-buffers-kill-terminal (arg)
   ;; Called from save-buffers-kill-terminal in files.el.
-  "Offer to save each buffer, then kill PROC.
-
+  "Offer to save each buffer, then kill the current client.
 With ARG non-nil, silently save all file-visiting buffers, then kill.
 
 If emacsclient was started with a list of filenames to edit, then
 only these files will be asked to be saved."
-  (when (processp proc)
+  (let ((proc (frame-parameter (selected-frame) 'client)))
+    (cond ((eq proc 'nowait)
+          ;; Nowait frames have no client buffer list.
+          (if (cdr (frame-list))
+              (progn (save-some-buffers arg)
+                     (delete-frame))
+            ;; If we're the last frame standing, kill Emacs.
+            (save-buffers-kill-emacs arg)))
+         ((processp proc)
     (let ((buffers (process-get proc 'buffers)))
-      ;; If client is bufferless, emulate a normal Emacs session
-      ;; exit and offer to save all buffers.  Otherwise, offer to
+            ;; If client is bufferless, emulate a normal Emacs exit
+            ;; and offer to save all buffers.  Otherwise, offer to
       ;; save only the buffers belonging to the client.
-      (save-some-buffers arg
-                         (if buffers
+            (save-some-buffers
+             arg (if buffers
                              (lambda () (memq (current-buffer) buffers))
                            t))
-      (server-delete-client proc))))
+            (server-delete-client proc)))
+         (t (error "Invalid client frame")))))
 
 (define-key ctl-x-map "#" 'server-edit)
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]