aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerd Moellmann2000-08-21 15:26:01 +0000
committerGerd Moellmann2000-08-21 15:26:01 +0000
commitc6a117f07b67896c632d6a36929d2cd5f7bebff5 (patch)
tree7ffb1144a6399f062e20accfe611e197ff8a0f8d
parent424d8b44519e91d18776e3790a16d8c6d870edcf (diff)
downloademacs-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.el61
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
126which are deleted and reused after each edit 126which are deleted and reused after each edit
127by the programs that invoke the emacs server." 127by 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.
133If non-nil, kill a buffer unless it already existed before editing
134it with Emacs server. If nil, kill only buffers as specified by
135`server-temp-file-regexp'.
136Please note that only buffers are killed that still have a client,
137i.e. buffers visited which \"emacsclient --no-wait\" are never killed in
138this 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)