Function: gdb-preempt-existing-or-display-buffer
gdb-preempt-existing-or-display-buffer is a byte-compiled function
defined in gdb-mi.el.gz.
Signature
(gdb-preempt-existing-or-display-buffer BUF &optional SPLIT-HORIZONTAL)
Documentation
Find window displaying a buffer with the same
gdb-buffer-type(var)/gdb-buffer-type(fun) as BUF and show BUF there. If no such window
exists, just call gdb-display-buffer for BUF. If the window
found is already dedicated, split window according to
SPLIT-HORIZONTAL and show BUF in the new window.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/gdb-mi.el.gz
;; (let ((answer (get-buffer-window buf 0)))
;; (if answer
;; (display-buffer buf nil 0) ;Deiconify frame if necessary.
;; (let ((window (get-lru-window)))
;; (if (eq (buffer-local-value 'gud-minor-mode (window-buffer window))
;; 'gdbmi)
;; (let ((largest (get-largest-window)))
;; (setq answer (split-window largest))
;; (set-window-buffer answer buf)
;; (set-window-dedicated-p answer t)
;; answer)
;; (set-window-buffer window buf)
;; window)))))
(defun gdb-preempt-existing-or-display-buffer (buf &optional split-horizontal)
"Find window displaying a buffer with the same
`gdb-buffer-type' as BUF and show BUF there. If no such window
exists, just call `gdb-display-buffer' for BUF. If the window
found is already dedicated, split window according to
SPLIT-HORIZONTAL and show BUF in the new window."
(if buf
(when (not (get-buffer-window buf))
(let* ((buf-type (gdb-buffer-type buf))
(existing-window
(get-window-with-predicate
(lambda (w)
(and (eq buf-type
(gdb-buffer-type (window-buffer w)))
(not (window-dedicated-p w)))))))
(if existing-window
(set-window-buffer existing-window buf)
(let ((dedicated-window
(get-window-with-predicate
(lambda (w)
(eq buf-type
(gdb-buffer-type (window-buffer w)))))))
(if dedicated-window
(set-window-buffer
(split-window dedicated-window nil split-horizontal) buf)
(gdb-display-buffer buf))))))
(error "Null buffer")))