Mercurial > emacs
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)))) |