comparison lisp/progmodes/gdb-ui.el @ 90203:187d6a1f84f7

Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-71 Merge from emacs--cvs-trunk--0 Patches applied: * emacs--cvs-trunk--0 (patch 485-492) - Update from CVS - Merge from gnus--rel--5.10 * gnus--rel--5.10 (patch 92-94) - Merge from emacs--cvs-trunk--0 - Update from CVS
author Miles Bader <miles@gnu.org>
date Fri, 22 Jul 2005 08:27:27 +0000
parents fbb2bea03df9 ef82d5d73c0d
children 890cc78a5a24
comparison
equal deleted inserted replaced
90202:7597b4a23c3b 90203:187d6a1f84f7
501 ,(nth 1 varchild) nil)))))))) 501 ,(nth 1 varchild) nil))))))))
502 (push var var-list))) 502 (push var var-list)))
503 (setq gdb-var-list (nreverse var-list)))))) 503 (setq gdb-var-list (nreverse var-list))))))
504 504
505 (defun gdb-var-update () 505 (defun gdb-var-update ()
506 (if (not (member 'gdb-var-update gdb-pending-triggers)) 506 (when (not (member 'gdb-var-update gdb-pending-triggers))
507 (progn 507 (gdb-enqueue-input
508 (gdb-enqueue-input 508 (list "server interpreter mi \"-var-update *\"\n"
509 (list 509 'gdb-var-update-handler))
510 (if (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdba)) 510 (push 'gdb-var-update gdb-pending-triggers)))
511 "server interpreter mi \"-var-update *\"\n"
512 "-var-update *\n")
513 'gdb-var-update-handler))
514 (push 'gdb-var-update gdb-pending-triggers))))
515 511
516 (defconst gdb-var-update-regexp "name=\"\\(.*?\\)\"") 512 (defconst gdb-var-update-regexp "name=\"\\(.*?\\)\"")
517 513
518 (defun gdb-var-update-handler () 514 (defun gdb-var-update-handler ()
519 (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) 515 (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer)
520 (goto-char (point-min)) 516 (goto-char (point-min))
521 (while (re-search-forward gdb-var-update-regexp nil t) 517 (while (re-search-forward gdb-var-update-regexp nil t)
522 (let ((varnum (match-string 1))) 518 (let ((varnum (match-string 1)))
523 (gdb-enqueue-input 519 (gdb-enqueue-input
524 (list 520 (list
525 (if (with-current-buffer gud-comint-buffer 521 (concat "server interpreter mi \"-var-evaluate-expression "
526 (eq gud-minor-mode 'gdba)) 522 varnum "\"\n")
527 (concat "server interpreter mi \"-var-evaluate-expression " 523 `(lambda () (gdb-var-evaluate-expression-handler ,varnum t)))))))
528 varnum "\"\n")
529 (concat "-var-evaluate-expression " varnum "\n"))
530 `(lambda () (gdb-var-evaluate-expression-handler
531 ,varnum t)))))))
532 (setq gdb-pending-triggers 524 (setq gdb-pending-triggers
533 (delq 'gdb-var-update gdb-pending-triggers)) 525 (delq 'gdb-var-update gdb-pending-triggers))
534 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame)) 526 (when (and (boundp 'speedbar-frame) (frame-live-p speedbar-frame))
535 ;; dummy command to update speedbar at right time 527 ;; dummy command to update speedbar at right time
536 (gdb-enqueue-input (list "server pwd\n" 'gdb-speedbar-timer-fn)) 528 (gdb-enqueue-input (list "server pwd\n" 'gdb-speedbar-timer-fn))
542 (delq 'gdb-speedbar-timer gdb-pending-triggers)) 534 (delq 'gdb-speedbar-timer gdb-pending-triggers))
543 (with-current-buffer gud-comint-buffer 535 (with-current-buffer gud-comint-buffer
544 (speedbar-timer-fn))) 536 (speedbar-timer-fn)))
545 537
546 (defun gdb-var-delete () 538 (defun gdb-var-delete ()
547 "Delete watched expression from the speedbar." 539 "Delete watch expression at point from the speedbar."
548 (interactive) 540 (interactive)
549 (if (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdba)) 541 (if (with-current-buffer
542 gud-comint-buffer (memq gud-minor-mode '(gdbmi gdba)))
550 (let ((text (speedbar-line-text))) 543 (let ((text (speedbar-line-text)))
551 (string-match "\\(\\S-+\\)" text) 544 (string-match "\\(\\S-+\\)" text)
552 (let* ((expr (match-string 1 text)) 545 (let* ((expr (match-string 1 text))
553 (var (assoc expr gdb-var-list)) 546 (var (assoc expr gdb-var-list))
554 (varnum (cadr var))) 547 (varnum (cadr var)))
593 TOKEN is data related to this node. 586 TOKEN is data related to this node.
594 INDENT is the current indentation depth." 587 INDENT is the current indentation depth."
595 (cond ((string-match "+" text) ;expand this node 588 (cond ((string-match "+" text) ;expand this node
596 (if (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdba)) 589 (if (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdba))
597 (gdb-var-list-children token) 590 (gdb-var-list-children token)
598 (gdbmi-var-list-children token))) 591 (progn
592 (gdbmi-var-update)
593 (gdbmi-var-list-children token))))
599 ((string-match "-" text) ;contract this node 594 ((string-match "-" text) ;contract this node
600 (dolist (var gdb-var-list) 595 (dolist (var gdb-var-list)
601 (if (string-match (concat token "\\.") (nth 1 var)) 596 (if (string-match (concat token "\\.") (nth 1 var))
602 (setq gdb-var-list (delq var gdb-var-list)))) 597 (setq gdb-var-list (delq var gdb-var-list))))
603 (setq gdb-var-changed t)))) 598 (setq gdb-var-changed t))))