summaryrefslogtreecommitdiff
path: root/lisp/server.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1993-08-09 05:56:29 +0000
committerRichard M. Stallman <rms@gnu.org>1993-08-09 05:56:29 +0000
commitbf41069c6dffa2ac930c2cce11a6092aef10bf50 (patch)
tree0c456088d2338c4ed1a803c773991eb8139ab74c /lisp/server.el
parente1e181481073081fe9db19d2b933a4cf610540de (diff)
downloademacs-bf41069c6dffa2ac930c2cce11a6092aef10bf50.tar.gz
(server-visit-files): Restore current-buffer by hand,
not using save-excursion.
Diffstat (limited to 'lisp/server.el')
-rw-r--r--lisp/server.el52
1 files changed, 28 insertions, 24 deletions
diff --git a/lisp/server.el b/lisp/server.el
index 6cc087c19bf..416cadebd81 100644
--- a/lisp/server.el
+++ b/lisp/server.el
@@ -196,30 +196,34 @@ Prefix arg means just kill any existing server communications subprocess."
(defun server-visit-files (files client)
"Finds FILES and returns the list CLIENT with the buffers nconc'd.
FILES is an alist whose elements are (FILENAME LINENUMBER)."
- (let (client-record)
- (while files
- (save-excursion
- ;; 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)))
- (set-buffer (find-file-noselect filen))
- (run-hooks 'server-visit-hook)))
- (goto-line (nth 1 (car files)))
- (setq server-buffer-clients (cons (car client) server-buffer-clients))
- (setq client-record (cons (current-buffer) client-record)))
- (setq files (cdr files)))
+ (let (client-record (obuf (current-buffer)))
+ ;; Restore the current buffer afterward, but not using save-excursion,
+ ;; because we don't want to save point in this buffer
+ ;; 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.
+ (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)))
+ (set-buffer (find-file-noselect filen))
+ (run-hooks 'server-visit-hook)))
+ (goto-line (nth 1 (car files)))
+ (setq server-buffer-clients (cons (car client) server-buffer-clients))
+ (setq client-record (cons (current-buffer) client-record))
+ (setq files (cdr files)))
+ (set-buffer obuf))
(nconc client client-record)))
(defun server-buffer-done (buffer)