Mercurial > emacs
comparison lisp/progmodes/gdb-ui.el @ 74924:83f9cf569b3f
(gud-watch): Allow duplicate names for watch
expressions.
(gdb-var-delete): Handle duplicate names. Print message for non
root expressions.
(gdb-partial-output-name): Start buffer name with a space.
(gdb-info-breakpoints-custom, gdb-reset): Handle space in above
buffer name.
author | Nick Roberts <nickrob@snap.net.nz> |
---|---|
date | Tue, 26 Dec 2006 22:02:17 +0000 |
parents | 3cedab34a4b6 |
children | 5b3d80ea3c0e 17e0dd217877 bc10a33dd40b |
comparison
equal
deleted
inserted
replaced
74923:a7e6b6159240 | 74924:83f9cf569b3f |
---|---|
708 'gud-gdb-complete-command) | 708 'gud-gdb-complete-command) |
709 (if (and transient-mark-mode mark-active) | 709 (if (and transient-mark-mode mark-active) |
710 (buffer-substring (region-beginning) (region-end)) | 710 (buffer-substring (region-beginning) (region-end)) |
711 (tooltip-identifier-from-point (point)))))) | 711 (tooltip-identifier-from-point (point)))))) |
712 (speedbar 1) | 712 (speedbar 1) |
713 (catch 'already-watched | |
714 (dolist (var gdb-var-list) | |
715 (unless (string-match "\\." (car var)) | |
716 (if (string-equal expr (nth 1 var)) | |
717 (throw 'already-watched nil)))) | |
718 (set-text-properties 0 (length expr) nil expr) | 713 (set-text-properties 0 (length expr) nil expr) |
719 (gdb-enqueue-input | 714 (gdb-enqueue-input |
720 (list | 715 (list |
721 (if (eq minor-mode 'gdba) | 716 (if (eq minor-mode 'gdba) |
722 (concat | 717 (concat |
723 "server interpreter mi \"-var-create - * " expr "\"\n") | 718 "server interpreter mi \"-var-create - * " expr "\"\n") |
724 (concat"-var-create - * " expr "\n")) | 719 (concat"-var-create - * " expr "\n")) |
725 `(lambda () (gdb-var-create-handler ,expr)))))))) | 720 `(lambda () (gdb-var-create-handler ,expr))))))) |
726 (message "gud-watch is a no-op in this mode.")))) | 721 (message "gud-watch is a no-op in this mode.")))) |
727 | 722 |
728 (defconst gdb-var-create-regexp | 723 (defconst gdb-var-create-regexp |
729 "name=\"\\(.*?\\)\",.*numchild=\"\\(.*?\\)\",.*type=\"\\(.*?\\)\"") | 724 "name=\"\\(.*?\\)\",.*numchild=\"\\(.*?\\)\",.*type=\"\\(.*?\\)\"") |
730 | 725 |
849 (defun gdb-var-delete () | 844 (defun gdb-var-delete () |
850 "Delete watch expression at point from the speedbar." | 845 "Delete watch expression at point from the speedbar." |
851 (interactive) | 846 (interactive) |
852 (if (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer) | 847 (if (memq (buffer-local-value 'gud-minor-mode gud-comint-buffer) |
853 '(gdbmi gdba)) | 848 '(gdbmi gdba)) |
854 (let ((text (speedbar-line-text))) | 849 (let* ((var (nth (- (count-lines (point-min) (point)) 2) gdb-var-list)) |
855 ;; Can't use \\S-+ for whitespace because | 850 (varnum (car var))) |
856 ;; speedbar has a whacky syntax table. | 851 (if (string-match "\\." (car var)) |
857 (string-match "\\([^ \t]+\\)" text) | 852 (message-box "Can only delete a root expression") |
858 (let ((expr (match-string 1 text)) var varnum) | 853 (gdb-enqueue-input |
859 (catch 'expr-found | 854 (list |
860 (dolist (var1 gdb-var-list) | 855 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) |
861 (when (string-equal expr (nth 1 var1)) | 856 'gdba) |
862 (setq var var1) | 857 (concat "server interpreter mi \"-var-delete " varnum "\"\n") |
863 (setq varnum (car var1)) | 858 (concat "-var-delete " varnum "\n")) |
864 (throw 'expr-found nil)))) | 859 'ignore)) |
865 (unless (string-match "\\." (car var)) | 860 (setq gdb-var-list (delq var gdb-var-list)) |
866 (gdb-enqueue-input | 861 (dolist (varchild gdb-var-list) |
867 (list | 862 (if (string-match (concat (car var) "\\.") (car varchild)) |
868 (if (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) | 863 (setq gdb-var-list (delq varchild gdb-var-list)))))))) |
869 'gdba) | |
870 (concat "server interpreter mi \"-var-delete " varnum "\"\n") | |
871 (concat "-var-delete " varnum "\n")) | |
872 'ignore)) | |
873 (setq gdb-var-list (delq var gdb-var-list)) | |
874 (dolist (varchild gdb-var-list) | |
875 (if (string-match (concat (car var) "\\.") (car varchild)) | |
876 (setq gdb-var-list (delq varchild gdb-var-list))))))))) | |
877 | 864 |
878 (defun gdb-var-delete-children (varnum) | 865 (defun gdb-var-delete-children (varnum) |
879 "Delete children of variable object at point from the speedbar." | 866 "Delete children of variable object at point from the speedbar." |
880 (gdb-enqueue-input | 867 (gdb-enqueue-input |
881 (list | 868 (list |
1015 ;; | 1002 ;; |
1016 (gdb-set-buffer-rules 'gdb-partial-output-buffer | 1003 (gdb-set-buffer-rules 'gdb-partial-output-buffer |
1017 'gdb-partial-output-name) | 1004 'gdb-partial-output-name) |
1018 | 1005 |
1019 (defun gdb-partial-output-name () | 1006 (defun gdb-partial-output-name () |
1020 (concat "*partial-output-" | 1007 (concat " *partial-output-" |
1021 (gdb-get-target-string) | 1008 (gdb-get-target-string) |
1022 "*")) | 1009 "*")) |
1023 | 1010 |
1024 | 1011 |
1025 (gdb-set-buffer-rules 'gdb-inferior-io | 1012 (gdb-set-buffer-rules 'gdb-inferior-io |
1786 (let ((flag) (bptno)) | 1773 (let ((flag) (bptno)) |
1787 ;; Remove all breakpoint-icons in source buffers but not assembler buffer. | 1774 ;; Remove all breakpoint-icons in source buffers but not assembler buffer. |
1788 (dolist (buffer (buffer-list)) | 1775 (dolist (buffer (buffer-list)) |
1789 (with-current-buffer buffer | 1776 (with-current-buffer buffer |
1790 (if (and (memq gud-minor-mode '(gdba gdbmi)) | 1777 (if (and (memq gud-minor-mode '(gdba gdbmi)) |
1791 (not (string-match "\\`\\*.+\\*\\'" (buffer-name)))) | 1778 (not (string-match "\\` ?\\*.+\\*\\'" (buffer-name)))) |
1792 (gdb-remove-breakpoint-icons (point-min) (point-max))))) | 1779 (gdb-remove-breakpoint-icons (point-min) (point-max))))) |
1793 (with-current-buffer (gdb-get-buffer 'gdb-breakpoints-buffer) | 1780 (with-current-buffer (gdb-get-buffer 'gdb-breakpoints-buffer) |
1794 (save-excursion | 1781 (save-excursion |
1795 (let ((buffer-read-only nil)) | 1782 (let ((buffer-read-only nil)) |
1796 (goto-char (point-min)) | 1783 (goto-char (point-min)) |
2935 Kills the gdb buffers, and resets variables and the source buffers." | 2922 Kills the gdb buffers, and resets variables and the source buffers." |
2936 (dolist (buffer (buffer-list)) | 2923 (dolist (buffer (buffer-list)) |
2937 (unless (eq buffer gud-comint-buffer) | 2924 (unless (eq buffer gud-comint-buffer) |
2938 (with-current-buffer buffer | 2925 (with-current-buffer buffer |
2939 (if (memq gud-minor-mode '(gdbmi gdba)) | 2926 (if (memq gud-minor-mode '(gdbmi gdba)) |
2940 (if (string-match "\\`\\*.+\\*\\'" (buffer-name)) | 2927 (if (string-match "\\` ?\\*.+\\*\\'" (buffer-name)) |
2941 (kill-buffer nil) | 2928 (kill-buffer nil) |
2942 (gdb-remove-breakpoint-icons (point-min) (point-max) t) | 2929 (gdb-remove-breakpoint-icons (point-min) (point-max) t) |
2943 (setq gud-minor-mode nil) | 2930 (setq gud-minor-mode nil) |
2944 (kill-local-variable 'tool-bar-map) | 2931 (kill-local-variable 'tool-bar-map) |
2945 (kill-local-variable 'gdb-define-alist)))))) | 2932 (kill-local-variable 'gdb-define-alist)))))) |