comparison lisp/emacs-lisp/edebug.el @ 77165:4ae89136374d

(edebug-pop-to-buffer): Don't select window marked as dedicated.
author Martin Rudalics <rudalics@gmx.at>
date Fri, 13 Apr 2007 06:03:53 +0000
parents f960587873db
children 935157c0b596 0842cee3ad33 e6fdae9180d4
comparison
equal deleted inserted replaced
77164:0d019d25db47 77165:4ae89136374d
362 (defconst edebug-trace-buffer "*edebug-trace*" 362 (defconst edebug-trace-buffer "*edebug-trace*"
363 "Name of the buffer to put trace info in.") 363 "Name of the buffer to put trace info in.")
364 364
365 (defun edebug-pop-to-buffer (buffer &optional window) 365 (defun edebug-pop-to-buffer (buffer &optional window)
366 ;; Like pop-to-buffer, but select window where BUFFER was last shown. 366 ;; Like pop-to-buffer, but select window where BUFFER was last shown.
367 ;; Select WINDOW if it provided and it still exists. Otherwise, 367 ;; Select WINDOW if it is provided and still exists. Otherwise,
368 ;; if buffer is currently shown in several windows, choose one. 368 ;; if buffer is currently shown in several windows, choose one.
369 ;; Otherwise, find a new window, possibly splitting one. 369 ;; Otherwise, find a new window, possibly splitting one.
370 (setq window (if (and (windowp window) (edebug-window-live-p window) 370 (setq window
371 (eq (window-buffer window) buffer)) 371 (cond
372 window 372 ((and (windowp window) (edebug-window-live-p window)
373 (if (eq (window-buffer (selected-window)) buffer) 373 (eq (window-buffer window) buffer))
374 (selected-window) 374 window)
375 (edebug-get-buffer-window buffer)))) 375 ((eq (window-buffer (selected-window)) buffer)
376 (if window 376 ;; Selected window already displays BUFFER.
377 (select-window window) 377 (selected-window))
378 (if (one-window-p) 378 ((edebug-get-buffer-window buffer))
379 (split-window)) 379 ((one-window-p 'nomini)
380 ;; (message "next window: %s" (next-window)) (sit-for 1) 380 ;; When there's one window only, split it.
381 (if (eq (get-buffer-window edebug-trace-buffer) (next-window)) 381 (split-window))
382 ;; Don't select trace window 382 ((let ((trace-window (get-buffer-window edebug-trace-buffer)))
383 nil 383 (catch 'found
384 (select-window (next-window)))) 384 (dolist (elt (window-list nil 'nomini))
385 (set-window-buffer (selected-window) buffer) 385 (unless (or (eq elt (selected-window)) (eq elt trace-window)
386 (set-window-hscroll (selected-window) 0);; should this be?? 386 (window-dedicated-p elt))
387 ;; Found a non-dedicated window not showing
388 ;; `edebug-trace-buffer', use it.
389 (throw 'found elt))))))
390 ;; All windows are dedicated or show `edebug-trace-buffer', split
391 ;; selected one.
392 (t (split-window))))
393 (select-window window)
394 (set-window-buffer window buffer)
395 (set-window-hscroll window 0);; should this be??
387 ;; Selecting the window does not set the buffer until command loop. 396 ;; Selecting the window does not set the buffer until command loop.
388 ;;(set-buffer buffer) 397 ;;(set-buffer buffer)
389 ) 398 )
390
391 399
392 (defun edebug-get-displayed-buffer-points () 400 (defun edebug-get-displayed-buffer-points ()
393 ;; Return a list of buffer point pairs, for all displayed buffers. 401 ;; Return a list of buffer point pairs, for all displayed buffers.
394 (let (list) 402 (let (list)
395 (walk-windows (lambda (w) 403 (walk-windows (lambda (w)