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")))