diff options
| author | Nick Roberts | 2004-11-24 10:31:15 +0000 |
|---|---|---|
| committer | Nick Roberts | 2004-11-24 10:31:15 +0000 |
| commit | 4e607b5992d6b82550fe3264077ca8033c03d762 (patch) | |
| tree | 7745aeeed3da5569653a46bfd0205116c1452514 | |
| parent | 1919c2cdb4dcd49c616d8568e45674bbaec02863 (diff) | |
| download | emacs-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.el | 57 |
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) |