comparison lisp/progmodes/gdb-ui.el @ 64346:ef82d5d73c0d

(gdb-var-update, gdb-var-update-handler): Don't consider gdbmi (gdb-mi.el has its own update functions). (gdb-var-delete): Make it work for gdbmi as well. (gdb-speedbar-expand-node): Move var-update here for gdbmi.
author Nick Roberts <nickrob@snap.net.nz>
date Fri, 15 Jul 2005 14:45:09 +0000
parents a19a23509f95
children c61eb15a6bfc 187d6a1f84f7
comparison
equal deleted inserted replaced
64345:1009f071639a 64346:ef82d5d73c0d
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))))