summaryrefslogtreecommitdiff
path: root/lisp/server.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1994-03-03 19:23:59 +0000
committerRichard M. Stallman <rms@gnu.org>1994-03-03 19:23:59 +0000
commitfaf931a83dc97561d331617520e2c5d97f1411fc (patch)
tree0501f51b17a55a85fe8b4dbb854a76026a5a09af /lisp/server.el
parentc1eaf68c238bb534f50d55b3b584c2c5f0a023f1 (diff)
downloademacs-faf931a83dc97561d331617520e2c5d97f1411fc.tar.gz
(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.
Diffstat (limited to 'lisp/server.el')
-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 @@
;;; Code:
-(defvar server-program (concat exec-directory "emacsserver")
+(defvar server-program (expand-file-name "emacsserver" exec-directory)
"*The program to use as the edit server.")
(defvar server-visit-hook nil
@@ -95,6 +95,7 @@ When a buffer is marked as \"done\", it is removed from this list.")
(defvar server-buffer-clients nil
"List of clientids for clients requesting editing of current buffer.")
+(make-variable-buffer-local 'server-buffer-clients)
;; Changing major modes should not erase this local.
(put 'server-buffer-clients 'permanent-local t)
@@ -108,9 +109,6 @@ If it is a frame, use the frame's selected window.")
which are deleted and reused after each edit
by the programs that invoke the emacs server.")
-(make-variable-buffer-local 'server-buffer-clients)
-(put 'server-buffer-clients 'permanent-local t)
-(setq-default server-buffer-clients nil)
(or (assq 'server-buffer-clients minor-mode-alist)
(setq minor-mode-alist (cons '(server-buffer-clients " Server") minor-mode-alist)))
@@ -249,10 +247,11 @@ as a suggestion for what to select next."
(setq server-clients (delq client server-clients))))
(setq old-clients (cdr old-clients)))
(if (buffer-name buffer)
- (save-excursion
- (set-buffer buffer)
- (setq server-buffer-clients nil)))
- (bury-buffer buffer)
+ (progn
+ (save-excursion
+ (set-buffer buffer)
+ (setq server-buffer-clients nil))
+ (bury-buffer buffer)))
next-buffer))
(defun server-temp-file-p (buffer)
@@ -270,18 +269,34 @@ are considered temporary."
Then bury it, and return a suggested buffer to select next."
(let ((buffer (current-buffer)))
(if server-buffer-clients
- (progn
+ (let (suggested-buffer)
(if (server-temp-file-p buffer)
;; For a temp file, save, and do make a non-numeric backup
;; (unless make-backup-files is nil).
(let ((version-control nil)
(buffer-backed-up nil))
(save-buffer)
- (kill-buffer buffer))
+ (kill-buffer buffer)
+ (setq suggested-buffer (current-buffer)))
(if (and (buffer-modified-p)
(y-or-n-p (concat "Save file " buffer-file-name "? ")))
(save-buffer buffer)))
- (server-buffer-done buffer)))))
+ (or (server-buffer-done buffer) suggested-buffer)))))
+
+;; If a server buffer is killed, release its client.
+;; I'm not sure this is really a good idea--do you want the client
+;; to proceed using whatever is on disk in that file?
+(add-hook 'kill-buffer-query-functions
+ (function
+ (lambda ()
+ (or (not server-buffer-clients)
+ (yes-or-no-p "Buffer `%s' still has clients; kill it? ")))))
+
+(add-hook 'kill-emacs-query-functions
+ (function
+ (lambda ()
+ (or (not server-clients)
+ (yes-or-no-p "Server buffers are still have clients; exit anyway? ")))))
(defun server-edit (&optional arg)
"Switch to next server editing buffer; say \"Done\" for current buffer.