diff options
| author | Richard M. Stallman | 1994-03-03 19:23:59 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1994-03-03 19:23:59 +0000 |
| commit | faf931a83dc97561d331617520e2c5d97f1411fc (patch) | |
| tree | 0501f51b17a55a85fe8b4dbb854a76026a5a09af | |
| parent | c1eaf68c238bb534f50d55b3b584c2c5f0a023f1 (diff) | |
| download | emacs-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.el | 37 |
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.") | |||
| 108 | which are deleted and reused after each edit | 109 | which are deleted and reused after each edit |
| 109 | by the programs that invoke the emacs server.") | 110 | by 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." | |||
| 270 | Then bury it, and return a suggested buffer to select next." | 269 | Then 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. |