aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/server.el
diff options
context:
space:
mode:
authorGerd Moellmann <[email protected]>2000-08-21 15:26:01 +0000
committerGerd Moellmann <[email protected]>2000-08-21 15:26:01 +0000
commitc6a117f07b67896c632d6a36929d2cd5f7bebff5 (patch)
tree7ffb1144a6399f062e20accfe611e197ff8a0f8d /lisp/server.el
parent424d8b44519e91d18776e3790a16d8c6d870edcf (diff)
(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.
Diffstat (limited to 'lisp/server.el')
-rw-r--r--lisp/server.el61
1 files changed, 44 insertions, 17 deletions
diff --git a/lisp/server.el b/lisp/server.el
index 9f3aee40b8..35738eeb40 100644
--- a/lisp/server.el
+++ b/lisp/server.el
@@ -124,13 +124,29 @@ If it is a frame, use the frame's selected window.")
(defcustom server-temp-file-regexp "^/tmp/Re\\|/draft$"
"*Regexp which should match filenames of temporary files
which are deleted and reused after each edit
-by the programs that invoke the emacs server."
+by the programs that invoke the Emacs server."
:group 'server
:type 'regexp)
+(defcustom server-kill-new-buffers t
+ "*Whether to kill buffers when done with them.
+If non-nil, kill a buffer unless it already existed before editing
+it with Emacs server. If nil, kill only buffers as specified by
+`server-temp-file-regexp'.
+Please note that only buffers are killed that still have a client,
+i.e. buffers visited which \"emacsclient --no-wait\" are never killed in
+this way."
+ :group 'server
+ :type 'boolean
+ :version "21.1")
+
(or (assq 'server-buffer-clients minor-mode-alist)
(setq minor-mode-alist (cons '(server-buffer-clients " Server") minor-mode-alist)))
+(defvar server-existing-buffer nil
+ "Non-nil means a server buffer existed before visiting a file.")
+(make-variable-buffer-local 'server-existing-buffer)
+
;; If a *server* buffer exists,
;; write STRING to it for logging purposes.
(defun server-log (string)
@@ -286,22 +302,24 @@ so don't mark these buffers specially, just visit them normally."
;; if it happens to be one of those specified by the server.
(unwind-protect
(while files
- ;; If there is an existing buffer modified or the file is modified,
- ;; revert it.
- ;; If there is an existing buffer with deleted file, offer to write it.
+ ;; If there is an existing buffer modified or the file is
+ ;; modified, revert it. If there is an existing buffer with
+ ;; deleted file, offer to write it.
(let* ((filen (car (car files)))
(obuf (get-file-buffer filen)))
(if (and obuf (set-buffer obuf))
- (if (file-exists-p filen)
- (if (or (not (verify-visited-file-modtime obuf))
- (buffer-modified-p obuf))
- (revert-buffer t nil))
- (if (y-or-n-p
- (concat "File no longer exists: "
- filen
- ", write buffer to file? "))
- (write-file filen)))
+ (cond ((file-exists-p filen)
+ (if (or (not (verify-visited-file-modtime obuf))
+ (buffer-modified-p obuf))
+ (revert-buffer t nil)))
+ (t
+ (if (y-or-n-p
+ (concat "File no longer exists: "
+ filen
+ ", write buffer to file? "))
+ (write-file filen))))
(set-buffer (find-file-noselect filen))
+ (setq server-existing-buffer t)
(run-hooks 'server-visit-hook)))
(goto-line (nth 1 (car files)))
(if (not nowait)
@@ -364,10 +382,19 @@ or nil. KILLED is t if we killed BUFFER
;; Don't bother killing or burying the buffer
;; when we are called from kill-buffer.
(unless for-killing
- (if (server-temp-file-p buffer)
- (progn (kill-buffer buffer)
- (setq killed t))
- (bury-buffer buffer))))))
+ (when (and (not killed)
+ server-kill-new-buffers
+ (save-excursion
+ (set-buffer buffer)
+ server-existing-buffer))
+ (setq killed t)
+ (kill-buffer buffer))
+ (unless killed
+ (if (server-temp-file-p buffer)
+ (progn
+ (kill-buffer buffer)
+ (setq killed t))
+ (bury-buffer buffer)))))))
(list next-buffer killed)))
(defun server-temp-file-p (buffer)