diff options
| author | Nick Roberts | 2005-10-09 20:22:43 +0000 |
|---|---|---|
| committer | Nick Roberts | 2005-10-09 20:22:43 +0000 |
| commit | b863eb35947e47db28f4f3a38cfc5adbb1fbb256 (patch) | |
| tree | d4d0209a100247fc2fbc1b76e3d3b0ae8f7a5e50 | |
| parent | 1919ed22637d355931564a6f6701e2317aff2ba4 (diff) | |
| download | emacs-b863eb35947e47db28f4f3a38cfc5adbb1fbb256.tar.gz emacs-b863eb35947e47db28f4f3a38cfc5adbb1fbb256.zip | |
(gud-last-speedbar-buffer): Remove.
(gud-install-speedbar-variables): Add GUD to speedbar "Displays"
list.
(gud-expansion-speedbar-buttons): New function.
(gud-speedbar-buttons): Check for gud-comint-buffer.
| -rw-r--r-- | lisp/progmodes/gud.el | 166 |
1 files changed, 82 insertions, 84 deletions
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el index 8840a01283f..cc6163d6235 100644 --- a/lisp/progmodes/gud.el +++ b/lisp/progmodes/gud.el | |||
| @@ -336,9 +336,6 @@ we're in the GUD buffer)." | |||
| 336 | ;; speedbar support functions and variables. | 336 | ;; speedbar support functions and variables. |
| 337 | (eval-when-compile (require 'speedbar)) ;For speedbar-with-attached-buffer. | 337 | (eval-when-compile (require 'speedbar)) ;For speedbar-with-attached-buffer. |
| 338 | 338 | ||
| 339 | (defvar gud-last-speedbar-buffer nil | ||
| 340 | "The last GUD buffer used.") | ||
| 341 | |||
| 342 | (defvar gud-last-speedbar-stackframe nil | 339 | (defvar gud-last-speedbar-stackframe nil |
| 343 | "Description of the currently displayed GUD stack. | 340 | "Description of the currently displayed GUD stack. |
| 344 | t means that there is no stack, and we are in display-file mode.") | 341 | t means that there is no stack, and we are in display-file mode.") |
| @@ -355,7 +352,11 @@ t means that there is no stack, and we are in display-file mode.") | |||
| 355 | (define-key gud-speedbar-key-map "j" 'speedbar-edit-line) | 352 | (define-key gud-speedbar-key-map "j" 'speedbar-edit-line) |
| 356 | (define-key gud-speedbar-key-map "e" 'speedbar-edit-line) | 353 | (define-key gud-speedbar-key-map "e" 'speedbar-edit-line) |
| 357 | (define-key gud-speedbar-key-map "\C-m" 'speedbar-edit-line) | 354 | (define-key gud-speedbar-key-map "\C-m" 'speedbar-edit-line) |
| 358 | (define-key gud-speedbar-key-map "D" 'gdb-var-delete))) | 355 | (define-key gud-speedbar-key-map "D" 'gdb-var-delete)) |
| 356 | |||
| 357 | (speedbar-add-expansion-list '("GUD" gud-speedbar-menu-items | ||
| 358 | gud-speedbar-key-map | ||
| 359 | gud-expansion-speedbar-buttons))) | ||
| 359 | 360 | ||
| 360 | (defvar gud-speedbar-menu-items | 361 | (defvar gud-speedbar-menu-items |
| 361 | '(["Jump to stack frame" speedbar-edit-line | 362 | '(["Jump to stack frame" speedbar-edit-line |
| @@ -374,89 +375,86 @@ t means that there is no stack, and we are in display-file mode.") | |||
| 374 | (gud-install-speedbar-variables) | 375 | (gud-install-speedbar-variables) |
| 375 | (add-hook 'speedbar-load-hook 'gud-install-speedbar-variables)) | 376 | (add-hook 'speedbar-load-hook 'gud-install-speedbar-variables)) |
| 376 | 377 | ||
| 378 | (defun gud-expansion-speedbar-buttons (directory zero) | ||
| 379 | "Wrapper for call to speedbar-add-expansion-list. DIRECTORY and | ||
| 380 | ZERO are not used, but are required by the caller." | ||
| 381 | (gud-speedbar-buttons gud-comint-buffer)) | ||
| 382 | |||
| 377 | (defun gud-speedbar-buttons (buffer) | 383 | (defun gud-speedbar-buttons (buffer) |
| 378 | "Create a speedbar display based on the current state of GUD. | 384 | "Create a speedbar display based on the current state of GUD. |
| 379 | If the GUD BUFFER is not running a supported debugger, then turn | 385 | If the GUD BUFFER is not running a supported debugger, then turn |
| 380 | off the specialized speedbar mode." | 386 | off the specialized speedbar mode. BUFFER is not used, but are |
| 381 | (let ((minor-mode (with-current-buffer buffer gud-minor-mode))) | 387 | required by the caller." |
| 382 | (cond | 388 | (when (and (boundp 'gud-comint-buffer) |
| 383 | ((memq minor-mode '(gdbmi gdba)) | 389 | gud-comint-buffer |
| 384 | (when (or gdb-var-changed | 390 | ;; gud-comint-buffer might be killed |
| 385 | (not (save-excursion | 391 | (buffer-name gud-comint-buffer)) |
| 386 | (goto-char (point-min)) | 392 | (let ((minor-mode (with-current-buffer buffer gud-minor-mode))) |
| 387 | (let ((case-fold-search t)) | 393 | (cond |
| 388 | (looking-at "Watch Expressions:"))))) | 394 | ((memq minor-mode '(gdbmi gdba)) |
| 389 | (erase-buffer) | 395 | (when (or gdb-var-changed |
| 390 | (insert "Watch Expressions:\n") | 396 | (not (save-excursion |
| 391 | (let ((var-list gdb-var-list)) | 397 | (goto-char (point-min)) |
| 392 | (while var-list | 398 | (let ((case-fold-search t)) |
| 393 | (let* ((depth 0) (start 0) (char ?+) | 399 | (looking-at "Watch Expressions:"))))) |
| 394 | (var (car var-list)) (varnum (nth 1 var))) | 400 | (erase-buffer) |
| 395 | (while (string-match "\\." varnum start) | 401 | (insert "Watch Expressions:\n") |
| 396 | (setq depth (1+ depth) | 402 | (let ((var-list gdb-var-list)) |
| 397 | start (1+ (match-beginning 0)))) | 403 | (while var-list |
| 398 | (if (equal (nth 2 var) "0") | 404 | (let* ((depth 0) (start 0) (char ?+) |
| 399 | (speedbar-make-tag-line 'bracket ?? nil nil | 405 | (var (car var-list)) (varnum (nth 1 var))) |
| 400 | (concat (car var) "\t" (nth 4 var)) | 406 | (while (string-match "\\." varnum start) |
| 401 | 'gdb-edit-value | 407 | (setq depth (1+ depth) |
| 402 | nil | 408 | start (1+ (match-beginning 0)))) |
| 403 | (if (and (nth 5 var) | 409 | (if (equal (nth 2 var) "0") |
| 404 | gdb-show-changed-values) | 410 | (speedbar-make-tag-line 'bracket ?? nil nil |
| 405 | 'font-lock-warning-face | 411 | (concat (car var) "\t" (nth 4 var)) |
| 406 | nil) depth) | 412 | 'gdb-edit-value |
| 407 | (if (and (cadr var-list) | 413 | nil |
| 408 | (string-match varnum (cadr (cadr var-list)))) | 414 | (if (and (nth 5 var) |
| 409 | (setq char ?-)) | 415 | gdb-show-changed-values) |
| 410 | (speedbar-make-tag-line 'bracket char | 416 | 'font-lock-warning-face |
| 411 | 'gdb-speedbar-expand-node varnum | 417 | nil) depth) |
| 412 | (concat (car var) "\t" (nth 3 var)) | 418 | (if (and (cadr var-list) |
| 413 | nil nil nil depth))) | 419 | (string-match varnum (cadr (cadr var-list)))) |
| 414 | (setq var-list (cdr var-list)))) | 420 | (setq char ?-)) |
| 415 | (setq gdb-var-changed nil))) | 421 | (speedbar-make-tag-line 'bracket char |
| 416 | (t (if (and (save-excursion | 422 | 'gdb-speedbar-expand-node varnum |
| 417 | (goto-char (point-min)) | 423 | (concat (car var) "\t" (nth 3 var)) |
| 418 | (looking-at "Current Stack")) | 424 | nil nil nil depth))) |
| 419 | (equal gud-last-last-frame gud-last-speedbar-stackframe)) | 425 | (setq var-list (cdr var-list)))) |
| 420 | nil | 426 | (setq gdb-var-changed nil))) |
| 421 | (setq gud-last-speedbar-buffer buffer) | 427 | (t (if (and (save-excursion |
| 422 | (let ((gud-frame-list | 428 | (goto-char (point-min)) |
| 423 | (cond ((eq minor-mode 'gdb) | 429 | (looking-at "Current Stack:")) |
| 424 | (gud-gdb-get-stackframe buffer)) | 430 | (equal gud-last-last-frame gud-last-speedbar-stackframe)) |
| 425 | ;; Add more debuggers here! | 431 | nil |
| 426 | (t (speedbar-remove-localized-speedbar-support buffer) | 432 | (let ((gud-frame-list |
| 427 | nil)))) | 433 | (cond ((eq minor-mode 'gdb) |
| 428 | (erase-buffer) | 434 | (gud-gdb-get-stackframe buffer)) |
| 429 | (if (not gud-frame-list) | 435 | ;; Add more debuggers here! |
| 430 | (insert "No Stack frames\n") | 436 | (t (speedbar-remove-localized-speedbar-support buffer) |
| 431 | (insert "Current Stack:\n")) | 437 | nil)))) |
| 432 | (dolist (frame gud-frame-list) | 438 | (erase-buffer) |
| 433 | (insert (nth 1 frame) ":\n") | 439 | (if (not gud-frame-list) |
| 434 | (if (= (length frame) 2) | 440 | (insert "No Stack frames\n") |
| 435 | (progn | 441 | (insert "Current Stack:\n")) |
| 436 | ; (speedbar-insert-button "[?]" | 442 | (dolist (frame gud-frame-list) |
| 437 | ; 'speedbar-button-face | 443 | (insert (nth 1 frame) ":\n") |
| 438 | ; nil nil nil t) | 444 | (if (= (length frame) 2) |
| 439 | (speedbar-insert-button (car frame) | 445 | (progn |
| 440 | 'speedbar-directory-face | 446 | (speedbar-insert-button (car frame) |
| 441 | nil nil nil t)) | 447 | 'speedbar-directory-face |
| 442 | ; (speedbar-insert-button "[+]" | 448 | nil nil nil t)) |
| 443 | ; 'speedbar-button-face | 449 | (speedbar-insert-button |
| 444 | ; 'speedbar-highlight-face | 450 | (car frame) |
| 445 | ; 'gud-gdb-get-scope-data | 451 | 'speedbar-file-face |
| 446 | ; frame t) | 452 | 'speedbar-highlight-face |
| 447 | (speedbar-insert-button (car frame) | 453 | (cond ((memq minor-mode '(gdbmi gdba gdb)) |
| 448 | 'speedbar-file-face | 454 | 'gud-gdb-goto-stackframe) |
| 449 | 'speedbar-highlight-face | 455 | (t (error "Should never be here"))) |
| 450 | (cond ((memq minor-mode '(gdbmi gdba gdb)) | 456 | frame t)))) |
| 451 | 'gud-gdb-goto-stackframe) | 457 | (setq gud-last-speedbar-stackframe gud-last-last-frame))))))) |
| 452 | (t (error "Should never be here"))) | ||
| 453 | frame t))) | ||
| 454 | ; (let ((selected-frame | ||
| 455 | ; (cond ((eq ff 'gud-gdb-find-file) | ||
| 456 | ; (gud-gdb-selected-frame-info buffer)) | ||
| 457 | ; (t (error "Should never be here")))))) | ||
| 458 | ) | ||
| 459 | (setq gud-last-speedbar-stackframe gud-last-last-frame)))))) | ||
| 460 | 458 | ||
| 461 | 459 | ||
| 462 | ;; ====================================================================== | 460 | ;; ====================================================================== |