comparison lisp/progmodes/gdb-ui.el @ 94445:52a0ed7601cb

(gdb-info-stack-custom): Use gud-tool-bar-item-visible-no-fringe. (gdb-display-buffer): Don't pop new buffer if gud-comint-buffer is already visible in frame. Remove optional size parameter and add optional frame parameter.
author Nick Roberts <nickrob@snap.net.nz>
date Tue, 29 Apr 2008 00:41:23 +0000
parents 912b9ac13852
children 149436454788
comparison
equal deleted inserted replaced
94444:606c1d881bf0 94445:52a0ed7601cb
95 ;; (gud-go) sends "continue" to GDB (should be "run"). 95 ;; (gud-go) sends "continue" to GDB (should be "run").
96 96
97 ;;; TODO: 97 ;;; TODO:
98 98
99 ;; 1) Use MI command -data-read-memory for memory window. 99 ;; 1) Use MI command -data-read-memory for memory window.
100 ;; 2) Use tree-widget.el instead of the speedbar for watch-expressions? 100 ;; 2) Use tree-buffer.el (from ECB) instead of the speedbar for
101 ;; watch-expressions? Handling of watch-expressions needs to be
102 ;; overhauled to work for large arrays/structures by creating variable
103 ;; objects for visible watch-expressions only.
101 ;; 3) Mark breakpoint locations on scroll-bar of source buffer? 104 ;; 3) Mark breakpoint locations on scroll-bar of source buffer?
102 105
103 ;;; Code: 106 ;;; Code:
104 107
105 (require 'gud) 108 (require 'gud)
2254 (while (< (point) (point-max)) 2257 (while (< (point) (point-max))
2255 (setq bl (line-beginning-position) 2258 (setq bl (line-beginning-position)
2256 el (line-end-position)) 2259 el (line-end-position))
2257 (when (looking-at "#") 2260 (when (looking-at "#")
2258 (add-text-properties bl el 2261 (add-text-properties bl el
2259 '(mouse-face highlight 2262 '(mouse-face highlight
2260 help-echo "mouse-2, RET: Select frame"))) 2263 help-echo "mouse-2, RET: Select frame")))
2261 (goto-char bl) 2264 (goto-char bl)
2262 (when (looking-at "^#\\([0-9]+\\)") 2265 (when (looking-at "^#\\([0-9]+\\)")
2263 (when (string-equal (match-string 1) gdb-frame-number) 2266 (when (string-equal (match-string 1) gdb-frame-number)
2264 (if (> (car (window-fringes)) 0) 2267 (if (gud-tool-bar-item-visible-no-fringe)
2265 (progn 2268 (progn
2266 (or gdb-stack-position 2269 (put-text-property bl (+ bl 4)
2267 (setq gdb-stack-position (make-marker))) 2270 'face '(:inverse-video t))
2268 (set-marker gdb-stack-position (point)) 2271 (setq move-to bl))
2269 (setq move-to gdb-stack-position)) 2272 (or gdb-stack-position
2270 (put-text-property bl (+ bl 4) 2273 (setq gdb-stack-position (make-marker)))
2271 'face '(:inverse-video t)) 2274 (set-marker gdb-stack-position (point))
2272 (setq move-to bl))) 2275 (setq move-to gdb-stack-position)))
2273 (when (re-search-forward "\\([^ ]+\\) (" el t) 2276 (when (re-search-forward "\\([^ ]+\\) (" el t)
2274 (put-text-property (match-beginning 1) (match-end 1) 2277 (put-text-property (match-beginning 1) (match-end 1)
2275 'face font-lock-function-name-face) 2278 'face font-lock-function-name-face)
2276 (setq bl (match-end 0)) 2279 (setq bl (match-end 0))
2277 (while (re-search-forward "<\\([^>]+\\)>" el t) 2280 (while (re-search-forward "<\\([^>]+\\)>" el t)
3003 (buffer-read-only nil)) 3006 (buffer-read-only nil))
3004 (erase-buffer) 3007 (erase-buffer)
3005 (insert-buffer-substring (gdb-get-buffer-create 3008 (insert-buffer-substring (gdb-get-buffer-create
3006 'gdb-partial-output-buffer)) 3009 'gdb-partial-output-buffer))
3007 (set-window-start window start) 3010 (set-window-start window start)
3008 (set-window-point window p)) 3011 (set-window-point window p)))))
3009 )))
3010 (run-hooks 'gdb-info-locals-hook)) 3012 (run-hooks 'gdb-info-locals-hook))
3011 3013
3012 (defvar gdb-locals-mode-map 3014 (defvar gdb-locals-mode-map
3013 (let ((map (make-sparse-keymap))) 3015 (let ((map (make-sparse-keymap)))
3014 (suppress-keymap map) 3016 (suppress-keymap map)
3052 (special-display-frame-alist gdb-frame-parameters)) 3054 (special-display-frame-alist gdb-frame-parameters))
3053 (display-buffer (gdb-get-buffer-create 'gdb-locals-buffer)))) 3055 (display-buffer (gdb-get-buffer-create 'gdb-locals-buffer))))
3054 3056
3055 3057
3056 ;;;; Window management 3058 ;;;; Window management
3057 (defun gdb-display-buffer (buf dedicated &optional size) 3059 (defun gdb-display-buffer (buf dedicated &optional frame)
3058 (let ((answer (get-buffer-window buf 0)) 3060 (let ((answer (get-buffer-window buf (or frame 0)))
3059 (must-split nil)) 3061 (must-split nil))
3060 (if answer 3062 (if answer
3061 (display-buffer buf nil 0) ;Deiconify the frame if necessary. 3063 (display-buffer buf nil (or frame 0)) ;Deiconify the frame if necessary.
3062 ;; The buffer is not yet displayed. 3064 (if (get-buffer-window gud-comint-buffer)
3063 (pop-to-buffer gud-comint-buffer) ;Select the right frame. 3065 (select-window (get-buffer-window gud-comint-buffer))
3066 ;; If the buffer is not yet displayed, select the right frame.
3067 (pop-to-buffer gud-comint-buffer))
3064 (let ((window (get-lru-window))) 3068 (let ((window (get-lru-window)))
3065 (if (and window 3069 (if (and window
3066 (not (memq window `(,(get-buffer-window gud-comint-buffer) 3070 (not (memq window `(,(get-buffer-window gud-comint-buffer)
3067 ,gdb-source-window)))) 3071 ,gdb-source-window))))
3068 (progn 3072 (progn
3069 (set-window-buffer window buf) 3073 (set-window-buffer window buf)
3070 (setq answer window)) 3074 (setq answer window))
3071 (setq must-split t))) 3075 (setq must-split t)))
3072 (if must-split 3076 (if must-split
3073 (let* ((largest (get-largest-window)) 3077 (let* ((largest (get-largest-window))
3074 (cur-size (window-height largest)) 3078 (cur-size (window-height largest)))
3075 (new-size (and size (< size cur-size) (- cur-size size)))) 3079 (setq answer (split-window largest))
3076 (setq answer (split-window largest new-size))
3077 (set-window-buffer answer buf) 3080 (set-window-buffer answer buf)
3078 (set-window-dedicated-p answer dedicated))) 3081 (set-window-dedicated-p answer dedicated)))
3079 answer))) 3082 answer)))
3080 3083
3081 3084