aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Roberts2006-08-17 11:44:40 +0000
committerNick Roberts2006-08-17 11:44:40 +0000
commit38a52690e0d5d9f1ba1bbf9af21da50a1ce0a7c3 (patch)
tree37249f8e1bc0e2da70bebeeb1f68fc0e98c03059
parent5802a1c92a0e3887fafdff25e405f76121d97dca (diff)
downloademacs-38a52690e0d5d9f1ba1bbf9af21da50a1ce0a7c3.tar.gz
emacs-38a52690e0d5d9f1ba1bbf9af21da50a1ce0a7c3.zip
(gdb-locals-watch-map, gdb-locals-watch-map-1): Suppress keymap first.
(gdb-edit-locals-map-1): New variable. (gdb-edit-locals-value): New function. (gdb-stack-list-locals-handler): Use them.
-rw-r--r--lisp/progmodes/gdb-ui.el40
1 files changed, 34 insertions, 6 deletions
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el
index b5334ba5bc5..61078877c31 100644
--- a/lisp/progmodes/gdb-ui.el
+++ b/lisp/progmodes/gdb-ui.el
@@ -384,8 +384,7 @@ With arg, use separate IO iff arg is positive."
384 (list t nil) nil "-c" 384 (list t nil) nil "-c"
385 (concat gdb-cpp-define-alist-program " " 385 (concat gdb-cpp-define-alist-program " "
386 gdb-cpp-define-alist-flags))))) 386 gdb-cpp-define-alist-flags)))))
387 (define-list (split-string output "\n" t)) 387 (define-list (split-string output "\n" t)) (name))
388 (name))
389 (setq gdb-define-alist nil) 388 (setq gdb-define-alist nil)
390 (dolist (define define-list) 389 (dolist (define define-list)
391 (setq name (nth 1 (split-string define "[( ]"))) 390 (setq name (nth 1 (split-string define "[( ]")))
@@ -2657,6 +2656,7 @@ corresponding to the mode line clicked."
2657 2656
2658(defvar gdb-locals-watch-map 2657(defvar gdb-locals-watch-map
2659 (let ((map (make-sparse-keymap))) 2658 (let ((map (make-sparse-keymap)))
2659 (suppress-keymap map)
2660 (define-key map "\r" (lambda () (interactive) 2660 (define-key map "\r" (lambda () (interactive)
2661 (beginning-of-line) 2661 (beginning-of-line)
2662 (gud-watch))) 2662 (gud-watch)))
@@ -3512,10 +3512,32 @@ in_scope=\"\\(.*?\\)\".*?}")
3512 3512
3513(defvar gdb-locals-watch-map-1 3513(defvar gdb-locals-watch-map-1
3514 (let ((map (make-sparse-keymap))) 3514 (let ((map (make-sparse-keymap)))
3515 (suppress-keymap map)
3516 (define-key map "\r" 'gud-watch)
3515 (define-key map [mouse-2] 'gud-watch) 3517 (define-key map [mouse-2] 'gud-watch)
3516 map) 3518 map)
3517 "Keymap to create watch expression of a complex data type local variable.") 3519 "Keymap to create watch expression of a complex data type local variable.")
3518 3520
3521(defvar gdb-edit-locals-map-1
3522 (let ((map (make-sparse-keymap)))
3523 (suppress-keymap map)
3524 (define-key map "\r" 'gdb-edit-locals-value)
3525 (define-key map [mouse-2] 'gdb-edit-locals-value)
3526 map)
3527 "Keymap to edit value of a simple data type local variable.")
3528
3529(defun gdb-edit-locals-value (&optional event)
3530 "Assign a value to a variable displayed in the locals buffer."
3531 (interactive (list last-input-event))
3532 (save-excursion
3533 (if event (posn-set-point (event-end event)))
3534 (beginning-of-line)
3535 (let* ((var (current-word))
3536 (value (read-string (format "New value (%s): " var))))
3537 (gdb-enqueue-input
3538 (list (concat gdb-server-prefix"set variable " var " = " value "\n")
3539 'ignore))))))
3540
3519;; Dont display values of arrays or structures. 3541;; Dont display values of arrays or structures.
3520;; These can be expanded using gud-watch. 3542;; These can be expanded using gud-watch.
3521(defun gdb-stack-list-locals-handler () 3543(defun gdb-stack-list-locals-handler ()
@@ -3543,17 +3565,23 @@ in_scope=\"\\(.*?\\)\".*?}")
3543 (let* ((window (get-buffer-window buf 0)) 3565 (let* ((window (get-buffer-window buf 0))
3544 (start (window-start window)) 3566 (start (window-start window))
3545 (p (window-point window)) 3567 (p (window-point window))
3546 (buffer-read-only nil)) 3568 (buffer-read-only nil) (name) (value))
3547 (erase-buffer) 3569 (erase-buffer)
3548 (dolist (local locals-list) 3570 (dolist (local locals-list)
3549 (setq name (car local)) 3571 (setq name (car local))
3550 (if (or (not (nth 2 local)) 3572 (setq value (nth 2 local))
3551 (string-match "^\\0x" (nth 2 local))) 3573 (if (or (not value)
3574 (string-match "^\\0x" value))
3552 (add-text-properties 0 (length name) 3575 (add-text-properties 0 (length name)
3553 `(mouse-face highlight 3576 `(mouse-face highlight
3554 help-echo "mouse-2: create watch expression" 3577 help-echo "mouse-2: create watch expression"
3555 local-map ,gdb-locals-watch-map-1) 3578 local-map ,gdb-locals-watch-map-1)
3556 name)) 3579 name)
3580 (add-text-properties 0 (length value)
3581 `(mouse-face highlight
3582 help-echo "mouse-2: edit value"
3583 local-map ,gdb-edit-locals-map-1)
3584 value))
3557 (insert 3585 (insert
3558 (concat name "\t" (nth 1 local) 3586 (concat name "\t" (nth 1 local)
3559 "\t" (nth 2 local) "\n"))) 3587 "\t" (nth 2 local) "\n")))