diff options
| author | Gerd Moellmann | 2000-08-21 15:26:01 +0000 |
|---|---|---|
| committer | Gerd Moellmann | 2000-08-21 15:26:01 +0000 |
| commit | c6a117f07b67896c632d6a36929d2cd5f7bebff5 (patch) | |
| tree | 7ffb1144a6399f062e20accfe611e197ff8a0f8d | |
| parent | 424d8b44519e91d18776e3790a16d8c6d870edcf (diff) | |
| download | emacs-c6a117f07b67896c632d6a36929d2cd5f7bebff5.tar.gz emacs-c6a117f07b67896c632d6a36929d2cd5f7bebff5.zip | |
(server-kill-new-buffers): New user option.
(server-existing-buffer): New buffer-local variable.
(server-visit-files): When using an existing buffer, set
server-existing-buffer to t.
(server-buffer-done): If server-kill-new-buffers is t, kill the
buffer, unless it was already present before visiting it with
Emacs server.
| -rw-r--r-- | lisp/server.el | 61 |
1 files changed, 44 insertions, 17 deletions
diff --git a/lisp/server.el b/lisp/server.el index 9f3aee40b88..35738eeb407 100644 --- a/lisp/server.el +++ b/lisp/server.el | |||
| @@ -124,13 +124,29 @@ If it is a frame, use the frame's selected window.") | |||
| 124 | (defcustom server-temp-file-regexp "^/tmp/Re\\|/draft$" | 124 | (defcustom server-temp-file-regexp "^/tmp/Re\\|/draft$" |
| 125 | "*Regexp which should match filenames of temporary files | 125 | "*Regexp which should match filenames of temporary files |
| 126 | which are deleted and reused after each edit | 126 | which are deleted and reused after each edit |
| 127 | by the programs that invoke the emacs server." | 127 | by the programs that invoke the Emacs server." |
| 128 | :group 'server | 128 | :group 'server |
| 129 | :type 'regexp) | 129 | :type 'regexp) |
| 130 | 130 | ||
| 131 | (defcustom server-kill-new-buffers t | ||
| 132 | "*Whether to kill buffers when done with them. | ||
| 133 | If non-nil, kill a buffer unless it already existed before editing | ||
| 134 | it with Emacs server. If nil, kill only buffers as specified by | ||
| 135 | `server-temp-file-regexp'. | ||
| 136 | Please note that only buffers are killed that still have a client, | ||
| 137 | i.e. buffers visited which \"emacsclient --no-wait\" are never killed in | ||
| 138 | this way." | ||
| 139 | :group 'server | ||
| 140 | :type 'boolean | ||
| 141 | :version "21.1") | ||
| 142 | |||
| 131 | (or (assq 'server-buffer-clients minor-mode-alist) | 143 | (or (assq 'server-buffer-clients minor-mode-alist) |
| 132 | (setq minor-mode-alist (cons '(server-buffer-clients " Server") minor-mode-alist))) | 144 | (setq minor-mode-alist (cons '(server-buffer-clients " Server") minor-mode-alist))) |
| 133 | 145 | ||
| 146 | (defvar server-existing-buffer nil | ||
| 147 | "Non-nil means a server buffer existed before visiting a file.") | ||
| 148 | (make-variable-buffer-local 'server-existing-buffer) | ||
| 149 | |||
| 134 | ;; If a *server* buffer exists, | 150 | ;; If a *server* buffer exists, |
| 135 | ;; write STRING to it for logging purposes. | 151 | ;; write STRING to it for logging purposes. |
| 136 | (defun server-log (string) | 152 | (defun server-log (string) |
| @@ -286,22 +302,24 @@ so don't mark these buffers specially, just visit them normally." | |||
| 286 | ;; if it happens to be one of those specified by the server. | 302 | ;; if it happens to be one of those specified by the server. |
| 287 | (unwind-protect | 303 | (unwind-protect |
| 288 | (while files | 304 | (while files |
| 289 | ;; If there is an existing buffer modified or the file is modified, | 305 | ;; If there is an existing buffer modified or the file is |
| 290 | ;; revert it. | 306 | ;; modified, revert it. If there is an existing buffer with |
| 291 | ;; If there is an existing buffer with deleted file, offer to write it. | 307 | ;; deleted file, offer to write it. |
| 292 | (let* ((filen (car (car files))) | 308 | (let* ((filen (car (car files))) |
| 293 | (obuf (get-file-buffer filen))) | 309 | (obuf (get-file-buffer filen))) |
| 294 | (if (and obuf (set-buffer obuf)) | 310 | (if (and obuf (set-buffer obuf)) |
| 295 | (if (file-exists-p filen) | 311 | (cond ((file-exists-p filen) |
| 296 | (if (or (not (verify-visited-file-modtime obuf)) | 312 | (if (or (not (verify-visited-file-modtime obuf)) |
| 297 | (buffer-modified-p obuf)) | 313 | (buffer-modified-p obuf)) |
| 298 | (revert-buffer t nil)) | 314 | (revert-buffer t nil))) |
| 299 | (if (y-or-n-p | 315 | (t |
| 300 | (concat "File no longer exists: " | 316 | (if (y-or-n-p |
| 301 | filen | 317 | (concat "File no longer exists: " |
| 302 | ", write buffer to file? ")) | 318 | filen |
| 303 | (write-file filen))) | 319 | ", write buffer to file? ")) |
| 320 | (write-file filen)))) | ||
| 304 | (set-buffer (find-file-noselect filen)) | 321 | (set-buffer (find-file-noselect filen)) |
| 322 | (setq server-existing-buffer t) | ||
| 305 | (run-hooks 'server-visit-hook))) | 323 | (run-hooks 'server-visit-hook))) |
| 306 | (goto-line (nth 1 (car files))) | 324 | (goto-line (nth 1 (car files))) |
| 307 | (if (not nowait) | 325 | (if (not nowait) |
| @@ -364,10 +382,19 @@ or nil. KILLED is t if we killed BUFFER | |||
| 364 | ;; Don't bother killing or burying the buffer | 382 | ;; Don't bother killing or burying the buffer |
| 365 | ;; when we are called from kill-buffer. | 383 | ;; when we are called from kill-buffer. |
| 366 | (unless for-killing | 384 | (unless for-killing |
| 367 | (if (server-temp-file-p buffer) | 385 | (when (and (not killed) |
| 368 | (progn (kill-buffer buffer) | 386 | server-kill-new-buffers |
| 369 | (setq killed t)) | 387 | (save-excursion |
| 370 | (bury-buffer buffer)))))) | 388 | (set-buffer buffer) |
| 389 | server-existing-buffer)) | ||
| 390 | (setq killed t) | ||
| 391 | (kill-buffer buffer)) | ||
| 392 | (unless killed | ||
| 393 | (if (server-temp-file-p buffer) | ||
| 394 | (progn | ||
| 395 | (kill-buffer buffer) | ||
| 396 | (setq killed t)) | ||
| 397 | (bury-buffer buffer))))))) | ||
| 371 | (list next-buffer killed))) | 398 | (list next-buffer killed))) |
| 372 | 399 | ||
| 373 | (defun server-temp-file-p (buffer) | 400 | (defun server-temp-file-p (buffer) |