diff options
| author | Dmitry Dzhus | 2009-08-06 18:05:32 +0000 |
|---|---|---|
| committer | Dmitry Dzhus | 2009-08-06 18:05:32 +0000 |
| commit | 7b217360fbfacc73b0bf0ba978543154a5b4a688 (patch) | |
| tree | 9a0088c65b0e37c35ac56b6fd241e45363061e98 | |
| parent | 897dbdc17eed33152d66d4ebc9dce36ec1c27843 (diff) | |
| download | emacs-7b217360fbfacc73b0bf0ba978543154a5b4a688.tar.gz emacs-7b217360fbfacc73b0bf0ba978543154a5b4a688.zip | |
(gdb-var-create-regexp): Removed.
(gdb-var-create-handler): Rewritten using JSON parser.
(gdb-propertize-header): Moved earlier.
(gdb-set-header): Removed to avoid duplication.
(gdb-thread-list-handler-custom, gdb-invalidate-disassembly):
Refresh disassembly buffers only after threads list have been
update.
(gdb-threads-header, gdb-registers-header): Per-buffer header line
variables.
| -rw-r--r-- | lisp/ChangeLog | 12 | ||||
| -rw-r--r-- | lisp/progmodes/gdb-mi.el | 127 |
2 files changed, 69 insertions, 70 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index dea01f1eea3..3a380d459ff 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,15 @@ | |||
| 1 | 2009-08-06 Dmitry Dzhus <dima@sphinx.net.ru> | ||
| 2 | |||
| 3 | * progmodes/gdb-mi.el (gdb-var-create-regexp): Removed. | ||
| 4 | (gdb-var-create-handler): Rewritten using JSON parser. | ||
| 5 | (gdb-propertize-header): Moved earlier. | ||
| 6 | (gdb-set-header): Removed to avoid duplication. | ||
| 7 | (gdb-thread-list-handler-custom, gdb-invalidate-disassembly): | ||
| 8 | Refresh disassembly buffers only after threads list have been | ||
| 9 | update. | ||
| 10 | (gdb-threads-header, gdb-registers-header): Per-buffer header line | ||
| 11 | variables. | ||
| 12 | |||
| 1 | 2009-08-04 Juri Linkov <juri@jurta.org> | 13 | 2009-08-04 Juri Linkov <juri@jurta.org> |
| 2 | 14 | ||
| 3 | * files.el: Commands to add/delete file/directory-local variables. | 15 | * files.el: Commands to add/delete file/directory-local variables. |
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index 7ff2613ea89..3271ceaa06e 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el | |||
| @@ -972,23 +972,22 @@ With arg, enter name of variable to be watched in the minibuffer." | |||
| 972 | `(lambda () (gdb-var-create-handler ,expr))))))) | 972 | `(lambda () (gdb-var-create-handler ,expr))))))) |
| 973 | (message "gud-watch is a no-op in this mode.")))) | 973 | (message "gud-watch is a no-op in this mode.")))) |
| 974 | 974 | ||
| 975 | (defconst gdb-var-create-regexp | ||
| 976 | "name=\"\\(.*?\\)\",.*numchild=\"\\(.*?\\)\",\\(?:.*value=\\(\".*\"\\),\\)?.*type=\"\\(.*?\\)\"") | ||
| 977 | |||
| 978 | (defun gdb-var-create-handler (expr) | 975 | (defun gdb-var-create-handler (expr) |
| 979 | (goto-char (point-min)) | 976 | (let* ((result (gdb-json-partial-output))) |
| 980 | (if (re-search-forward gdb-var-create-regexp nil t) | 977 | (if (not (gdb-get-field result 'msg)) |
| 981 | (let ((var (list | 978 | (let |
| 982 | (match-string 1) | 979 | ((var |
| 983 | (if (and (string-equal gdb-current-language "c") | 980 | (list |
| 984 | gdb-use-colon-colon-notation gdb-selected-frame) | 981 | (gdb-get-field result 'name) |
| 985 | (setq expr (concat gdb-selected-frame "::" expr)) | 982 | (if (and (string-equal gdb-current-language "c") |
| 986 | expr) | 983 | gdb-use-colon-colon-notation gdb-selected-frame) |
| 987 | (match-string 2) | 984 | (setq expr (concat gdb-selected-frame "::" expr)) |
| 988 | (match-string 4) | 985 | expr) |
| 989 | (if (match-string 3) (read (match-string 3))) | 986 | (gdb-get-field result 'numchild) |
| 990 | nil))) | 987 | (gdb-get-field result 'type) |
| 991 | (push var gdb-var-list) | 988 | (gdb-get-field result 'value) |
| 989 | nil))) | ||
| 990 | (push var gdb-var-list) | ||
| 992 | (speedbar 1) | 991 | (speedbar 1) |
| 993 | (unless (string-equal | 992 | (unless (string-equal |
| 994 | speedbar-initial-expansion-list-name "GUD") | 993 | speedbar-initial-expansion-list-name "GUD") |
| @@ -998,7 +997,7 @@ With arg, enter name of variable to be watched in the minibuffer." | |||
| 998 | (concat "-var-evaluate-expression " (car var)) | 997 | (concat "-var-evaluate-expression " (car var)) |
| 999 | `(lambda () (gdb-var-evaluate-expression-handler | 998 | `(lambda () (gdb-var-evaluate-expression-handler |
| 1000 | ,(car var) nil))))) | 999 | ,(car var) nil))))) |
| 1001 | (message-box "No symbol \"%s\" in current context." expr))) | 1000 | (message-box "No symbol \"%s\" in current context." expr)))) |
| 1002 | 1001 | ||
| 1003 | (defun gdb-speedbar-update () | 1002 | (defun gdb-speedbar-update () |
| 1004 | (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame) | 1003 | (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame) |
| @@ -2089,7 +2088,7 @@ calling `gdb-table-string'." | |||
| 2089 | (setf (gdb-table-column-sizes table) | 2088 | (setf (gdb-table-column-sizes table) |
| 2090 | (mapcar* (lambda (x s) | 2089 | (mapcar* (lambda (x s) |
| 2091 | (let ((new-x | 2090 | (let ((new-x |
| 2092 | (max (abs x) (string-width s)))) | 2091 | (max (abs x) (string-width (or s ""))))) |
| 2093 | (if right-align new-x (- new-x)))) | 2092 | (if right-align new-x (- new-x)))) |
| 2094 | (gdb-table-column-sizes table) | 2093 | (gdb-table-column-sizes table) |
| 2095 | row)) | 2094 | row)) |
| @@ -2439,6 +2438,20 @@ corresponding to the mode line clicked." | |||
| 2439 | (define-key map (vector 'header-line 'down-mouse-1) 'ignore) | 2438 | (define-key map (vector 'header-line 'down-mouse-1) 'ignore) |
| 2440 | map)) | 2439 | map)) |
| 2441 | 2440 | ||
| 2441 | (defmacro gdb-propertize-header (name buffer help-echo mouse-face face) | ||
| 2442 | `(propertize ,name | ||
| 2443 | 'help-echo ,help-echo | ||
| 2444 | 'mouse-face ',mouse-face | ||
| 2445 | 'face ',face | ||
| 2446 | 'local-map | ||
| 2447 | (gdb-make-header-line-mouse-map | ||
| 2448 | 'mouse-1 | ||
| 2449 | (lambda (event) (interactive "e") | ||
| 2450 | (save-selected-window | ||
| 2451 | (select-window (posn-window (event-start event))) | ||
| 2452 | (gdb-set-window-buffer | ||
| 2453 | (gdb-get-buffer-create ',buffer) t) ))))) | ||
| 2454 | |||
| 2442 | 2455 | ||
| 2443 | ;; uses "-thread-info". Needs GDB 7.0 onwards. | 2456 | ;; uses "-thread-info". Needs GDB 7.0 onwards. |
| 2444 | ;;; Threads view | 2457 | ;;; Threads view |
| @@ -2495,28 +2508,13 @@ corresponding to the mode line clicked." | |||
| 2495 | (define-key map [follow-link] 'mouse-face) | 2508 | (define-key map [follow-link] 'mouse-face) |
| 2496 | map)) | 2509 | map)) |
| 2497 | 2510 | ||
| 2498 | (defmacro gdb-propertize-header (name buffer help-echo mouse-face face) | 2511 | (defvar gdb-threads-header |
| 2499 | `(propertize ,name | ||
| 2500 | 'help-echo ,help-echo | ||
| 2501 | 'mouse-face ',mouse-face | ||
| 2502 | 'face ',face | ||
| 2503 | 'local-map | ||
| 2504 | (gdb-make-header-line-mouse-map | ||
| 2505 | 'mouse-1 | ||
| 2506 | (lambda (event) (interactive "e") | ||
| 2507 | (save-selected-window | ||
| 2508 | (select-window (posn-window (event-start event))) | ||
| 2509 | (gdb-set-window-buffer | ||
| 2510 | (gdb-get-buffer-create ',buffer) t) | ||
| 2511 | (setq header-line-format (gdb-set-header ',buffer))))))) | ||
| 2512 | |||
| 2513 | (defvar gdb-breakpoints-header | ||
| 2514 | (list | 2512 | (list |
| 2515 | (gdb-propertize-header "Breakpoints" gdb-breakpoints-buffer | 2513 | (gdb-propertize-header "Breakpoints" gdb-breakpoints-buffer |
| 2516 | nil nil mode-line) | 2514 | "mouse-1: select" mode-line-highlight mode-line-inactive) |
| 2517 | " " | 2515 | " " |
| 2518 | (gdb-propertize-header "Threads" gdb-threads-buffer | 2516 | (gdb-propertize-header "Threads" gdb-threads-buffer |
| 2519 | "mouse-1: select" mode-line-highlight mode-line-inactive))) | 2517 | nil nil mode-line))) |
| 2520 | 2518 | ||
| 2521 | (define-derived-mode gdb-threads-mode gdb-parent-mode "Threads" | 2519 | (define-derived-mode gdb-threads-mode gdb-parent-mode "Threads" |
| 2522 | "Major mode for GDB threads. | 2520 | "Major mode for GDB threads. |
| @@ -2524,7 +2522,7 @@ corresponding to the mode line clicked." | |||
| 2524 | \\{gdb-threads-mode-map}" | 2522 | \\{gdb-threads-mode-map}" |
| 2525 | (setq gdb-thread-position (make-marker)) | 2523 | (setq gdb-thread-position (make-marker)) |
| 2526 | (add-to-list 'overlay-arrow-variable-list 'gdb-thread-position) | 2524 | (add-to-list 'overlay-arrow-variable-list 'gdb-thread-position) |
| 2527 | (setq header-line-format gdb-breakpoints-header) | 2525 | (setq header-line-format gdb-threads-header) |
| 2528 | (set (make-local-variable 'font-lock-defaults) | 2526 | (set (make-local-variable 'font-lock-defaults) |
| 2529 | '(gdb-threads-font-lock-keywords)) | 2527 | '(gdb-threads-font-lock-keywords)) |
| 2530 | (run-mode-hooks 'gdb-threads-mode-hook) | 2528 | (run-mode-hooks 'gdb-threads-mode-hook) |
| @@ -2586,7 +2584,8 @@ corresponding to the mode line clicked." | |||
| 2586 | (gdb-mark-line marked-line gdb-thread-position))) | 2584 | (gdb-mark-line marked-line gdb-thread-position))) |
| 2587 | ;; We update gud-running here because we need to make sure that | 2585 | ;; We update gud-running here because we need to make sure that |
| 2588 | ;; gdb-threads-list is up-to-date | 2586 | ;; gdb-threads-list is up-to-date |
| 2589 | (gdb-update-gud-running)) | 2587 | (gdb-update-gud-running) |
| 2588 | (gdb-emit-signal gdb-buf-publisher 'update-disassembly)) | ||
| 2590 | 2589 | ||
| 2591 | (defmacro def-gdb-thread-buffer-command (name custom-defun &optional doc) | 2590 | (defmacro def-gdb-thread-buffer-command (name custom-defun &optional doc) |
| 2592 | "Define a NAME command which will act upon thread on the current line. | 2591 | "Define a NAME command which will act upon thread on the current line. |
| @@ -2690,36 +2689,6 @@ line." | |||
| 2690 | gud-step | 2689 | gud-step |
| 2691 | "Step thread at current line.") | 2690 | "Step thread at current line.") |
| 2692 | 2691 | ||
| 2693 | (defun gdb-set-header (buffer) | ||
| 2694 | (cond ((eq buffer 'gdb-locals-buffer) | ||
| 2695 | (list | ||
| 2696 | (gdb-propertize-header "Locals" gdb-locals-buffer | ||
| 2697 | nil nil mode-line) | ||
| 2698 | " " | ||
| 2699 | (gdb-propertize-header "Registers" gdb-registers-buffer | ||
| 2700 | "mouse-1: select" mode-line-highlight mode-line-inactive))) | ||
| 2701 | ((eq buffer 'gdb-registers-buffer) | ||
| 2702 | (list | ||
| 2703 | (gdb-propertize-header "Locals" gdb-locals-buffer | ||
| 2704 | "mouse-1: select" mode-line-highlight mode-line-inactive) | ||
| 2705 | " " | ||
| 2706 | (gdb-propertize-header "Registers" gdb-registers-buffer | ||
| 2707 | nil nil mode-line))) | ||
| 2708 | ((eq buffer 'gdb-breakpoints-buffer) | ||
| 2709 | (list | ||
| 2710 | (gdb-propertize-header "Breakpoints" gdb-breakpoints-buffer | ||
| 2711 | nil nil mode-line) | ||
| 2712 | " " | ||
| 2713 | (gdb-propertize-header "Threads" gdb-threads-buffer | ||
| 2714 | "mouse-1: select" mode-line-highlight mode-line-inactive))) | ||
| 2715 | ((eq buffer 'gdb-threads-buffer) | ||
| 2716 | (list | ||
| 2717 | (gdb-propertize-header "Breakpoints" gdb-breakpoints-buffer | ||
| 2718 | "mouse-1: select" mode-line-highlight mode-line-inactive) | ||
| 2719 | " " | ||
| 2720 | (gdb-propertize-header "Threads" gdb-threads-buffer | ||
| 2721 | nil nil mode-line))))) | ||
| 2722 | |||
| 2723 | 2692 | ||
| 2724 | ;;; Memory view | 2693 | ;;; Memory view |
| 2725 | 2694 | ||
| @@ -3138,7 +3107,9 @@ DOC is an optional documentation string." | |||
| 3138 | (when file | 3107 | (when file |
| 3139 | (format "-data-disassemble -f %s -l %s -n -1 -- 0" file line))) | 3108 | (format "-data-disassemble -f %s -l %s -n -1 -- 0" file line))) |
| 3140 | gdb-disassembly-handler | 3109 | gdb-disassembly-handler |
| 3141 | '(update)) | 3110 | ;; We update disassembly only after we have actual frame information |
| 3111 | ;; about all threads | ||
| 3112 | '(update-disassembly)) | ||
| 3142 | 3113 | ||
| 3143 | (def-gdb-auto-update-handler | 3114 | (def-gdb-auto-update-handler |
| 3144 | gdb-disassembly-handler | 3115 | gdb-disassembly-handler |
| @@ -3231,6 +3202,14 @@ DOC is an optional documentation string." | |||
| 3231 | (gdb-put-breakpoint-icon (string-equal flag "y") bptno)))))) | 3202 | (gdb-put-breakpoint-icon (string-equal flag "y") bptno)))))) |
| 3232 | 3203 | ||
| 3233 | 3204 | ||
| 3205 | (defvar gdb-breakpoints-header | ||
| 3206 | (list | ||
| 3207 | (gdb-propertize-header "Breakpoints" gdb-breakpoints-buffer | ||
| 3208 | nil nil mode-line) | ||
| 3209 | " " | ||
| 3210 | (gdb-propertize-header "Threads" gdb-threads-buffer | ||
| 3211 | "mouse-1: select" mode-line-highlight mode-line-inactive))) | ||
| 3212 | |||
| 3234 | ;;; Breakpoints view | 3213 | ;;; Breakpoints view |
| 3235 | (define-derived-mode gdb-breakpoints-mode gdb-parent-mode "Breakpoints" | 3214 | (define-derived-mode gdb-breakpoints-mode gdb-parent-mode "Breakpoints" |
| 3236 | "Major mode for gdb breakpoints. | 3215 | "Major mode for gdb breakpoints. |
| @@ -3553,11 +3532,19 @@ member." | |||
| 3553 | (define-key map "q" 'kill-this-buffer) | 3532 | (define-key map "q" 'kill-this-buffer) |
| 3554 | map)) | 3533 | map)) |
| 3555 | 3534 | ||
| 3535 | (defvar gdb-registers-header | ||
| 3536 | (list | ||
| 3537 | (gdb-propertize-header "Locals" gdb-locals-buffer | ||
| 3538 | "mouse-1: select" mode-line-highlight mode-line-inactive) | ||
| 3539 | " " | ||
| 3540 | (gdb-propertize-header "Registers" gdb-registers-buffer | ||
| 3541 | nil nil mode-line))) | ||
| 3542 | |||
| 3556 | (define-derived-mode gdb-registers-mode gdb-parent-mode "Registers" | 3543 | (define-derived-mode gdb-registers-mode gdb-parent-mode "Registers" |
| 3557 | "Major mode for gdb registers. | 3544 | "Major mode for gdb registers. |
| 3558 | 3545 | ||
| 3559 | \\{gdb-registers-mode-map}" | 3546 | \\{gdb-registers-mode-map}" |
| 3560 | (setq header-line-format gdb-locals-header) | 3547 | (setq header-line-format gdb-registers-header) |
| 3561 | (run-mode-hooks 'gdb-registers-mode-hook) | 3548 | (run-mode-hooks 'gdb-registers-mode-hook) |
| 3562 | 'gdb-invalidate-registers) | 3549 | 'gdb-invalidate-registers) |
| 3563 | 3550 | ||