Mercurial > emacs
comparison lisp/progmodes/gdb-ui.el @ 90082:6d92d69fae33
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-4
Merge from emacs--cvs-trunk--0
Patches applied:
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-41
- miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-46
Update from CVS
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-47
Merge from gnus--rel--5.10
* miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-4
Merge from emacs--cvs-trunk--0
* miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-5
Update from CVS: exi/gnus-faq.texi ([4.1]): Typo.
* miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-6
Update from CVS
author | Miles Bader <miles@gnu.org> |
---|---|
date | Sat, 22 Jan 2005 21:39:38 +0000 |
parents | f2ebccfa87d4 4d7bfec0bb4a |
children | befae6bafecb |
comparison
equal
deleted
inserted
replaced
90081:b1b6eac1aaa3 | 90082:6d92d69fae33 |
---|---|
31 ;; It separates the input/output of your program from that of GDB, if | 31 ;; It separates the input/output of your program from that of GDB, if |
32 ;; required, and watches expressions in the speedbar. It also uses features of | 32 ;; required, and watches expressions in the speedbar. It also uses features of |
33 ;; Emacs 21 such as the fringe/display margin for breakpoints, and the toolbar | 33 ;; Emacs 21 such as the fringe/display margin for breakpoints, and the toolbar |
34 ;; (see the GDB Graphical Interface section in the Emacs info manual). | 34 ;; (see the GDB Graphical Interface section in the Emacs info manual). |
35 | 35 |
36 ;; Start the debugger with M-x gdba. | 36 ;; By default, M-x gdb will start the debugger. However, if you have customised |
37 | 37 ;; gud-gdb-command-name, then start it with M-x gdba. |
38 ;; This file has evolved from gdba.el from GDB 5.0 written by Tom Lord and Jim | 38 |
39 ;; Kingdon and uses GDB's annotation interface. You don't need to know about | 39 ;; This file has evolved from gdba.el that was included with GDB 5.0 and |
40 ;; annotations to use this mode as a debugger, but if you are interested | 40 ;; written by Tom Lord and Jim Kingdon. It uses GDB's annotation interface. |
41 ;; developing the mode itself, then see the Annotations section in the GDB | 41 ;; You don't need to know about annotations to use this mode as a debugger, |
42 ;; info manual. | 42 ;; but if you are interested developing the mode itself, then see the |
43 ;; Annotations section in the GDB info manual. | |
43 ;; | 44 ;; |
44 ;; GDB developers plan to make the annotation interface obsolete. A new | 45 ;; GDB developers plan to make the annotation interface obsolete. A new |
45 ;; interface called GDB/MI (machine interface) has been designed to replace | 46 ;; interface called GDB/MI (machine interface) has been designed to replace |
46 ;; it. Some GDB/MI commands are used in this file through the CLI command | 47 ;; it. Some GDB/MI commands are used in this file through the CLI command |
47 ;; 'interpreter mi <mi-command>'. A file called gdb-mi.el is included in the | 48 ;; 'interpreter mi <mi-command>'. A file called gdb-mi.el is included with |
48 ;; GDB repository for future releases (6.2 onwards) that uses GDB/MI as the | 49 ;; GDB (6.2 onwards) that uses GDB/MI as the primary interface to GDB. It is |
49 ;; primary interface to GDB. It is still under development and is part of a | 50 ;; still under development and is part of a process to migrate Emacs from |
50 ;; process to migrate Emacs from annotations to GDB/MI. | 51 ;; annotations to GDB/MI. |
51 ;; | 52 ;; |
52 ;; Known Bugs: | 53 ;; Known Bugs: |
53 ;; | 54 ;; |
55 ;; TODO: | |
56 ;; Use tree-widget.el instead of the speedbar for watch-expressions? | |
57 ;; Mark breakpoint locations on scroll-bar of source buffer? | |
54 | 58 |
55 ;;; Code: | 59 ;;; Code: |
56 | 60 |
57 (require 'gud) | 61 (require 'gud) |
58 | 62 |
167 (gdb-ann3)) | 171 (gdb-ann3)) |
168 | 172 |
169 (defvar gdb-debug-log nil) | 173 (defvar gdb-debug-log nil) |
170 | 174 |
171 (defcustom gdb-enable-debug-log nil | 175 (defcustom gdb-enable-debug-log nil |
172 "Non-nil means record the process input and output in `gdb-debug-log'." | 176 "Non-nil means record the process input and output in `gdb-debug-log'." |
173 :type 'boolean | 177 :type 'boolean |
174 :group 'gud | 178 :group 'gud |
175 :version "21.4") | 179 :version "21.4") |
176 | 180 |
177 (defcustom gdb-use-inferior-io-buffer nil | 181 (defcustom gdb-use-inferior-io-buffer nil |
178 "Non-nil means display output from the inferior in a separate buffer." | 182 "Non-nil means display output from the inferior in a separate buffer." |
179 :type 'boolean | 183 :type 'boolean |
180 :group 'gud | 184 :group 'gud |
181 :version "21.4") | 185 :version "21.4") |
182 | 186 |
183 (defun gdb-ann3 () | 187 (defun gdb-ann3 () |
208 (forward-char 2) | 212 (forward-char 2) |
209 (gud-call "until *%a" arg))) | 213 (gud-call "until *%a" arg))) |
210 "\C-u" "Continue to current line or address.") | 214 "\C-u" "Continue to current line or address.") |
211 | 215 |
212 (define-key gud-minor-mode-map [left-margin mouse-1] | 216 (define-key gud-minor-mode-map [left-margin mouse-1] |
217 'gdb-mouse-set-clear-breakpoint) | |
218 (define-key gud-minor-mode-map [left-fringe mouse-1] | |
219 'gdb-mouse-set-clear-breakpoint) | |
220 (define-key gud-minor-mode-map [left-margin mouse-3] | |
213 'gdb-mouse-toggle-breakpoint) | 221 'gdb-mouse-toggle-breakpoint) |
214 (define-key gud-minor-mode-map [left-fringe mouse-1] | 222 ; (define-key gud-minor-mode-map [left-fringe mouse-3] |
215 'gdb-mouse-toggle-breakpoint) | 223 ; 'gdb-mouse-toggle-breakpoint) |
216 | 224 |
217 (setq comint-input-sender 'gdb-send) | 225 (setq comint-input-sender 'gdb-send) |
218 ;; | 226 ;; |
219 ;; (re-)initialize | 227 ;; (re-)initialize |
220 (setq gdb-current-address "main") | 228 (setq gdb-current-address "main") |
279 (select-frame (make-frame)) | 287 (select-frame (make-frame)) |
280 (require 'info) | 288 (require 'info) |
281 (Info-goto-node "(emacs)GDB Graphical Interface")) | 289 (Info-goto-node "(emacs)GDB Graphical Interface")) |
282 | 290 |
283 (defconst gdb-var-create-regexp | 291 (defconst gdb-var-create-regexp |
284 "name=\"\\(.*?\\)\",numchild=\"\\(.*?\\)\",type=\"\\(.*?\\)\"") | 292 "name=\"\\(.*?\\)\",numchild=\"\\(.*?\\)\",type=\"\\(.*?\\)\"") |
285 | 293 |
286 (defun gdb-var-create-handler (expr) | 294 (defun gdb-var-create-handler (expr) |
287 (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) | 295 (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) |
288 (goto-char (point-min)) | 296 (goto-char (point-min)) |
289 (if (re-search-forward gdb-var-create-regexp nil t) | 297 (if (re-search-forward gdb-var-create-regexp nil t) |
326 (gdb-enqueue-input | 334 (gdb-enqueue-input |
327 (list (concat "server interpreter mi \"-var-list-children " varnum "\"\n") | 335 (list (concat "server interpreter mi \"-var-list-children " varnum "\"\n") |
328 `(lambda () (gdb-var-list-children-handler ,varnum))))) | 336 `(lambda () (gdb-var-list-children-handler ,varnum))))) |
329 | 337 |
330 (defconst gdb-var-list-children-regexp | 338 (defconst gdb-var-list-children-regexp |
331 "name=\"\\(.*?\\)\",exp=\"\\(.*?\\)\",numchild=\"\\(.*?\\)\"") | 339 "name=\"\\(.*?\\)\",exp=\"\\(.*?\\)\",numchild=\"\\(.*?\\)\"") |
332 | 340 |
333 (defun gdb-var-list-children-handler (varnum) | 341 (defun gdb-var-list-children-handler (varnum) |
334 (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) | 342 (with-current-buffer (gdb-get-create-buffer 'gdb-partial-output-buffer) |
335 (goto-char (point-min)) | 343 (goto-char (point-min)) |
336 (let ((var-list nil)) | 344 (let ((var-list nil)) |
1036 ;; buffer specific functions | 1044 ;; buffer specific functions |
1037 gdb-info-breakpoints-custom) | 1045 gdb-info-breakpoints-custom) |
1038 | 1046 |
1039 (defvar gdb-cdir nil "Compilation directory.") | 1047 (defvar gdb-cdir nil "Compilation directory.") |
1040 | 1048 |
1041 (defconst breakpoint-xpm-data "/* XPM */ | 1049 (defconst breakpoint-xpm-data |
1050 "/* XPM */ | |
1042 static char *magick[] = { | 1051 static char *magick[] = { |
1043 /* columns rows colors chars-per-pixel */ | 1052 /* columns rows colors chars-per-pixel */ |
1044 \"10 10 2 1\", | 1053 \"10 10 2 1\", |
1045 \" c red\", | 1054 \" c red\", |
1046 \"+ c None\", | 1055 \"+ c None\", |
1057 \"+++ +++\", | 1066 \"+++ +++\", |
1058 };" | 1067 };" |
1059 "XPM data used for breakpoint icon.") | 1068 "XPM data used for breakpoint icon.") |
1060 | 1069 |
1061 (defconst breakpoint-enabled-pbm-data | 1070 (defconst breakpoint-enabled-pbm-data |
1062 "P1 | 1071 "P1 |
1063 10 10\", | 1072 10 10\", |
1064 0 0 0 0 1 1 1 1 0 0 0 0 | 1073 0 0 0 0 1 1 1 1 0 0 0 0 |
1065 0 0 0 1 1 1 1 1 1 0 0 0 | 1074 0 0 0 1 1 1 1 1 1 0 0 0 |
1066 0 0 1 1 1 1 1 1 1 1 0 0 | 1075 0 0 1 1 1 1 1 1 1 1 0 0 |
1067 0 1 1 1 1 1 1 1 1 1 1 0 | 1076 0 1 1 1 1 1 1 1 1 1 1 0 |
1072 0 0 0 1 1 1 1 1 1 0 0 0 | 1081 0 0 0 1 1 1 1 1 1 0 0 0 |
1073 0 0 0 0 1 1 1 1 0 0 0 0" | 1082 0 0 0 0 1 1 1 1 0 0 0 0" |
1074 "PBM data used for enabled breakpoint icon.") | 1083 "PBM data used for enabled breakpoint icon.") |
1075 | 1084 |
1076 (defconst breakpoint-disabled-pbm-data | 1085 (defconst breakpoint-disabled-pbm-data |
1077 "P1 | 1086 "P1 |
1078 10 10\", | 1087 10 10\", |
1079 0 0 1 0 1 0 1 0 0 0 | 1088 0 0 1 0 1 0 1 0 0 0 |
1080 0 1 0 1 0 1 0 1 0 0 | 1089 0 1 0 1 0 1 0 1 0 0 |
1081 1 0 1 0 1 0 1 0 1 0 | 1090 1 0 1 0 1 0 1 0 1 0 |
1082 0 1 0 1 0 1 0 1 0 1 | 1091 0 1 0 1 0 1 0 1 0 1 |
1114 :group 'gud) | 1123 :group 'gud) |
1115 | 1124 |
1116 | 1125 |
1117 ;;-put breakpoint icons in relevant margins (even those set in the GUD buffer) | 1126 ;;-put breakpoint icons in relevant margins (even those set in the GUD buffer) |
1118 (defun gdb-info-breakpoints-custom () | 1127 (defun gdb-info-breakpoints-custom () |
1119 (let ((flag)) | 1128 (let ((flag) (bptno)) |
1120 ;; | |
1121 ;; remove all breakpoint-icons in source buffers but not assembler buffer | 1129 ;; remove all breakpoint-icons in source buffers but not assembler buffer |
1122 (dolist (buffer (buffer-list)) | 1130 (dolist (buffer (buffer-list)) |
1123 (with-current-buffer buffer | 1131 (with-current-buffer buffer |
1124 (if (and (eq gud-minor-mode 'gdba) | 1132 (if (and (eq gud-minor-mode 'gdba) |
1125 (not (string-match "\\`\\*.+\\*\\'" (buffer-name)))) | 1133 (not (string-match "\\`\\*.+\\*\\'" (buffer-name)))) |
1129 (goto-char (point-min)) | 1137 (goto-char (point-min)) |
1130 (while (< (point) (- (point-max) 1)) | 1138 (while (< (point) (- (point-max) 1)) |
1131 (forward-line 1) | 1139 (forward-line 1) |
1132 (if (looking-at "[^\t].*breakpoint") | 1140 (if (looking-at "[^\t].*breakpoint") |
1133 (progn | 1141 (progn |
1134 (looking-at "[0-9]*\\s-*\\S-*\\s-*\\S-*\\s-*\\(.\\)") | 1142 (looking-at "\\([0-9]+\\)\\s-+\\S-+\\s-+\\S-+\\s-+\\(.\\)") |
1135 (setq flag (char-after (match-beginning 1))) | 1143 (setq bptno (match-string 1)) |
1144 (setq flag (char-after (match-beginning 2))) | |
1136 (beginning-of-line) | 1145 (beginning-of-line) |
1137 (if (re-search-forward "in\\s-+\\S-+\\s-+at\\s-+" nil t) | 1146 (if (re-search-forward "in\\s-+\\S-+\\s-+at\\s-+" nil t) |
1138 (progn | 1147 (progn |
1139 (looking-at "\\(\\S-*\\):\\([0-9]+\\)") | 1148 (looking-at "\\(\\S-+\\):\\([0-9]+\\)") |
1140 (let ((line (match-string 2)) (buffer-read-only nil) | 1149 (let ((line (match-string 2)) (buffer-read-only nil) |
1141 (file (match-string 1))) | 1150 (file (match-string 1))) |
1142 (add-text-properties (point-at-bol) (point-at-eol) | 1151 (add-text-properties (point-at-bol) (point-at-eol) |
1143 '(mouse-face highlight | 1152 '(mouse-face highlight |
1144 help-echo "mouse-2, RET: visit breakpoint")) | 1153 help-echo "mouse-2, RET: visit breakpoint")) |
1151 (set (make-local-variable 'tool-bar-map) | 1160 (set (make-local-variable 'tool-bar-map) |
1152 gud-tool-bar-map)) | 1161 gud-tool-bar-map)) |
1153 ;; only want one breakpoint icon at each location | 1162 ;; only want one breakpoint icon at each location |
1154 (save-excursion | 1163 (save-excursion |
1155 (goto-line (string-to-number line)) | 1164 (goto-line (string-to-number line)) |
1156 (gdb-put-breakpoint-icon (eq flag ?y))))))))) | 1165 (gdb-put-breakpoint-icon (eq flag ?y) bptno)))))))) |
1157 (end-of-line))))) | 1166 (end-of-line))))) |
1158 (if (gdb-get-buffer 'gdb-assembler-buffer) (gdb-assembler-custom))) | 1167 (if (gdb-get-buffer 'gdb-assembler-buffer) (gdb-assembler-custom))) |
1159 | 1168 |
1160 (defun gdb-mouse-toggle-breakpoint (event) | 1169 (defun gdb-mouse-set-clear-breakpoint (event) |
1161 "Toggle breakpoint in left fringe/margin with mouse click." | 1170 "Set/clear breakpoint in left fringe/margin with mouse click." |
1162 (interactive "e") | 1171 (interactive "e") |
1163 (mouse-minibuffer-check event) | 1172 (mouse-minibuffer-check event) |
1164 (let ((posn (event-end event))) | 1173 (let ((posn (event-end event))) |
1165 (if (numberp (posn-point posn)) | 1174 (if (numberp (posn-point posn)) |
1166 (with-selected-window (posn-window posn) | 1175 (with-selected-window (posn-window posn) |
1170 (eq (car (fringe-bitmaps-at-pos (posn-point posn))) | 1179 (eq (car (fringe-bitmaps-at-pos (posn-point posn))) |
1171 'breakpoint)) | 1180 'breakpoint)) |
1172 (gud-remove nil) | 1181 (gud-remove nil) |
1173 (gud-break nil))))))) | 1182 (gud-break nil))))))) |
1174 | 1183 |
1184 (defun gdb-mouse-toggle-breakpoint (event) | |
1185 "Enable/disable breakpoint in left fringe/margin with mouse click." | |
1186 (interactive "e") | |
1187 (mouse-minibuffer-check event) | |
1188 (let ((posn (event-end event))) | |
1189 (if (numberp (posn-point posn)) | |
1190 (with-selected-window (posn-window posn) | |
1191 (save-excursion | |
1192 (goto-char (posn-point posn)) | |
1193 (if | |
1194 ; (or | |
1195 (posn-object posn) | |
1196 ; (eq (car (fringe-bitmaps-at-pos (posn-point posn))) | |
1197 ; 'breakpoint)) | |
1198 (gdb-enqueue-input | |
1199 (list | |
1200 (let ((bptno (get-text-property | |
1201 0 'gdb-bptno (car (posn-string posn))))) | |
1202 (concat | |
1203 (if (get-text-property | |
1204 0 'gdb-enabled (car (posn-string posn))) | |
1205 "disable " | |
1206 "enable ") | |
1207 bptno "\n")) 'ignore)))))))) | |
1208 | |
1175 (defun gdb-breakpoints-buffer-name () | 1209 (defun gdb-breakpoints-buffer-name () |
1176 (with-current-buffer gud-comint-buffer | 1210 (with-current-buffer gud-comint-buffer |
1177 (concat "*breakpoints of " (gdb-get-target-string) "*"))) | 1211 (concat "*breakpoints of " (gdb-get-target-string) "*"))) |
1178 | 1212 |
1179 (defun gdb-display-breakpoints-buffer () | 1213 (defun gdb-display-breakpoints-buffer () |
1225 (if (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdba)) | 1259 (if (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdba)) |
1226 'gdb-invalidate-breakpoints | 1260 'gdb-invalidate-breakpoints |
1227 'gdbmi-invalidate-breakpoints)) | 1261 'gdbmi-invalidate-breakpoints)) |
1228 | 1262 |
1229 (defun gdb-toggle-breakpoint () | 1263 (defun gdb-toggle-breakpoint () |
1230 "Enable/disable the breakpoint at current line." | 1264 "Enable/disable breakpoint at current line." |
1231 (interactive) | 1265 (interactive) |
1232 (save-excursion | 1266 (save-excursion |
1233 (beginning-of-line 1) | 1267 (beginning-of-line 1) |
1234 (if (if (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdba)) | 1268 (if (if (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdba)) |
1235 (looking-at "\\([0-9]+\\).*point\\s-*\\S-*\\s-*\\(.\\)") | 1269 (looking-at "\\([0-9]+\\).*point\\s-*\\S-*\\s-*\\(.\\)") |
1705 :type 'boolean | 1739 :type 'boolean |
1706 :group 'gud | 1740 :group 'gud |
1707 :version "21.4") | 1741 :version "21.4") |
1708 | 1742 |
1709 (defun gdb-many-windows (arg) | 1743 (defun gdb-many-windows (arg) |
1710 "Toggle the number of windows in the basic arrangement." | 1744 "Toggle the number of windows in the basic arrangement." |
1711 (interactive "P") | 1745 (interactive "P") |
1712 (setq gdb-many-windows | 1746 (setq gdb-many-windows |
1713 (if (null arg) | 1747 (if (null arg) |
1714 (not gdb-many-windows) | 1748 (not gdb-many-windows) |
1715 (> (prefix-numeric-value arg) 0))) | 1749 (> (prefix-numeric-value arg) 0))) |
1775 (defun gdb-put-string (putstring pos &optional dprop) | 1809 (defun gdb-put-string (putstring pos &optional dprop) |
1776 "Put string PUTSTRING in front of POS in the current buffer. | 1810 "Put string PUTSTRING in front of POS in the current buffer. |
1777 PUTSTRING is displayed by putting an overlay into the current buffer with a | 1811 PUTSTRING is displayed by putting an overlay into the current buffer with a |
1778 `before-string' STRING that has a `display' property whose value is | 1812 `before-string' STRING that has a `display' property whose value is |
1779 PUTSTRING." | 1813 PUTSTRING." |
1780 (let ((gdb-string "x") | 1814 (let ((string (make-string 1 ?x)) |
1781 (buffer (current-buffer))) | 1815 (buffer (current-buffer))) |
1816 (setq putstring (copy-sequence putstring)) | |
1782 (let ((overlay (make-overlay pos pos buffer)) | 1817 (let ((overlay (make-overlay pos pos buffer)) |
1783 (prop (or dprop | 1818 (prop (or dprop |
1784 (list (list 'margin 'left-margin) putstring)))) | 1819 (list (list 'margin 'left-margin) putstring)))) |
1785 (put-text-property 0 (length gdb-string) 'display prop gdb-string) | 1820 (put-text-property 0 (length string) 'display prop string) |
1786 (overlay-put overlay 'put-break t) | 1821 (overlay-put overlay 'put-break t) |
1787 (overlay-put overlay 'before-string gdb-string)))) | 1822 (overlay-put overlay 'before-string string)))) |
1788 | 1823 |
1789 ;;from remove-images | 1824 ;;from remove-images |
1790 (defun gdb-remove-strings (start end &optional buffer) | 1825 (defun gdb-remove-strings (start end &optional buffer) |
1791 "Remove strings between START and END in BUFFER. | 1826 "Remove strings between START and END in BUFFER. |
1792 Remove only strings that were put in BUFFER with calls to `gdb-put-string'. | 1827 Remove only strings that were put in BUFFER with calls to `gdb-put-string'. |
1793 BUFFER nil or omitted means use the current buffer." | 1828 BUFFER nil or omitted means use the current buffer." |
1794 (unless buffer | 1829 (unless buffer |
1795 (setq buffer (current-buffer))) | 1830 (setq buffer (current-buffer))) |
1796 (let ((overlays (overlays-in start end))) | 1831 (dolist (overlay (overlays-in start end)) |
1797 (while overlays | |
1798 (let ((overlay (car overlays))) | |
1799 (when (overlay-get overlay 'put-break) | 1832 (when (overlay-get overlay 'put-break) |
1800 (delete-overlay overlay))) | 1833 (delete-overlay overlay)))) |
1801 (setq overlays (cdr overlays))))) | 1834 |
1802 | 1835 (defun gdb-put-breakpoint-icon (enabled bptno) |
1803 (defun gdb-put-breakpoint-icon (enabled) | |
1804 (let ((start (progn (beginning-of-line) (- (point) 1))) | 1836 (let ((start (progn (beginning-of-line) (- (point) 1))) |
1805 (end (progn (end-of-line) (+ (point) 1)))) | 1837 (end (progn (end-of-line) (+ (point) 1))) |
1838 (putstring (if enabled "B" "b"))) | |
1839 (add-text-properties | |
1840 0 1 '(help-echo "mouse-1: set/clear bkpt, mouse-3: enable/disable bkpt") | |
1841 putstring) | |
1842 (if enabled (add-text-properties | |
1843 0 1 `(gdb-bptno ,bptno gdb-enabled t) putstring) | |
1844 (add-text-properties | |
1845 0 1 `(gdb-bptno ,bptno gdb-enabled nil) putstring)) | |
1806 (gdb-remove-breakpoint-icons start end) | 1846 (gdb-remove-breakpoint-icons start end) |
1807 (if (display-images-p) | 1847 (if (display-images-p) |
1808 (if (>= (car (window-fringes)) 8) | 1848 (if (>= (car (window-fringes)) 8) |
1809 (gdb-put-string | 1849 (gdb-put-string |
1810 nil (1+ start) | 1850 nil (1+ start) |
1811 `(left-fringe breakpoint | 1851 `(left-fringe breakpoint |
1812 ,(if enabled | 1852 ,(if enabled |
1813 'breakpoint-enabled-bitmap-face | 1853 'breakpoint-enabled-bitmap-face |
1814 'breakpoint-disabled-bitmap-face))) | 1854 'breakpoint-disabled-bitmap-face))) |
1815 (when (< left-margin-width 2) | 1855 (when (< left-margin-width 2) |
1816 (save-current-buffer | 1856 (save-current-buffer |
1817 (setq left-margin-width 2) | 1857 (setq left-margin-width 2) |
1818 (if (get-buffer-window (current-buffer) 0) | 1858 (if (get-buffer-window (current-buffer) 0) |
1819 (set-window-margins | 1859 (set-window-margins |
1836 :conversion disabled | 1876 :conversion disabled |
1837 :ascent 100) | 1877 :ascent 100) |
1838 (:type pbm :data | 1878 (:type pbm :data |
1839 ,breakpoint-disabled-pbm-data | 1879 ,breakpoint-disabled-pbm-data |
1840 :ascent 100)))))) | 1880 :ascent 100)))))) |
1841 (+ start 1) nil 'left-margin)) | 1881 (+ start 1) |
1882 putstring | |
1883 'left-margin)) | |
1842 (when (< left-margin-width 2) | 1884 (when (< left-margin-width 2) |
1843 (save-current-buffer | 1885 (save-current-buffer |
1844 (setq left-margin-width 2) | 1886 (setq left-margin-width 2) |
1845 (if (get-buffer-window (current-buffer) 0) | 1887 (if (get-buffer-window (current-buffer) 0) |
1846 (set-window-margins | 1888 (set-window-margins |
1847 (get-buffer-window (current-buffer) 0) | 1889 (get-buffer-window (current-buffer) 0) |
1848 left-margin-width right-margin-width)))) | 1890 left-margin-width right-margin-width)))) |
1849 (gdb-put-string (if enabled "B" "b") (1+ start))))) | 1891 (gdb-put-string putstring (1+ start))))) |
1850 | 1892 |
1851 (defun gdb-remove-breakpoint-icons (start end &optional remove-margin) | 1893 (defun gdb-remove-breakpoint-icons (start end &optional remove-margin) |
1852 (gdb-remove-strings start end) | 1894 (gdb-remove-strings start end) |
1853 (if (display-images-p) | 1895 (if (display-images-p) |
1854 (remove-images start end)) | 1896 (remove-images start end)) |