aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman1994-03-03 19:23:59 +0000
committerRichard M. Stallman1994-03-03 19:23:59 +0000
commitfaf931a83dc97561d331617520e2c5d97f1411fc (patch)
tree0501f51b17a55a85fe8b4dbb854a76026a5a09af
parentc1eaf68c238bb534f50d55b3b584c2c5f0a023f1 (diff)
downloademacs-faf931a83dc97561d331617520e2c5d97f1411fc.tar.gz
emacs-faf931a83dc97561d331617520e2c5d97f1411fc.zip
(kill-emacs-query-functions, kill-buffer-query-functions):
Add functions to these lists. (server-program): Add exec-directory to value. Use expand-file-name. (server-buffer-done): If buffer is dead, don't bury it. (server-done): If we kill the old buffer, and server-buffer-done gives us nil, return the new current buffer.
-rw-r--r--lisp/server.el37
1 files changed, 26 insertions, 11 deletions
diff --git a/lisp/server.el b/lisp/server.el
index 6a0ee45ef7a..57b47c196ec 100644
--- a/lisp/server.el
+++ b/lisp/server.el
@@ -73,7 +73,7 @@
73 73
74;;; Code: 74;;; Code:
75 75
76(defvar server-program (concat exec-directory "emacsserver") 76(defvar server-program (expand-file-name "emacsserver" exec-directory)
77 "*The program to use as the edit server.") 77 "*The program to use as the edit server.")
78 78
79(defvar server-visit-hook nil 79(defvar server-visit-hook nil
@@ -95,6 +95,7 @@ When a buffer is marked as \"done\", it is removed from this list.")
95 95
96(defvar server-buffer-clients nil 96(defvar server-buffer-clients nil
97 "List of clientids for clients requesting editing of current buffer.") 97 "List of clientids for clients requesting editing of current buffer.")
98(make-variable-buffer-local 'server-buffer-clients)
98;; Changing major modes should not erase this local. 99;; Changing major modes should not erase this local.
99(put 'server-buffer-clients 'permanent-local t) 100(put 'server-buffer-clients 'permanent-local t)
100 101
@@ -108,9 +109,6 @@ If it is a frame, use the frame's selected window.")
108which are deleted and reused after each edit 109which are deleted and reused after each edit
109by the programs that invoke the emacs server.") 110by the programs that invoke the emacs server.")
110 111
111(make-variable-buffer-local 'server-buffer-clients)
112(put 'server-buffer-clients 'permanent-local t)
113(setq-default server-buffer-clients nil)
114(or (assq 'server-buffer-clients minor-mode-alist) 112(or (assq 'server-buffer-clients minor-mode-alist)
115 (setq minor-mode-alist (cons '(server-buffer-clients " Server") minor-mode-alist))) 113 (setq minor-mode-alist (cons '(server-buffer-clients " Server") minor-mode-alist)))
116 114
@@ -249,10 +247,11 @@ as a suggestion for what to select next."
249 (setq server-clients (delq client server-clients)))) 247 (setq server-clients (delq client server-clients))))
250 (setq old-clients (cdr old-clients))) 248 (setq old-clients (cdr old-clients)))
251 (if (buffer-name buffer) 249 (if (buffer-name buffer)
252 (save-excursion 250 (progn
253 (set-buffer buffer) 251 (save-excursion
254 (setq server-buffer-clients nil))) 252 (set-buffer buffer)
255 (bury-buffer buffer) 253 (setq server-buffer-clients nil))
254 (bury-buffer buffer)))
256 next-buffer)) 255 next-buffer))
257 256
258(defun server-temp-file-p (buffer) 257(defun server-temp-file-p (buffer)
@@ -270,18 +269,34 @@ are considered temporary."
270Then bury it, and return a suggested buffer to select next." 269Then bury it, and return a suggested buffer to select next."
271 (let ((buffer (current-buffer))) 270 (let ((buffer (current-buffer)))
272 (if server-buffer-clients 271 (if server-buffer-clients
273 (progn 272 (let (suggested-buffer)
274 (if (server-temp-file-p buffer) 273 (if (server-temp-file-p buffer)
275 ;; For a temp file, save, and do make a non-numeric backup 274 ;; For a temp file, save, and do make a non-numeric backup
276 ;; (unless make-backup-files is nil). 275 ;; (unless make-backup-files is nil).
277 (let ((version-control nil) 276 (let ((version-control nil)
278 (buffer-backed-up nil)) 277 (buffer-backed-up nil))
279 (save-buffer) 278 (save-buffer)
280 (kill-buffer buffer)) 279 (kill-buffer buffer)
280 (setq suggested-buffer (current-buffer)))
281 (if (and (buffer-modified-p) 281 (if (and (buffer-modified-p)
282 (y-or-n-p (concat "Save file " buffer-file-name "? "))) 282 (y-or-n-p (concat "Save file " buffer-file-name "? ")))
283 (save-buffer buffer))) 283 (save-buffer buffer)))
284 (server-buffer-done buffer))))) 284 (or (server-buffer-done buffer) suggested-buffer)))))
285
286;; If a server buffer is killed, release its client.
287;; I'm not sure this is really a good idea--do you want the client
288;; to proceed using whatever is on disk in that file?
289(add-hook 'kill-buffer-query-functions
290 (function
291 (lambda ()
292 (or (not server-buffer-clients)
293 (yes-or-no-p "Buffer `%s' still has clients; kill it? ")))))
294
295(add-hook 'kill-emacs-query-functions
296 (function
297 (lambda ()
298 (or (not server-clients)
299 (yes-or-no-p "Server buffers are still have clients; exit anyway? ")))))
285 300
286(defun server-edit (&optional arg) 301(defun server-edit (&optional arg)
287 "Switch to next server editing buffer; say \"Done\" for current buffer. 302 "Switch to next server editing buffer; say \"Done\" for current buffer.