diff options
| author | Nick Roberts | 2006-02-27 09:14:59 +0000 |
|---|---|---|
| committer | Nick Roberts | 2006-02-27 09:14:59 +0000 |
| commit | f27d4d6cdbe088129efe271d5bb6c94440f61e92 (patch) | |
| tree | 2ce09b7f4d779f4365a3f0b1e585b258314d2db9 | |
| parent | 661f54cb945da4e8e34babcbe31828703270d2ac (diff) | |
| download | emacs-f27d4d6cdbe088129efe271d5bb6c94440f61e92.tar.gz emacs-f27d4d6cdbe088129efe271d5bb6c94440f61e92.zip | |
(gdb-source-window): New variable.
Re-introduce the concept of a source window.
(gdb-get-buffer-create): Rename from gdb-get-create-buffer for
consistency with get-buffer-create.
(def-gdb-auto-update-handler, gdb-info-locals-handler)
(gdb-data-list-register-values-handler)
(gdb-stack-list-locals-handler): Try to preserve window-start as
well as window-point.
(gdb-display-source-buffer): New function (old concept).
(gdb-goto-breakpoint): Use it.
| -rw-r--r-- | lisp/progmodes/gdb-ui.el | 111 |
1 files changed, 69 insertions, 42 deletions
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el index db79d43d321..a110b2b6d42 100644 --- a/lisp/progmodes/gdb-ui.el +++ b/lisp/progmodes/gdb-ui.el | |||
| @@ -124,6 +124,7 @@ and #define directives otherwise.") | |||
| 124 | "Non-nil if GDB knows that the inferior includes preprocessor macro info.") | 124 | "Non-nil if GDB knows that the inferior includes preprocessor macro info.") |
| 125 | (defvar gdb-buffer-fringe-width nil) | 125 | (defvar gdb-buffer-fringe-width nil) |
| 126 | (defvar gdb-signalled nil) | 126 | (defvar gdb-signalled nil) |
| 127 | (defvar gdb-source-window nil) | ||
| 127 | 128 | ||
| 128 | (defvar gdb-buffer-type nil | 129 | (defvar gdb-buffer-type nil |
| 129 | "One of the symbols bound in `gdb-buffer-rules'.") | 130 | "One of the symbols bound in `gdb-buffer-rules'.") |
| @@ -489,7 +490,8 @@ With arg, use separate IO iff arg is positive." | |||
| 489 | gdb-macro-info nil | 490 | gdb-macro-info nil |
| 490 | gdb-buffer-fringe-width (car (window-fringes)) | 491 | gdb-buffer-fringe-width (car (window-fringes)) |
| 491 | gdb-debug-ring nil | 492 | gdb-debug-ring nil |
| 492 | gdb-signalled nil) | 493 | gdb-signalled nil |
| 494 | gdb-source-window nil) | ||
| 493 | 495 | ||
| 494 | (setq gdb-buffer-type 'gdba) | 496 | (setq gdb-buffer-type 'gdba) |
| 495 | 497 | ||
| @@ -835,7 +837,7 @@ INDENT is the current indentation depth." | |||
| 835 | ;; The usual gdb interaction buffer is given the type `gdba' and | 837 | ;; The usual gdb interaction buffer is given the type `gdba' and |
| 836 | ;; is constructed specially. | 838 | ;; is constructed specially. |
| 837 | ;; | 839 | ;; |
| 838 | ;; Others are constructed by gdb-get-create-buffer and | 840 | ;; Others are constructed by gdb-get-buffer-create and |
| 839 | ;; named according to the rules set forth in the gdb-buffer-rules-assoc | 841 | ;; named according to the rules set forth in the gdb-buffer-rules-assoc |
| 840 | 842 | ||
| 841 | (defvar gdb-buffer-rules-assoc '()) | 843 | (defvar gdb-buffer-rules-assoc '()) |
| @@ -846,7 +848,7 @@ The key should be one of the cars in `gdb-buffer-rules-assoc'." | |||
| 846 | (save-excursion | 848 | (save-excursion |
| 847 | (gdb-look-for-tagged-buffer key (buffer-list)))) | 849 | (gdb-look-for-tagged-buffer key (buffer-list)))) |
| 848 | 850 | ||
| 849 | (defun gdb-get-create-buffer (key) | 851 | (defun gdb-get-buffer-create (key) |
| 850 | "Create a new gdb buffer of the type specified by KEY. | 852 | "Create a new gdb buffer of the type specified by KEY. |
| 851 | The key should be one of the cars in `gdb-buffer-rules-assoc'." | 853 | The key should be one of the cars in `gdb-buffer-rules-assoc'." |
| 852 | (or (gdb-get-buffer key) | 854 | (or (gdb-get-buffer key) |
| @@ -924,7 +926,7 @@ The key should be one of the cars in `gdb-buffer-rules-assoc'." | |||
| 924 | (interactive) | 926 | (interactive) |
| 925 | (if gdb-use-separate-io-buffer | 927 | (if gdb-use-separate-io-buffer |
| 926 | (gdb-display-buffer | 928 | (gdb-display-buffer |
| 927 | (gdb-get-create-buffer 'gdb-inferior-io)))) | 929 | (gdb-get-buffer-create 'gdb-inferior-io)))) |
| 928 | 930 | ||
| 929 | (defconst gdb-frame-parameters | 931 | (defconst gdb-frame-parameters |
| 930 | '((height . 14) (width . 80) | 932 | '((height . 14) (width . 80) |
| @@ -939,7 +941,7 @@ The key should be one of the cars in `gdb-buffer-rules-assoc'." | |||
| 939 | (if gdb-use-separate-io-buffer | 941 | (if gdb-use-separate-io-buffer |
| 940 | (let ((special-display-regexps (append special-display-regexps '(".*"))) | 942 | (let ((special-display-regexps (append special-display-regexps '(".*"))) |
| 941 | (special-display-frame-alist gdb-frame-parameters)) | 943 | (special-display-frame-alist gdb-frame-parameters)) |
| 942 | (display-buffer (gdb-get-create-buffer 'gdb-inferior-io))))) | 944 | (display-buffer (gdb-get-buffer-create 'gdb-inferior-io))))) |
| 943 | 945 | ||
| 944 | (defvar gdb-inferior-io-mode-map | 946 | (defvar gdb-inferior-io-mode-map |
| 945 | (let ((map (make-sparse-keymap))) | 947 | (let ((map (make-sparse-keymap))) |
| @@ -1156,7 +1158,7 @@ This sends the next command (if any) to gdb." | |||
| 1156 | (setq gdb-output-sink 'user) | 1158 | (setq gdb-output-sink 'user) |
| 1157 | (let ((handler | 1159 | (let ((handler |
| 1158 | (car (cdr gdb-current-item)))) | 1160 | (car (cdr gdb-current-item)))) |
| 1159 | (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) | 1161 | (with-current-buffer (gdb-get-buffer-create 'gdb-partial-output-buffer) |
| 1160 | (funcall handler)))) | 1162 | (funcall handler)))) |
| 1161 | (t | 1163 | (t |
| 1162 | (gdb-resync) | 1164 | (gdb-resync) |
| @@ -1253,7 +1255,7 @@ happens to be appropriate." | |||
| 1253 | (gdb-get-selected-frame) | 1255 | (gdb-get-selected-frame) |
| 1254 | (gdb-invalidate-frames) | 1256 | (gdb-invalidate-frames) |
| 1255 | ;; Regenerate breakpoints buffer in case it has been inadvertantly deleted. | 1257 | ;; Regenerate breakpoints buffer in case it has been inadvertantly deleted. |
| 1256 | (gdb-get-create-buffer 'gdb-breakpoints-buffer) | 1258 | (gdb-get-buffer-create 'gdb-breakpoints-buffer) |
| 1257 | (gdb-invalidate-breakpoints) | 1259 | (gdb-invalidate-breakpoints) |
| 1258 | ;; Do this through gdb-get-selected-frame -> gdb-frame-handler | 1260 | ;; Do this through gdb-get-selected-frame -> gdb-frame-handler |
| 1259 | ;; so gdb-frame-address is updated. | 1261 | ;; so gdb-frame-address is updated. |
| @@ -1288,6 +1290,22 @@ happens to be appropriate." | |||
| 1288 | (gdb-resync) | 1290 | (gdb-resync) |
| 1289 | (error "Phase error in gdb-post-prompt (got %s)" sink))))) | 1291 | (error "Phase error in gdb-post-prompt (got %s)" sink))))) |
| 1290 | 1292 | ||
| 1293 | ;; GUD displays the selected GDB frame. This might might not be the current | ||
| 1294 | ;; GDB frame (after up, down etc). If no GDB frame is visible but the last | ||
| 1295 | ;; visited breakpoint is, use that window. | ||
| 1296 | (defun gdb-display-source-buffer (buffer) | ||
| 1297 | (let* ((last-window (if gud-last-last-frame | ||
| 1298 | (get-buffer-window | ||
| 1299 | (gud-find-file (car gud-last-last-frame))))) | ||
| 1300 | (source-window (or last-window | ||
| 1301 | (if (and gdb-source-window | ||
| 1302 | (window-live-p gdb-source-window)) | ||
| 1303 | gdb-source-window)))) | ||
| 1304 | (when source-window | ||
| 1305 | (setq gdb-source-window source-window) | ||
| 1306 | (set-window-buffer source-window buffer)) | ||
| 1307 | source-window)) | ||
| 1308 | |||
| 1291 | (defun gud-gdba-marker-filter (string) | 1309 | (defun gud-gdba-marker-filter (string) |
| 1292 | "A gud marker filter for gdb. Handle a burst of output from GDB." | 1310 | "A gud marker filter for gdb. Handle a burst of output from GDB." |
| 1293 | (if gdb-flush-pending-output | 1311 | (if gdb-flush-pending-output |
| @@ -1370,23 +1388,23 @@ happens to be appropriate." | |||
| 1370 | (error "Bogon output sink %S" sink))))) | 1388 | (error "Bogon output sink %S" sink))))) |
| 1371 | 1389 | ||
| 1372 | (defun gdb-append-to-partial-output (string) | 1390 | (defun gdb-append-to-partial-output (string) |
| 1373 | (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) | 1391 | (with-current-buffer (gdb-get-buffer-create 'gdb-partial-output-buffer) |
| 1374 | (goto-char (point-max)) | 1392 | (goto-char (point-max)) |
| 1375 | (insert string))) | 1393 | (insert string))) |
| 1376 | 1394 | ||
| 1377 | (defun gdb-clear-partial-output () | 1395 | (defun gdb-clear-partial-output () |
| 1378 | (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) | 1396 | (with-current-buffer (gdb-get-buffer-create 'gdb-partial-output-buffer) |
| 1379 | (erase-buffer))) | 1397 | (erase-buffer))) |
| 1380 | 1398 | ||
| 1381 | (defun gdb-append-to-inferior-io (string) | 1399 | (defun gdb-append-to-inferior-io (string) |
| 1382 | (with-current-buffer (gdb-get-create-buffer 'gdb-inferior-io) | 1400 | (with-current-buffer (gdb-get-buffer-create 'gdb-inferior-io) |
| 1383 | (goto-char (point-max)) | 1401 | (goto-char (point-max)) |
| 1384 | (insert-before-markers string)) | 1402 | (insert-before-markers string)) |
| 1385 | (if (not (string-equal string "")) | 1403 | (if (not (string-equal string "")) |
| 1386 | (gdb-display-buffer (gdb-get-create-buffer 'gdb-inferior-io)))) | 1404 | (gdb-display-buffer (gdb-get-buffer-create 'gdb-inferior-io)))) |
| 1387 | 1405 | ||
| 1388 | (defun gdb-clear-inferior-io () | 1406 | (defun gdb-clear-inferior-io () |
| 1389 | (with-current-buffer (gdb-get-create-buffer 'gdb-inferior-io) | 1407 | (with-current-buffer (gdb-get-buffer-create 'gdb-inferior-io) |
| 1390 | (erase-buffer))) | 1408 | (erase-buffer))) |
| 1391 | 1409 | ||
| 1392 | 1410 | ||
| @@ -1434,11 +1452,13 @@ happens to be appropriate." | |||
| 1434 | (and buf | 1452 | (and buf |
| 1435 | (with-current-buffer buf | 1453 | (with-current-buffer buf |
| 1436 | (let* ((window (get-buffer-window buf 0)) | 1454 | (let* ((window (get-buffer-window buf 0)) |
| 1455 | (start (window-start window)) | ||
| 1437 | (p (window-point window)) | 1456 | (p (window-point window)) |
| 1438 | (buffer-read-only nil)) | 1457 | (buffer-read-only nil)) |
| 1439 | (erase-buffer) | 1458 | (erase-buffer) |
| 1440 | (insert-buffer-substring (gdb-get-create-buffer | 1459 | (insert-buffer-substring (gdb-get-buffer-create |
| 1441 | 'gdb-partial-output-buffer)) | 1460 | 'gdb-partial-output-buffer)) |
| 1461 | (set-window-start window start) | ||
| 1442 | (set-window-point window p))))) | 1462 | (set-window-point window p))))) |
| 1443 | ;; put customisation here | 1463 | ;; put customisation here |
| 1444 | (,custom-defun))) | 1464 | (,custom-defun))) |
| @@ -1688,14 +1708,14 @@ static char *magick[] = { | |||
| 1688 | "Display status of user-settable breakpoints." | 1708 | "Display status of user-settable breakpoints." |
| 1689 | (interactive) | 1709 | (interactive) |
| 1690 | (gdb-display-buffer | 1710 | (gdb-display-buffer |
| 1691 | (gdb-get-create-buffer 'gdb-breakpoints-buffer))) | 1711 | (gdb-get-buffer-create 'gdb-breakpoints-buffer))) |
| 1692 | 1712 | ||
| 1693 | (defun gdb-frame-breakpoints-buffer () | 1713 | (defun gdb-frame-breakpoints-buffer () |
| 1694 | "Display status of user-settable breakpoints in a new frame." | 1714 | "Display status of user-settable breakpoints in a new frame." |
| 1695 | (interactive) | 1715 | (interactive) |
| 1696 | (let ((special-display-regexps (append special-display-regexps '(".*"))) | 1716 | (let ((special-display-regexps (append special-display-regexps '(".*"))) |
| 1697 | (special-display-frame-alist gdb-frame-parameters)) | 1717 | (special-display-frame-alist gdb-frame-parameters)) |
| 1698 | (display-buffer (gdb-get-create-buffer 'gdb-breakpoints-buffer)))) | 1718 | (display-buffer (gdb-get-buffer-create 'gdb-breakpoints-buffer)))) |
| 1699 | 1719 | ||
| 1700 | (defvar gdb-breakpoints-mode-map | 1720 | (defvar gdb-breakpoints-mode-map |
| 1701 | (let ((map (make-sparse-keymap)) | 1721 | (let ((map (make-sparse-keymap)) |
| @@ -1767,9 +1787,6 @@ static char *magick[] = { | |||
| 1767 | "Display the breakpoint location specified at current line." | 1787 | "Display the breakpoint location specified at current line." |
| 1768 | (interactive (list last-input-event)) | 1788 | (interactive (list last-input-event)) |
| 1769 | (if event (posn-set-point (event-end event))) | 1789 | (if event (posn-set-point (event-end event))) |
| 1770 | ;; Hack to stop gdb-goto-breakpoint displaying in GUD buffer. | ||
| 1771 | (let ((window (get-buffer-window gud-comint-buffer))) | ||
| 1772 | (if window (save-selected-window (select-window window)))) | ||
| 1773 | (save-excursion | 1790 | (save-excursion |
| 1774 | (beginning-of-line 1) | 1791 | (beginning-of-line 1) |
| 1775 | (if (looking-at "\\([0-9]+\\) .+ in .+ at\\s-+\\(\\S-+\\):\\([0-9]+\\)") | 1792 | (if (looking-at "\\([0-9]+\\) .+ in .+ at\\s-+\\(\\S-+\\):\\([0-9]+\\)") |
| @@ -1777,11 +1794,13 @@ static char *magick[] = { | |||
| 1777 | (file (match-string 2)) | 1794 | (file (match-string 2)) |
| 1778 | (line (match-string 3))) | 1795 | (line (match-string 3))) |
| 1779 | (save-selected-window | 1796 | (save-selected-window |
| 1780 | (let* ((buf (find-file-noselect | 1797 | (let* ((buffer (find-file-noselect |
| 1781 | (if (file-exists-p file) file | 1798 | (if (file-exists-p file) file |
| 1782 | (cdr (assoc bptno gdb-location-alist))))) | 1799 | (cdr (assoc bptno gdb-location-alist))))) |
| 1783 | (window (display-buffer buf))) | 1800 | (window (unless (gdb-display-source-buffer buffer) |
| 1784 | (with-current-buffer buf | 1801 | (display-buffer buffer)))) |
| 1802 | (setq gdb-source-window window) | ||
| 1803 | (with-current-buffer buffer | ||
| 1785 | (goto-line (string-to-number line)) | 1804 | (goto-line (string-to-number line)) |
| 1786 | (set-window-point window (point)))))) | 1805 | (set-window-point window (point)))))) |
| 1787 | (error "No location specified.")))) | 1806 | (error "No location specified.")))) |
| @@ -1844,14 +1863,14 @@ static char *magick[] = { | |||
| 1844 | "Display backtrace of current stack." | 1863 | "Display backtrace of current stack." |
| 1845 | (interactive) | 1864 | (interactive) |
| 1846 | (gdb-display-buffer | 1865 | (gdb-display-buffer |
| 1847 | (gdb-get-create-buffer 'gdb-stack-buffer))) | 1866 | (gdb-get-buffer-create 'gdb-stack-buffer))) |
| 1848 | 1867 | ||
| 1849 | (defun gdb-frame-stack-buffer () | 1868 | (defun gdb-frame-stack-buffer () |
| 1850 | "Display backtrace of current stack in a new frame." | 1869 | "Display backtrace of current stack in a new frame." |
| 1851 | (interactive) | 1870 | (interactive) |
| 1852 | (let ((special-display-regexps (append special-display-regexps '(".*"))) | 1871 | (let ((special-display-regexps (append special-display-regexps '(".*"))) |
| 1853 | (special-display-frame-alist gdb-frame-parameters)) | 1872 | (special-display-frame-alist gdb-frame-parameters)) |
| 1854 | (display-buffer (gdb-get-create-buffer 'gdb-stack-buffer)))) | 1873 | (display-buffer (gdb-get-buffer-create 'gdb-stack-buffer)))) |
| 1855 | 1874 | ||
| 1856 | (defvar gdb-frames-mode-map | 1875 | (defvar gdb-frames-mode-map |
| 1857 | (let ((map (make-sparse-keymap))) | 1876 | (let ((map (make-sparse-keymap))) |
| @@ -1925,14 +1944,14 @@ static char *magick[] = { | |||
| 1925 | "Display IDs of currently known threads." | 1944 | "Display IDs of currently known threads." |
| 1926 | (interactive) | 1945 | (interactive) |
| 1927 | (gdb-display-buffer | 1946 | (gdb-display-buffer |
| 1928 | (gdb-get-create-buffer 'gdb-threads-buffer))) | 1947 | (gdb-get-buffer-create 'gdb-threads-buffer))) |
| 1929 | 1948 | ||
| 1930 | (defun gdb-frame-threads-buffer () | 1949 | (defun gdb-frame-threads-buffer () |
| 1931 | "Display IDs of currently known threads in a new frame." | 1950 | "Display IDs of currently known threads in a new frame." |
| 1932 | (interactive) | 1951 | (interactive) |
| 1933 | (let ((special-display-regexps (append special-display-regexps '(".*"))) | 1952 | (let ((special-display-regexps (append special-display-regexps '(".*"))) |
| 1934 | (special-display-frame-alist gdb-frame-parameters)) | 1953 | (special-display-frame-alist gdb-frame-parameters)) |
| 1935 | (display-buffer (gdb-get-create-buffer 'gdb-threads-buffer)))) | 1954 | (display-buffer (gdb-get-buffer-create 'gdb-threads-buffer)))) |
| 1936 | 1955 | ||
| 1937 | (defvar gdb-threads-mode-map | 1956 | (defvar gdb-threads-mode-map |
| 1938 | (let ((map (make-sparse-keymap))) | 1957 | (let ((map (make-sparse-keymap))) |
| @@ -2061,14 +2080,14 @@ static char *magick[] = { | |||
| 2061 | "Display integer register contents." | 2080 | "Display integer register contents." |
| 2062 | (interactive) | 2081 | (interactive) |
| 2063 | (gdb-display-buffer | 2082 | (gdb-display-buffer |
| 2064 | (gdb-get-create-buffer 'gdb-registers-buffer))) | 2083 | (gdb-get-buffer-create 'gdb-registers-buffer))) |
| 2065 | 2084 | ||
| 2066 | (defun gdb-frame-registers-buffer () | 2085 | (defun gdb-frame-registers-buffer () |
| 2067 | "Display integer register contents in a new frame." | 2086 | "Display integer register contents in a new frame." |
| 2068 | (interactive) | 2087 | (interactive) |
| 2069 | (let ((special-display-regexps (append special-display-regexps '(".*"))) | 2088 | (let ((special-display-regexps (append special-display-regexps '(".*"))) |
| 2070 | (special-display-frame-alist gdb-frame-parameters)) | 2089 | (special-display-frame-alist gdb-frame-parameters)) |
| 2071 | (display-buffer (gdb-get-create-buffer 'gdb-registers-buffer)))) | 2090 | (display-buffer (gdb-get-buffer-create 'gdb-registers-buffer)))) |
| 2072 | 2091 | ||
| 2073 | (defun gdb-all-registers () | 2092 | (defun gdb-all-registers () |
| 2074 | "Toggle the display of floating-point registers (pre GDB 6.4 only)." | 2093 | "Toggle the display of floating-point registers (pre GDB 6.4 only)." |
| @@ -2077,10 +2096,10 @@ static char *magick[] = { | |||
| 2077 | (if gdb-all-registers | 2096 | (if gdb-all-registers |
| 2078 | (progn | 2097 | (progn |
| 2079 | (setq gdb-all-registers nil) | 2098 | (setq gdb-all-registers nil) |
| 2080 | (with-current-buffer (gdb-get-create-buffer 'gdb-registers-buffer) | 2099 | (with-current-buffer (gdb-get-buffer-create 'gdb-registers-buffer) |
| 2081 | (setq mode-name "Registers"))) | 2100 | (setq mode-name "Registers"))) |
| 2082 | (setq gdb-all-registers t) | 2101 | (setq gdb-all-registers t) |
| 2083 | (with-current-buffer (gdb-get-create-buffer 'gdb-registers-buffer) | 2102 | (with-current-buffer (gdb-get-buffer-create 'gdb-registers-buffer) |
| 2084 | (setq mode-name "Registers:All"))) | 2103 | (setq mode-name "Registers:All"))) |
| 2085 | (message (format "Display of floating-point registers %sabled" | 2104 | (message (format "Display of floating-point registers %sabled" |
| 2086 | (if gdb-all-registers "en" "dis"))) | 2105 | (if gdb-all-registers "en" "dis"))) |
| @@ -2385,14 +2404,14 @@ corresponding to the mode line clicked." | |||
| 2385 | "Display memory contents." | 2404 | "Display memory contents." |
| 2386 | (interactive) | 2405 | (interactive) |
| 2387 | (gdb-display-buffer | 2406 | (gdb-display-buffer |
| 2388 | (gdb-get-create-buffer 'gdb-memory-buffer))) | 2407 | (gdb-get-buffer-create 'gdb-memory-buffer))) |
| 2389 | 2408 | ||
| 2390 | (defun gdb-frame-memory-buffer () | 2409 | (defun gdb-frame-memory-buffer () |
| 2391 | "Display memory contents in a new frame." | 2410 | "Display memory contents in a new frame." |
| 2392 | (interactive) | 2411 | (interactive) |
| 2393 | (let ((special-display-regexps (append special-display-regexps '(".*"))) | 2412 | (let ((special-display-regexps (append special-display-regexps '(".*"))) |
| 2394 | (special-display-frame-alist gdb-frame-parameters)) | 2413 | (special-display-frame-alist gdb-frame-parameters)) |
| 2395 | (display-buffer (gdb-get-create-buffer 'gdb-memory-buffer)))) | 2414 | (display-buffer (gdb-get-buffer-create 'gdb-memory-buffer)))) |
| 2396 | 2415 | ||
| 2397 | 2416 | ||
| 2398 | ;; Locals buffer. | 2417 | ;; Locals buffer. |
| @@ -2450,12 +2469,15 @@ corresponding to the mode line clicked." | |||
| 2450 | (and buf | 2469 | (and buf |
| 2451 | (with-current-buffer buf | 2470 | (with-current-buffer buf |
| 2452 | (let* ((window (get-buffer-window buf 0)) | 2471 | (let* ((window (get-buffer-window buf 0)) |
| 2472 | (start (window-start window)) | ||
| 2453 | (p (window-point window)) | 2473 | (p (window-point window)) |
| 2454 | (buffer-read-only nil)) | 2474 | (buffer-read-only nil)) |
| 2455 | (erase-buffer) | 2475 | (erase-buffer) |
| 2456 | (insert-buffer-substring (gdb-get-create-buffer | 2476 | (insert-buffer-substring (gdb-get-buffer-create |
| 2457 | 'gdb-partial-output-buffer)) | 2477 | 'gdb-partial-output-buffer)) |
| 2458 | (set-window-point window p))))) | 2478 | (set-window-start window start) |
| 2479 | (set-window-point window p)) | ||
| 2480 | ))) | ||
| 2459 | (run-hooks 'gdb-info-locals-hook)) | 2481 | (run-hooks 'gdb-info-locals-hook)) |
| 2460 | 2482 | ||
| 2461 | (defvar gdb-locals-mode-map | 2483 | (defvar gdb-locals-mode-map |
| @@ -2489,14 +2511,14 @@ corresponding to the mode line clicked." | |||
| 2489 | "Display local variables of current stack and their values." | 2511 | "Display local variables of current stack and their values." |
| 2490 | (interactive) | 2512 | (interactive) |
| 2491 | (gdb-display-buffer | 2513 | (gdb-display-buffer |
| 2492 | (gdb-get-create-buffer 'gdb-locals-buffer))) | 2514 | (gdb-get-buffer-create 'gdb-locals-buffer))) |
| 2493 | 2515 | ||
| 2494 | (defun gdb-frame-locals-buffer () | 2516 | (defun gdb-frame-locals-buffer () |
| 2495 | "Display local variables of current stack and their values in a new frame." | 2517 | "Display local variables of current stack and their values in a new frame." |
| 2496 | (interactive) | 2518 | (interactive) |
| 2497 | (let ((special-display-regexps (append special-display-regexps '(".*"))) | 2519 | (let ((special-display-regexps (append special-display-regexps '(".*"))) |
| 2498 | (special-display-frame-alist gdb-frame-parameters)) | 2520 | (special-display-frame-alist gdb-frame-parameters)) |
| 2499 | (display-buffer (gdb-get-create-buffer 'gdb-locals-buffer)))) | 2521 | (display-buffer (gdb-get-buffer-create 'gdb-locals-buffer)))) |
| 2500 | 2522 | ||
| 2501 | 2523 | ||
| 2502 | ;;;; Window management | 2524 | ;;;; Window management |
| @@ -2619,7 +2641,7 @@ corresponding to the mode line clicked." | |||
| 2619 | (split-window-horizontally) | 2641 | (split-window-horizontally) |
| 2620 | (other-window 1) | 2642 | (other-window 1) |
| 2621 | (gdb-set-window-buffer | 2643 | (gdb-set-window-buffer |
| 2622 | (gdb-get-create-buffer 'gdb-inferior-io))) | 2644 | (gdb-get-buffer-create 'gdb-inferior-io))) |
| 2623 | (other-window 1) | 2645 | (other-window 1) |
| 2624 | (gdb-set-window-buffer (gdb-stack-buffer-name)) | 2646 | (gdb-set-window-buffer (gdb-stack-buffer-name)) |
| 2625 | (split-window-horizontally) | 2647 | (split-window-horizontally) |
| @@ -2707,7 +2729,7 @@ buffers." | |||
| 2707 | (setq gdb-macro-info t)) | 2729 | (setq gdb-macro-info t)) |
| 2708 | (if gdb-many-windows | 2730 | (if gdb-many-windows |
| 2709 | (gdb-setup-windows) | 2731 | (gdb-setup-windows) |
| 2710 | (gdb-get-create-buffer 'gdb-breakpoints-buffer) | 2732 | (gdb-get-buffer-create 'gdb-breakpoints-buffer) |
| 2711 | (if gdb-show-main | 2733 | (if gdb-show-main |
| 2712 | (let ((pop-up-windows t)) | 2734 | (let ((pop-up-windows t)) |
| 2713 | (display-buffer (gud-find-file gdb-main-file)))))) | 2735 | (display-buffer (gud-find-file gdb-main-file)))))) |
| @@ -2960,7 +2982,7 @@ BUFFER nil or omitted means use the current buffer." | |||
| 2960 | (interactive) | 2982 | (interactive) |
| 2961 | (setq gdb-previous-frame nil) | 2983 | (setq gdb-previous-frame nil) |
| 2962 | (gdb-display-buffer | 2984 | (gdb-display-buffer |
| 2963 | (gdb-get-create-buffer 'gdb-assembler-buffer))) | 2985 | (gdb-get-buffer-create 'gdb-assembler-buffer))) |
| 2964 | 2986 | ||
| 2965 | (defun gdb-frame-assembler-buffer () | 2987 | (defun gdb-frame-assembler-buffer () |
| 2966 | "Display disassembly view in a new frame." | 2988 | "Display disassembly view in a new frame." |
| @@ -2968,7 +2990,7 @@ BUFFER nil or omitted means use the current buffer." | |||
| 2968 | (setq gdb-previous-frame nil) | 2990 | (setq gdb-previous-frame nil) |
| 2969 | (let ((special-display-regexps (append special-display-regexps '(".*"))) | 2991 | (let ((special-display-regexps (append special-display-regexps '(".*"))) |
| 2970 | (special-display-frame-alist gdb-frame-parameters)) | 2992 | (special-display-frame-alist gdb-frame-parameters)) |
| 2971 | (display-buffer (gdb-get-create-buffer 'gdb-assembler-buffer)))) | 2993 | (display-buffer (gdb-get-buffer-create 'gdb-assembler-buffer)))) |
| 2972 | 2994 | ||
| 2973 | ;; modified because if gdb-frame-address has changed value a new command | 2995 | ;; modified because if gdb-frame-address has changed value a new command |
| 2974 | ;; must be enqueued to update the buffer with the new output | 2996 | ;; must be enqueued to update the buffer with the new output |
| @@ -3166,11 +3188,14 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}") | |||
| 3166 | (concat register-values register-string))) | 3188 | (concat register-values register-string))) |
| 3167 | (let ((buf (gdb-get-buffer 'gdb-registers-buffer))) | 3189 | (let ((buf (gdb-get-buffer 'gdb-registers-buffer))) |
| 3168 | (with-current-buffer buf | 3190 | (with-current-buffer buf |
| 3169 | (let ((p (window-point (get-buffer-window buf 0))) | 3191 | (let* ((window (get-buffer-window buf 0)) |
| 3170 | (buffer-read-only nil)) | 3192 | (start (window-start window)) |
| 3193 | (p (window-point window)) | ||
| 3194 | (buffer-read-only nil)) | ||
| 3171 | (erase-buffer) | 3195 | (erase-buffer) |
| 3172 | (insert register-values) | 3196 | (insert register-values) |
| 3173 | (set-window-point (get-buffer-window buf 0) p)))))) | 3197 | (set-window-start window start) |
| 3198 | (set-window-point window p)))))) | ||
| 3174 | (gdb-data-list-register-values-custom)) | 3199 | (gdb-data-list-register-values-custom)) |
| 3175 | 3200 | ||
| 3176 | (defun gdb-data-list-register-values-custom () | 3201 | (defun gdb-data-list-register-values-custom () |
| @@ -3255,6 +3280,7 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}") | |||
| 3255 | (let ((buf (gdb-get-buffer 'gdb-locals-buffer))) | 3280 | (let ((buf (gdb-get-buffer 'gdb-locals-buffer))) |
| 3256 | (and buf (with-current-buffer buf | 3281 | (and buf (with-current-buffer buf |
| 3257 | (let* ((window (get-buffer-window buf 0)) | 3282 | (let* ((window (get-buffer-window buf 0)) |
| 3283 | (start (window-start window)) | ||
| 3258 | (p (window-point window)) | 3284 | (p (window-point window)) |
| 3259 | (buffer-read-only nil)) | 3285 | (buffer-read-only nil)) |
| 3260 | (erase-buffer) | 3286 | (erase-buffer) |
| @@ -3270,6 +3296,7 @@ value=\\(\".*?\"\\),type=\"\\(.+?\\)\"}") | |||
| 3270 | (insert | 3296 | (insert |
| 3271 | (concat name "\t" (nth 1 local) | 3297 | (concat name "\t" (nth 1 local) |
| 3272 | "\t" (nth 2 local) "\n"))) | 3298 | "\t" (nth 2 local) "\n"))) |
| 3299 | (set-window-start window start) | ||
| 3273 | (set-window-point window p))))))) | 3300 | (set-window-point window p))))))) |
| 3274 | 3301 | ||
| 3275 | (defun gdb-get-register-names () | 3302 | (defun gdb-get-register-names () |