Changeset 4079 for trunk/lisp/progmodes/gdb-ui.el
- Timestamp:
- 05/13/06 11:31:18 (3 years ago)
- Files:
-
- trunk/lisp/progmodes/gdb-ui.el (modified) (17 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lisp/progmodes/gdb-ui.el
r4073 r4079 115 115 where STATUS is nil (unchanged), `changed' or `out-of-scope', FP the frame 116 116 address for root variables.") 117 (defvar gdb-force-update t118 "Non-nil means that view of watch expressions will be updated in the speedbar.")119 117 (defvar gdb-main-file nil "Source file from which program execution begins.") 120 118 (defvar gdb-overlay-arrow-position nil) … … 528 526 gdb-frame-number nil 529 527 gdb-var-list nil 530 gdb-force-update t531 528 gdb-main-file nil 532 529 gdb-first-post-prompt t … … 698 695 (buffer-substring (region-beginning) (region-end)) 699 696 (tooltip-identifier-from-point (point)))))) 697 (speedbar 1) 700 698 (catch 'already-watched 701 699 (dolist (var gdb-var-list) … … 729 727 nil nil gdb-frame-address))) 730 728 (push var gdb-var-list) 731 (speedbar 1)732 729 (unless (string-equal 733 730 speedbar-initial-expansion-list-name "GUD") … … 736 733 (list 737 734 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba) 738 (concat "server interpreter mi \" -var-evaluate-expression "735 (concat "server interpreter mi \"0-var-evaluate-expression " 739 736 (car var) "\"\n") 740 (concat " -var-evaluate-expression " (car var) "\n"))737 (concat "0-var-evaluate-expression " (car var) "\n")) 741 738 `(lambda () (gdb-var-evaluate-expression-handler 742 739 ,(car var) nil))))) … … 745 742 (message-box "No symbol \"%s\" in current context." expr)))) 746 743 744 (defun gdb-speedbar-update () 745 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) 746 ;; Dummy command to update speedbar even when idle. 747 (gdb-enqueue-input (list "server pwd\n" 'gdb-speedbar-timer-fn)) 748 ;; Keep gdb-pending-triggers non-nil till end. 749 (push 'gdb-speedbar-timer gdb-pending-triggers))) 750 751 (defun gdb-speedbar-timer-fn () 752 (setq gdb-pending-triggers 753 (delq 'gdb-speedbar-timer gdb-pending-triggers)) 754 (speedbar-timer-fn)) 755 747 756 (defun gdb-var-evaluate-expression-handler (varnum changed) 748 757 (goto-char (point-min)) 749 (re-search-forward ".*value=\\(\".*\"\\)" nil t) 758 (re-search-forward "\\(.+\\)\\^done,value=\\(\".*\"\\)" nil t) 759 (setq gdb-pending-triggers 760 (delq (string-to-number (match-string 1)) gdb-pending-triggers)) 750 761 (let ((var (assoc varnum gdb-var-list))) 751 762 (when var 752 763 (if changed (setcar (nthcdr 5 var) 'changed)) 753 (setcar (nthcdr 4 var) (read (match-string 1)))))) 764 (setcar (nthcdr 4 var) (read (match-string 2))))) 765 (gdb-speedbar-update)) 754 766 755 767 (defun gdb-var-list-children (varnum) … … 782 794 (list 783 795 (concat 784 "server interpreter mi \" -var-evaluate-expression "796 "server interpreter mi \"0-var-evaluate-expression " 785 797 (car varchild) "\"\n") 786 798 `(lambda () (gdb-var-evaluate-expression-handler … … 804 816 (setcar (nthcdr 5 var) nil)) 805 817 (goto-char (point-min)) 806 (while (re-search-forward gdb-var-update-regexp nil t) 807 (let ((varnum (match-string 1))) 808 (if (string-equal (match-string 2) "false") 809 (let ((var (assoc varnum gdb-var-list))) 810 (if var (setcar (nthcdr 5 var) 'out-of-scope))) 811 (gdb-enqueue-input 812 (list 813 (concat "server interpreter mi \"-var-evaluate-expression " 814 varnum "\"\n") 815 `(lambda () (gdb-var-evaluate-expression-handler ,varnum t))))))) 818 (let ((n 0)) 819 (while (re-search-forward gdb-var-update-regexp nil t) 820 (let ((varnum (match-string 1))) 821 (if (string-equal (match-string 2) "false") 822 (let ((var (assoc varnum gdb-var-list))) 823 (if var (setcar (nthcdr 5 var) 'out-of-scope))) 824 (setq n (1+ n)) 825 (push n gdb-pending-triggers) 826 (gdb-enqueue-input 827 (list 828 (concat "server interpreter mi \"" (number-to-string n) 829 "-var-evaluate-expression " varnum "\"\n") 830 `(lambda () (gdb-var-evaluate-expression-handler ,varnum t)))))))) 816 831 (setq gdb-pending-triggers 817 (delq 'gdb-var-update gdb-pending-triggers)) 818 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) 819 ;; Dummy command to update speedbar at right time. 820 (gdb-enqueue-input (list "server pwd\n" 'gdb-speedbar-refresh)) 821 ;; Keep gdb-pending-triggers non-nil till end. 822 (push 'gdb-speedbar-refresh gdb-pending-triggers))) 823 824 (defun gdb-speedbar-refresh () 825 (setq gdb-pending-triggers 826 (delq 'gdb-speedbar-refresh gdb-pending-triggers)) 827 (with-current-buffer gud-comint-buffer 828 (let ((speedbar-verbosity-level 0) 829 (speedbar-shown-directories nil)) 830 (save-excursion 831 (speedbar-refresh))))) 832 (delq 'gdb-var-update gdb-pending-triggers))) 832 833 833 834 (defun gdb-var-delete () … … 837 838 '(gdbmi gdba)) 838 839 (let ((text (speedbar-line-text))) 839 (string-match "\\(\\S-+\\)" text) 840 ;; Can't use \\S-+ for whitespace because 841 ;; speedbar has a whacky syntax table. 842 (string-match "\\([^ \t]+\\)" text) 840 843 (let ((expr (match-string 1 text)) var varnum) 841 844 (catch 'expr-found … … 1382 1385 ;; Only needed/used with speedbar/watch expressions. 1383 1386 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) 1384 (setq gdb-force-update t)1385 1387 (if (string-equal gdb-version "pre-6.4") 1386 1388 (gdb-var-update) … … 1917 1919 (if (file-exists-p file) file 1918 1920 (cdr (assoc bptno gdb-location-alist))))) 1919 (window ( unless(gdb-display-source-buffer buffer)1921 (window (or (gdb-display-source-buffer buffer) 1920 1922 (display-buffer buffer)))) 1921 1923 (setq gdb-source-window window) … … 2759 2761 ;; can't find a source file. 2760 2762 (list-buffers-noselect)))) 2763 (setq gdb-source-window (selected-window)) 2761 2764 (when gdb-use-separate-io-buffer 2762 2765 (split-window-horizontally) … … 2786 2789 (gud-find-file (car gud-last-last-frame)) 2787 2790 (gud-find-file gdb-main-file))) 2791 (setq gdb-source-window (selected-window)) 2788 2792 (other-window 1)))) 2789 2793 … … 2807 2811 (delq 'gdb-overlay-arrow-position overlay-arrow-variable-list)) 2808 2812 (setq fringe-indicator-alist '((overlay-arrow . right-triangle))) 2809 (if (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) 2810 (speedbar-refresh)) 2813 (if (boundp 'speedbar-frame) (speedbar-timer-fn)) 2811 2814 (setq gud-running nil) 2812 2815 (setq gdb-active-process nil) … … 3167 3170 (let ((buffer (marker-buffer gud-overlay-arrow-position)) 3168 3171 (position (marker-position gud-overlay-arrow-position))) 3169 (when (and buffer (string-equal (buffer-name buffer) (match-string 3))) 3172 (when (and buffer 3173 (string-equal (buffer-name buffer) 3174 (file-name-nondirectory (match-string 3)))) 3170 3175 (with-current-buffer buffer 3171 3176 (setq fringe-indicator-alist … … 3234 3239 (push varchild var-list)))) 3235 3240 (push var var-list))) 3236 (setq gdb-var-list (nreverse var-list))))) 3241 (setq gdb-var-list (nreverse var-list)))) 3242 (gdb-speedbar-update)) 3237 3243 3238 3244 ; Uses "-var-update --all-values". Needs GDB 6.4 onwards. … … 3267 3273 (setq gdb-pending-triggers 3268 3274 (delq 'gdb-var-update gdb-pending-triggers)) 3269 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) 3270 ;; dummy command to update speedbar at right time 3271 (gdb-enqueue-input (list "server pwd\n" 'gdb-speedbar-refresh)) 3272 ;; keep gdb-pending-triggers non-nil till end 3273 (push 'gdb-speedbar-refresh gdb-pending-triggers))) 3275 (gdb-speedbar-update)) 3274 3276 3275 3277 ;; Registers buffer.
