- (let ((win (get-buffer-window next-buffer 0)))
- (if (and win (not server-window))
- ;; The buffer is already displayed: just reuse the window.
- (let ((frame (window-frame win)))
- (if (eq (frame-visible-p frame) 'icon)
- (raise-frame frame))
- (select-window win)
- (set-buffer next-buffer))
- ;; Otherwise, let's find an appropriate window.
- (cond ((and (windowp server-window)
- (window-live-p server-window))
- (select-window server-window))
- ((framep server-window)
- (if (not (frame-live-p server-window))
- (setq server-window (make-frame)))
- (select-window (frame-selected-window server-window))))
- (if (window-minibuffer-p (selected-window))
- (select-window (next-window nil 'nomini 0)))
- ;; Move to a non-dedicated window, if we have one.
- (when (window-dedicated-p (selected-window))
- (select-window
- (get-window-with-predicate
- (lambda (w)
- (and (not (window-dedicated-p w))
- (equal (frame-parameter (window-frame w) 'display)
- (frame-parameter (selected-frame) 'display))))
- 'nomini 'visible (selected-window))))
- (condition-case nil
- (switch-to-buffer next-buffer)
- ;; After all the above, we might still have ended up with
- ;; a minibuffer/dedicated-window (if there's no other).
- (error (pop-to-buffer next-buffer))))))))
-
-(global-set-key "\C-x#" 'server-edit)
+ (if (functionp server-window)
+ (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.
+ (let ((frame (window-frame win)))
+ (if (eq (frame-visible-p frame) 'icon)
+ (raise-frame frame))
+ (select-window win)
+ (set-buffer next-buffer))
+ ;; Otherwise, let's find an appropriate window.
+ (cond ((and (windowp server-window)
+ (window-live-p server-window))
+ (select-window server-window))
+ ((framep server-window)
+ (if (not (frame-live-p server-window))
+ (setq server-window (make-frame)))
+ (select-window (frame-selected-window server-window))))
+ (if (window-minibuffer-p (selected-window))
+ (select-window (next-window nil 'nomini 0)))
+ ;; Move to a non-dedicated window, if we have one.
+ (when (window-dedicated-p (selected-window))
+ (select-window
+ (get-window-with-predicate
+ (lambda (w)
+ (and (not (window-dedicated-p w))
+ (equal (frame-parameter (window-frame w) 'display)
+ (frame-parameter (selected-frame) 'display))))
+ 'nomini 'visible (selected-window))))
+ (condition-case nil
+ (switch-to-buffer next-buffer)
+ ;; After all the above, we might still have ended up with
+ ;; a minibuffer/dedicated-window (if there's no other).
+ (error (pop-to-buffer next-buffer)))))))))
+
+(define-key ctl-x-map "#" 'server-edit)