# HG changeset patch # User Chong Yidong # Date 1220721425 0 # Node ID 003efd7220ffc87d150b7fb5c19989c806692c1c # Parent 05e484ca4ad3d0b872e3bb43f022df538b8fb58c (server-switch-buffer): New arg. (server-execute): If reusing an existing window, set file position if required. diff -r 05e484ca4ad3 -r 003efd7220ff lisp/server.el --- a/lisp/server.el Sat Sep 06 17:15:49 2008 +0000 +++ b/lisp/server.el Sat Sep 06 17:17:05 2008 +0000 @@ -986,7 +986,7 @@ (message "%s" (substitute-command-keys "When done with this frame, type \\[delete-frame]"))) ((not (null buffers)) - (server-switch-buffer (car buffers)) + (server-switch-buffer (car buffers) nil (cdr (car files))) (run-hooks 'server-switch-hook) (unless nowait (message "%s" (substitute-command-keys @@ -1206,14 +1206,18 @@ (server-clients (apply 'server-switch-buffer (server-done))) (t (message "No server editing buffers exist")))) -(defun server-switch-buffer (&optional next-buffer killed-one) +(defun server-switch-buffer (&optional next-buffer killed-one filepos) "Switch to another buffer, preferably one that has a client. Arg NEXT-BUFFER is a suggestion; if it is a live buffer, use it. KILLED-ONE is t in a recursive call if we have already killed one temp-file server buffer. This means we should avoid the final \"switch to some other buffer\" since we've already effectively -done that." +done that. + +FILEPOS specifies a new buffer position for NEXT-BUFFER, if we +visit NEXT-BUFFER in an existing window. If non-nil, it should +be a cons cell (LINENUMBER . COLUMNNUMBER)." (if (null next-buffer) (progn (let ((rest server-clients)) @@ -1238,10 +1242,14 @@ (funcall server-window next-buffer) (let ((win (get-buffer-window next-buffer 0))) (if (and win (not server-window)) - ;; The buffer is already displayed: just reuse the window. + ;; The buffer is already displayed: just reuse the + ;; window. If FILEPOS is non-nil, use it to replace the + ;; window's own value of point. (progn (select-window win) - (set-buffer next-buffer)) + (set-buffer next-buffer) + (when filepos + (server-goto-line-column filepos))) ;; Otherwise, let's find an appropriate window. (cond ((window-live-p server-window) (select-window server-window))