aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Roberts2004-11-24 10:31:15 +0000
committerNick Roberts2004-11-24 10:31:15 +0000
commit4e607b5992d6b82550fe3264077ca8033c03d762 (patch)
tree7745aeeed3da5569653a46bfd0205116c1452514
parent1919c2cdb4dcd49c616d8568e45674bbaec02863 (diff)
downloademacs-4e607b5992d6b82550fe3264077ca8033c03d762.tar.gz
emacs-4e607b5992d6b82550fe3264077ca8033c03d762.zip
(dedicated-switch-to-buffer): New function.
(gdb-ann3, gdb-setup-windows, gdb-restore-windows): Dedicate gdb-related windows. (gdb-display-buffer): Dedicate gdb-related windows. Don't grab other frames. (gdb-reset): Remove dedicated property after debugging.
-rw-r--r--lisp/progmodes/gdb-ui.el57
1 files changed, 25 insertions, 32 deletions
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el
index af3b4d3e0e5..4bea2f54c2a 100644
--- a/lisp/progmodes/gdb-ui.el
+++ b/lisp/progmodes/gdb-ui.el
@@ -249,6 +249,8 @@ detailed description of this mode.
249 (gdb-enqueue-input (list "server list MAIN__\n" 'ignore)) ; Fortran program 249 (gdb-enqueue-input (list "server list MAIN__\n" 'ignore)) ; Fortran program
250 (gdb-enqueue-input (list "server info source\n" 'gdb-source-info)) 250 (gdb-enqueue-input (list "server info source\n" 'gdb-source-info))
251 ;; 251 ;;
252 (set-window-dedicated-p (get-buffer-window gud-comint-buffer) t)
253 ;;
252 (run-hooks 'gdba-mode-hook)) 254 (run-hooks 'gdba-mode-hook))
253 255
254(defcustom gdb-use-colon-colon-notation nil 256(defcustom gdb-use-colon-colon-notation nil
@@ -1584,39 +1586,24 @@ static char *magick[] = {
1584 1586
1585 1587
1586;;;; Window management 1588;;;; Window management
1587
1588;;; The way we abuse the dedicated-p flag is pretty gross, but seems
1589;;; to do the right thing. Seeing as there is no way for Lisp code to
1590;;; get at the use_time field of a window, I'm not sure there exists a
1591;;; more elegant solution without writing C code.
1592
1593(defun gdb-display-buffer (buf &optional size) 1589(defun gdb-display-buffer (buf &optional size)
1594 (let ((must-split nil) 1590 (let ((must-split nil)
1595 (answer nil)) 1591 (answer nil))
1596 (unwind-protect 1592 (setq answer (get-buffer-window buf 'visible))
1597 (progn 1593 (if (not answer)
1598 (walk-windows 1594 (let ((window (get-lru-window)))
1599 #'(lambda (win) 1595 (if window
1600 (if (eq gud-comint-buffer (window-buffer win)) 1596 (progn
1601 (set-window-dedicated-p win t)))) 1597 (set-window-buffer window buf)
1602 (setq answer (get-buffer-window buf 'visible)) 1598 (setq answer window))
1603 (if (not answer) 1599 (setq must-split t))))
1604 (let ((window (get-lru-window 'visible)))
1605 (if window
1606 (progn
1607 (set-window-buffer window buf)
1608 (setq answer window))
1609 (setq must-split t)))))
1610 (walk-windows
1611 #'(lambda (win)
1612 (if (eq gud-comint-buffer (window-buffer win))
1613 (set-window-dedicated-p win nil)))))
1614 (if must-split 1600 (if must-split
1615 (let* ((largest (get-largest-window 'visible)) 1601 (let* ((largest (get-largest-window))
1616 (cur-size (window-height largest)) 1602 (cur-size (window-height largest))
1617 (new-size (and size (< size cur-size) (- cur-size size)))) 1603 (new-size (and size (< size cur-size) (- cur-size size))))
1618 (setq answer (split-window largest new-size)) 1604 (setq answer (split-window largest new-size))
1619 (set-window-buffer answer buf))) 1605 (set-window-buffer answer buf)))
1606 (set-window-dedicated-p answer t)
1620 answer)) 1607 answer))
1621 1608
1622(defun gdb-display-source-buffer (buffer) 1609(defun gdb-display-source-buffer (buffer)
@@ -1715,6 +1702,11 @@ static char *magick[] = {
1715 :group 'gud 1702 :group 'gud
1716 :version "21.4") 1703 :version "21.4")
1717 1704
1705(defun dedicated-switch-to-buffer (name)
1706 (set-window-dedicated-p
1707 (get-buffer-window
1708 (switch-to-buffer name)) t))
1709
1718(defun gdb-setup-windows () 1710(defun gdb-setup-windows ()
1719 "Layout the window pattern for gdb-many-windows." 1711 "Layout the window pattern for gdb-many-windows."
1720 (gdb-display-locals-buffer) 1712 (gdb-display-locals-buffer)
@@ -1722,14 +1714,14 @@ static char *magick[] = {
1722 (delete-other-windows) 1714 (delete-other-windows)
1723 (gdb-display-breakpoints-buffer) 1715 (gdb-display-breakpoints-buffer)
1724 (delete-other-windows) 1716 (delete-other-windows)
1725 (switch-to-buffer gud-comint-buffer) 1717 (dedicated-switch-to-buffer gud-comint-buffer)
1726 (split-window nil ( / ( * (window-height) 3) 4)) 1718 (split-window nil ( / ( * (window-height) 3) 4))
1727 (split-window nil ( / (window-height) 3)) 1719 (split-window nil ( / (window-height) 3))
1728 (split-window-horizontally) 1720 (split-window-horizontally)
1729 (other-window 1) 1721 (other-window 1)
1730 (switch-to-buffer (gdb-locals-buffer-name)) 1722 (dedicated-switch-to-buffer (gdb-locals-buffer-name))
1731 (other-window 1) 1723 (other-window 1)
1732 (switch-to-buffer 1724 (dedicated-switch-to-buffer
1733 (if (and gdb-view-source 1725 (if (and gdb-view-source
1734 (eq gdb-selected-view 'source)) 1726 (eq gdb-selected-view 'source))
1735 (if gud-last-last-frame 1727 (if gud-last-last-frame
@@ -1739,12 +1731,12 @@ static char *magick[] = {
1739 (when gdb-use-inferior-io-buffer 1731 (when gdb-use-inferior-io-buffer
1740 (split-window-horizontally) 1732 (split-window-horizontally)
1741 (other-window 1) 1733 (other-window 1)
1742 (switch-to-buffer (gdb-inferior-io-name))) 1734 (dedicated-switch-to-buffer (gdb-inferior-io-name)))
1743 (other-window 1) 1735 (other-window 1)
1744 (switch-to-buffer (gdb-stack-buffer-name)) 1736 (dedicated-switch-to-buffer (gdb-stack-buffer-name))
1745 (split-window-horizontally) 1737 (split-window-horizontally)
1746 (other-window 1) 1738 (other-window 1)
1747 (switch-to-buffer (gdb-breakpoints-buffer-name)) 1739 (dedicated-switch-to-buffer (gdb-breakpoints-buffer-name))
1748 (other-window 1)) 1740 (other-window 1))
1749 1741
1750(defcustom gdb-many-windows nil 1742(defcustom gdb-many-windows nil
@@ -1781,7 +1773,7 @@ This arrangement depends on the value of `gdb-many-windows'."
1781 (delete-other-windows) 1773 (delete-other-windows)
1782 (split-window) 1774 (split-window)
1783 (other-window 1) 1775 (other-window 1)
1784 (switch-to-buffer 1776 (dedicated-switch-to-buffer
1785 (if (and gdb-view-source 1777 (if (and gdb-view-source
1786 (eq gdb-selected-view 'source)) 1778 (eq gdb-selected-view 'source))
1787 (if gud-last-last-frame 1779 (if gud-last-last-frame
@@ -1801,6 +1793,7 @@ Kills the gdb buffers and resets the source buffers."
1801 (kill-buffer nil) 1793 (kill-buffer nil)
1802 (gdb-remove-breakpoint-icons (point-min) (point-max) t) 1794 (gdb-remove-breakpoint-icons (point-min) (point-max) t)
1803 (setq gud-minor-mode nil) 1795 (setq gud-minor-mode nil)
1796 (set-window-dedicated-p (get-buffer-window buffer) nil)
1804 (kill-local-variable 'tool-bar-map) 1797 (kill-local-variable 'tool-bar-map)
1805 (setq gud-running nil)))))) 1798 (setq gud-running nil))))))
1806 (when (markerp gdb-overlay-arrow-position) 1799 (when (markerp gdb-overlay-arrow-position)