comparison lisp/progmodes/gdb-ui.el @ 55764:25f133a490aa

(gdb-var-update, gdb-var-update-handler, gdb-var-delete) (gdb-edit-value, gdb-speedbar-expand-node): Handle new value for gud-minor-mode (gdbmi).
author Nick Roberts <nickrob@snap.net.nz>
date Mon, 24 May 2004 21:59:08 +0000
parents e31413b06034
children 63ca25eb73a1
comparison
equal deleted inserted replaced
55763:492d2c167c02 55764:25f133a490aa
317 (setq gdb-var-list (nreverse var-list)))))) 317 (setq gdb-var-list (nreverse var-list))))))
318 318
319 (defun gdb-var-update () 319 (defun gdb-var-update ()
320 (if (not (member 'gdb-var-update gdb-pending-triggers)) 320 (if (not (member 'gdb-var-update gdb-pending-triggers))
321 (progn 321 (progn
322 (gdb-enqueue-input (list "server interpreter mi \"-var-update *\"\n" 322 (gdb-enqueue-input
323 (list
324 (if (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdba))
325 "server interpreter mi \"-var-update *\"\n"
326 "-var-update *\n")
323 'gdb-var-update-handler)) 327 'gdb-var-update-handler))
324 (push 'gdb-var-update gdb-pending-triggers)))) 328 (push 'gdb-var-update gdb-pending-triggers))))
325 329
326 (defconst gdb-var-update-regexp "name=\"\\(.*?\\)\"") 330 (defconst gdb-var-update-regexp "name=\"\\(.*?\\)\"")
327 331
329 (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) 333 (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer)
330 (goto-char (point-min)) 334 (goto-char (point-min))
331 (while (re-search-forward gdb-var-update-regexp nil t) 335 (while (re-search-forward gdb-var-update-regexp nil t)
332 (let ((varnum (match-string 1))) 336 (let ((varnum (match-string 1)))
333 (gdb-enqueue-input 337 (gdb-enqueue-input
334 (list (concat "server interpreter mi \"-var-evaluate-expression " 338 (list
335 varnum "\"\n") 339 (if (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdba))
340 (concat "server interpreter mi \"-var-evaluate-expression "
341 varnum "\"\n")
342 (concat "-var-evaluate-expression " varnum "\n"))
336 `(lambda () (gdb-var-evaluate-expression-handler 343 `(lambda () (gdb-var-evaluate-expression-handler
337 ,varnum t))))))) 344 ,varnum t)))))))
338 (setq gdb-pending-triggers 345 (setq gdb-pending-triggers
339 (delq 'gdb-var-update gdb-pending-triggers))) 346 (delq 'gdb-var-update gdb-pending-triggers)))
340 347
347 (let* ((expr (match-string 1 text)) 354 (let* ((expr (match-string 1 text))
348 (var (assoc expr gdb-var-list)) 355 (var (assoc expr gdb-var-list))
349 (varnum (cadr var))) 356 (varnum (cadr var)))
350 (unless (string-match "\\." varnum) 357 (unless (string-match "\\." varnum)
351 (gdb-enqueue-input 358 (gdb-enqueue-input
352 (list (concat "server interpreter mi \"-var-delete " 359 (list
353 varnum "\"\n") 360 (if (with-current-buffer gud-comint-buffer
361 (eq gud-minor-mode 'gdba))
362 (concat "server interpreter mi \"-var-delete " varnum "\"\n")
363 (concat "-var-delete " varnum "\n"))
354 'ignore)) 364 'ignore))
355 (setq gdb-var-list (delq var gdb-var-list)) 365 (setq gdb-var-list (delq var gdb-var-list))
356 (dolist (varchild gdb-var-list) 366 (dolist (varchild gdb-var-list)
357 (if (string-match (concat (nth 1 var) "\\.") (nth 1 varchild)) 367 (if (string-match (concat (nth 1 var) "\\.") (nth 1 varchild))
358 (setq gdb-var-list (delq varchild gdb-var-list)))) 368 (setq gdb-var-list (delq varchild gdb-var-list))))
362 "Assign a value to a variable displayed in the speedbar" 372 "Assign a value to a variable displayed in the speedbar"
363 (let* ((var (nth (- (count-lines (point-min) (point)) 2) gdb-var-list)) 373 (let* ((var (nth (- (count-lines (point-min) (point)) 2) gdb-var-list))
364 (varnum (cadr var)) (value)) 374 (varnum (cadr var)) (value))
365 (setq value (read-string "New value: ")) 375 (setq value (read-string "New value: "))
366 (gdb-enqueue-input 376 (gdb-enqueue-input
367 (list (concat "server interpreter mi \"-var-assign " 377 (list
368 varnum " " value "\"\n") 378 (if (with-current-buffer gud-comint-buffer
379 (eq gud-minor-mode 'gdba))
380 (concat "server interpreter mi \"-var-assign " varnum " " value "\"\n")
381 (concat "-var-assign " varnum " " value "\n"))
369 'ignore)))) 382 'ignore))))
370 383
371 (defcustom gdb-show-changed-values t 384 (defcustom gdb-show-changed-values t
372 "Non-nil means use font-lock-warning-face to display values that have 385 "Non-nil means use font-lock-warning-face to display values that have
373 recently changed in the speedbar." 386 recently changed in the speedbar."
378 "Expand the node the user clicked on. 391 "Expand the node the user clicked on.
379 TEXT is the text of the button we clicked on, a + or - item. 392 TEXT is the text of the button we clicked on, a + or - item.
380 TOKEN is data related to this node. 393 TOKEN is data related to this node.
381 INDENT is the current indentation depth." 394 INDENT is the current indentation depth."
382 (cond ((string-match "+" text) ;expand this node 395 (cond ((string-match "+" text) ;expand this node
383 (gdb-var-list-children token)) 396 (if (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdba))
397 (gdb-var-list-children token)
398 (gdbmi-var-list-children token)))
384 ((string-match "-" text) ;contract this node 399 ((string-match "-" text) ;contract this node
385 (dolist (var gdb-var-list) 400 (dolist (var gdb-var-list)
386 (if (string-match (concat token "\\.") (nth 1 var)) 401 (if (string-match (concat token "\\.") (nth 1 var))
387 (setq gdb-var-list (delq var gdb-var-list)))) 402 (setq gdb-var-list (delq var gdb-var-list))))
388 (setq gdb-var-changed t)))) 403 (setq gdb-var-changed t))))