Use URLs, not Boston addresses, in copyright notices.
[bpt/emacs.git] / src / .gdbinit
CommitLineData
acaf905b 1# Copyright (C) 1992-1998, 2000-2012 Free Software Foundation, Inc.
e3efab9c
GM
2#
3# This file is part of GNU Emacs.
4#
5# GNU Emacs is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
684d6f5b 7# the Free Software Foundation; either version 3, or (at your option)
e3efab9c
GM
8# any later version.
9#
10# GNU Emacs is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
fee0bd5f 16# along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
e3efab9c 17
1781b9e9 18# Force loading of symbols, enough to give us VALBITS etc.
0a05a035 19set $dummy = main + 8
2d4018aa 20# With some compilers, we need this to give us struct Lisp_Symbol etc.:
0a05a035 21set $dummy = Fmake_symbol + 8
7faa0236 22
39d10e52
RS
23# Find lwlib source files too.
24dir ../lwlib
892d8fcd 25#dir /gd/gnu/lesstif-0.89.9/lib/Xm
39d10e52 26
056515d8
KH
27# Don't enter GDB when user types C-g to quit.
28# This has one unfortunate effect: you can't type C-c
29# at the GDB to stop Emacs, when using X.
30# However, C-z works just as well in that case.
31handle 2 noprint pass
32
19b9d1de
NR
33# Make it work like SIGINT normally does.
34handle SIGTSTP nopass
35
6a7d16fe
KS
36# Pass on user signals
37handle SIGUSR1 noprint pass
38handle SIGUSR2 noprint pass
39
3266f62b
GM
40# Don't pass SIGALRM to Emacs. This makes problems when
41# debugging.
42handle SIGALRM ignore
43
0e73312b
RS
44# Use $bugfix so that the value isn't a constant.
45# Using a constant runs into GDB bugs sometimes.
6b61353c 46define xgetptr
4706125e
PE
47 if (CHECK_LISP_OBJECT_TYPE)
48 set $bugfix = $arg0.i
49 else
50 set $bugfix = $arg0
51 end
1781b9e9 52 set $ptr = ($bugfix & VALMASK) | DATA_SEG_BITS
6b61353c
KH
53end
54
55define xgetint
4706125e
PE
56 if (CHECK_LISP_OBJECT_TYPE)
57 set $bugfix = $arg0.i
58 else
59 set $bugfix = $arg0
60 end
61 set $int = $bugfix << (USE_LSB_TAG ? 0 : INTTYPEBITS) >> INTTYPEBITS
6b61353c
KH
62end
63
64define xgettype
4706125e
PE
65 if (CHECK_LISP_OBJECT_TYPE)
66 set $bugfix = $arg0.i
67 else
68 set $bugfix = $arg0
69 end
1781b9e9 70 set $type = (enum Lisp_Type) (USE_LSB_TAG ? $bugfix & (1 << GCTYPEBITS) - 1 : $bugfix >> VALBITS)
6b61353c 71end
b74f15c6 72
a6ffc6a2 73# Set up something to print out s-expressions.
4fccedb5
EZ
74# We save and restore print_output_debug_flag to prevent the w32 port
75# from calling OutputDebugString, which causes GDB to display each
76# character twice (yuk!).
a6ffc6a2 77define pr
3723ec07 78 pp $
a6ffc6a2 79end
a6ffc6a2
JB
80document pr
81Print the emacs s-expression which is $.
82Works only when an inferior emacs is executing.
83end
84
6c5d0c52
KS
85# Print out s-expressions
86define pp
87 set $tmp = $arg0
4fccedb5
EZ
88 set $output_debug = print_output_debug_flag
89 set print_output_debug_flag = 0
6b1319ce 90 call safe_debug_print ($tmp)
4fccedb5 91 set print_output_debug_flag = $output_debug
6c5d0c52
KS
92end
93document pp
94Print the argument as an emacs s-expression
95Works only when an inferior emacs is executing.
96end
97
1609a963
KS
98# Print value of lisp variable
99define pv
1609a963 100 set $tmp = "$arg0"
4fccedb5
EZ
101 set $output_debug = print_output_debug_flag
102 set print_output_debug_flag = 0
6b1319ce 103 call safe_debug_print (find_symbol_value (intern ($tmp)))
4fccedb5 104 set print_output_debug_flag = $output_debug
1609a963 105end
3723ec07 106document pv
1609a963
KS
107Print the value of the lisp variable given as argument.
108Works only when an inferior emacs is executing.
1609a963
KS
109end
110
decf4020
KS
111# Print out current buffer point and boundaries
112define ppt
113 set $b = current_buffer
114 set $t = $b->text
115 printf "BUF PT: %d", $b->pt
116 if ($b->pt != $b->pt_byte)
117 printf "[%d]", $b->pt_byte
118 end
119 printf " of 1..%d", $t->z
120 if ($t->z != $t->z_byte)
121 printf "[%d]", $t->z_byte
122 end
123 if ($b->begv != 1 || $b->zv != $t->z)
124 printf " NARROW=%d..%d", $b->begv, $b->zv
125 if ($b->begv != $b->begv_byte || $b->zv != $b->zv_byte)
126 printf " [%d..%d]", $b->begv_byte, $b->zv_byte
127 end
128 end
129 printf " GAP: %d", $t->gpt
130 if ($t->gpt != $t->gpt_byte)
131 printf "[%d]", $t->gpt_byte
132 end
133 printf " SZ=%d\n", $t->gap_size
134end
135document ppt
2d5ed88d
EZ
136Print current buffer's point and boundaries.
137Prints values of point, beg, end, narrow, and gap for current buffer.
decf4020
KS
138end
139
be996d82
EZ
140define pitmethod
141 set $itmethod = $arg0
142 # output $itmethod
143 if ($itmethod == 0)
144 printf "GET_FROM_BUFFER"
145 end
146 if ($itmethod == 1)
147 printf "GET_FROM_DISPLAY_VECTOR"
148 end
149 if ($itmethod == 2)
150 printf "GET_FROM_STRING"
151 end
152 if ($itmethod == 3)
153 printf "GET_FROM_C_STRING"
154 end
155 if ($itmethod == 4)
156 printf "GET_FROM_IMAGE"
157 end
158 if ($itmethod == 5)
159 printf "GET_FROM_STRETCH"
160 end
161 if ($itmethod < 0 || $itmethod > 5)
162 output $itmethod
163 end
164end
165document pitmethod
166Pretty print it->method given as first arg
167end
168
afca296c
KS
169# Print out iterator given as first arg
170define pitx
171 set $it = $arg0
172 printf "cur=%d", $it->current.pos.charpos
173 if ($it->current.pos.charpos != $it->current.pos.bytepos)
174 printf "[%d]", $it->current.pos.bytepos
175 end
82d59cb0
KS
176 printf " pos=%d", $it->position.charpos
177 if ($it->position.charpos != $it->position.bytepos)
178 printf "[%d]", $it->position.bytepos
179 end
afca296c
KS
180 printf " start=%d", $it->start.pos.charpos
181 if ($it->start.pos.charpos != $it->start.pos.bytepos)
182 printf "[%d]", $it->start.pos.bytepos
183 end
2fde1500
KS
184 printf " end=%d", $it->end_charpos
185 printf " stop=%d", $it->stop_charpos
186 printf " face=%d", $it->face_id
187 if ($it->multibyte_p)
188 printf " MB"
189 end
190 if ($it->header_line_p)
191 printf " HL"
192 end
193 if ($it->n_overlay_strings > 0)
338fa84a 194 printf " nov=%d", $it->n_overlay_strings
2fde1500
KS
195 end
196 if ($it->sp != 0)
197 printf " sp=%d", $it->sp
198 end
2d20eee3
EZ
199 # IT_CHARACTER
200 if ($it->what == 0)
afca296c 201 if ($it->len == 1 && $it->c >= ' ' && it->c < 255)
501b66fa 202 printf " ch='%c'", $it->c
afca296c 203 else
501b66fa 204 printf " ch=[%d,%d]", $it->c, $it->len
2fde1500
KS
205 end
206 else
1e99743b 207 printf " "
be996d82
EZ
208 # output $it->what
209 if ($it->what == 0)
210 printf "IT_CHARACTER"
211 end
212 if ($it->what == 1)
213 printf "IT_COMPOSITION"
214 end
215 if ($it->what == 2)
216 printf "IT_IMAGE"
217 end
218 if ($it->what == 3)
219 printf "IT_STRETCH"
220 end
221 if ($it->what == 4)
222 printf "IT_EOB"
223 end
224 if ($it->what == 5)
225 printf "IT_TRUNCATION"
226 end
227 if ($it->what == 6)
228 printf "IT_CONTINUATION"
229 end
230 if ($it->what < 0 || $it->what > 6)
231 output $it->what
232 end
afca296c 233 end
2d20eee3
EZ
234 if ($it->method != 0)
235 # !GET_FROM_BUFFER
2fde1500 236 printf " next="
be996d82 237 pitmethod $it->method
2d20eee3
EZ
238 if ($it->method == 2)
239 # GET_FROM_STRING
501b66fa
KS
240 printf "[%d]", $it->current.string_pos.charpos
241 end
2d20eee3
EZ
242 if ($it->method == 4)
243 # GET_FROM_IMAGE
1e99743b
KS
244 printf "[%d]", $it->image_id
245 end
2fde1500 246 end
afca296c 247 printf "\n"
241ab1c1
EZ
248 if ($it->bidi_p)
249 printf "BIDI: base_stop=%d prev_stop=%d level=%d\n", $it->base_level_stop, $it->prev_stop, $it->bidi_it.resolved_level
250 end
2fde1500
KS
251 if ($it->region_beg_charpos >= 0)
252 printf "reg=%d-%d ", $it->region_beg_charpos, $it->region_end_charpos
253 end
afca296c
KS
254 printf "vpos=%d hpos=%d", $it->vpos, $it->hpos,
255 printf " y=%d lvy=%d", $it->current_y, $it->last_visible_y
2fde1500 256 printf " x=%d vx=%d-%d", $it->current_x, $it->first_visible_x, $it->last_visible_x
28c1e1ca 257 printf " w=%d", $it->pixel_width
afca296c
KS
258 printf " a+d=%d+%d=%d", $it->ascent, $it->descent, $it->ascent+$it->descent
259 printf " max=%d+%d=%d", $it->max_ascent, $it->max_descent, $it->max_ascent+$it->max_descent
260 printf "\n"
0058964e 261 set $i = 0
82d59cb0 262 while ($i < $it->sp && $i < 4)
0058964e
KS
263 set $e = $it->stack[$i]
264 printf "stack[%d]: ", $i
3eb49e71
EZ
265 pitmethod $e.method
266 printf "[%d]", $e.position.charpos
0058964e
KS
267 printf "\n"
268 set $i = $i + 1
269 end
afca296c
KS
270end
271document pitx
272Pretty print a display iterator.
273Take one arg, an iterator object or pointer.
274end
275
276define pit
277 pitx it
278end
279document pit
280Pretty print the display iterator it.
281end
282
283define prowx
284 set $row = $arg0
285 printf "y=%d x=%d pwid=%d", $row->y, $row->x, $row->pixel_width
286 printf " a+d=%d+%d=%d", $row->ascent, $row->height-$row->ascent, $row->height
287 printf " phys=%d+%d=%d", $row->phys_ascent, $row->phys_height-$row->phys_ascent, $row->phys_height
b12cd789
EZ
288 printf " vis=%d\n", $row->visible_height
289 printf "used=(LMargin=%d,Text=%d,RMargin=%d) Hash=%d\n", $row->used[0], $row->used[1], $row->used[2], $row->hash
afca296c
KS
290 printf "start=%d end=%d", $row->start.pos.charpos, $row->end.pos.charpos
291 if ($row->enabled_p)
292 printf " ENA"
293 end
294 if ($row->displays_text_p)
295 printf " DISP"
296 end
297 if ($row->mode_line_p)
298 printf " MODEL"
299 end
300 if ($row->continued_p)
301 printf " CONT"
302 end
303 if ($row-> truncated_on_left_p)
304 printf " TRUNC:L"
305 end
306 if ($row-> truncated_on_right_p)
307 printf " TRUNC:R"
308 end
309 if ($row->starts_in_middle_of_char_p)
310 printf " STARTMID"
311 end
312 if ($row->ends_in_middle_of_char_p)
313 printf " ENDMID"
314 end
315 if ($row->ends_in_newline_from_string_p)
316 printf " ENDNLFS"
317 end
318 if ($row->ends_at_zv_p)
319 printf " ENDZV"
320 end
321 if ($row->overlapped_p)
322 printf " OLAPD"
323 end
324 if ($row->overlapping_p)
325 printf " OLAPNG"
326 end
327 printf "\n"
328end
329document prowx
330Pretty print information about glyph_row.
331Takes one argument, a row object or pointer.
332end
333
334define prow
335 prowx row
336end
337document prow
338Pretty print information about glyph_row in row.
339end
340
341
342define pcursorx
343 set $cp = $arg0
344 printf "y=%d x=%d vpos=%d hpos=%d", $cp->y, $cp->x, $cp->vpos, $cp->hpos
345end
346document pcursorx
89955f2e 347Pretty print a window cursor.
afca296c
KS
348end
349
350define pcursor
351 printf "output: "
352 pcursorx output_cursor
353 printf "\n"
354end
355document pcursor
89955f2e 356Pretty print the output_cursor.
afca296c
KS
357end
358
359define pwinx
360 set $w = $arg0
361 xgetint $w->sequence_number
362 if ($w->mini_p != Qnil)
363 printf "Mini "
364 end
365 printf "Window %d ", $int
366 xgetptr $w->buffer
367 set $tem = (struct buffer *) $ptr
c40f8d15 368 xgetptr $tem->name_
afca296c
KS
369 printf "%s", ((struct Lisp_String *) $ptr)->data
370 printf "\n"
371 xgetptr $w->start
372 set $tem = (struct Lisp_Marker *) $ptr
373 printf "start=%d end:", $tem->charpos
374 if ($w->window_end_valid != Qnil)
375 xgetint $w->window_end_pos
376 printf "pos=%d", $int
377 xgetint $w->window_end_vpos
378 printf " vpos=%d", $int
379 else
380 printf "invalid"
381 end
382 printf " vscroll=%d", $w->vscroll
383 if ($w->force_start != Qnil)
384 printf " FORCE_START"
385 end
386 if ($w->must_be_updated_p)
387 printf " MUST_UPD"
388 end
389 printf "\n"
390 printf "cursor: "
391 pcursorx $w->cursor
392 printf " phys: "
393 pcursorx $w->phys_cursor
394 if ($w->phys_cursor_on_p)
395 printf " ON"
396 else
397 printf " OFF"
398 end
399 printf " blk="
400 if ($w->last_cursor_off_p != $w->cursor_off_p)
401 if ($w->last_cursor_off_p)
402 printf "ON->"
403 else
404 printf "OFF->"
405 end
406 end
407 if ($w->cursor_off_p)
408 printf "ON"
409 else
410 printf "OFF"
411 end
412 printf "\n"
413end
414document pwinx
415Pretty print a window structure.
89955f2e 416Takes one argument, a pointer to a window structure.
afca296c
KS
417end
418
419define pwin
420 pwinx w
421end
422document pwin
423Pretty print window structure w.
424end
425
bc5a45f3 426define pbiditype
9443b3c7
EZ
427 if ($arg0 == 0)
428 printf "UNDEF"
429 end
bc5a45f3
EZ
430 if ($arg0 == 1)
431 printf "L"
432 end
433 if ($arg0 == 2)
434 printf "R"
435 end
436 if ($arg0 == 3)
437 printf "EN"
438 end
439 if ($arg0 == 4)
440 printf "AN"
441 end
442 if ($arg0 == 5)
443 printf "BN"
444 end
445 if ($arg0 == 6)
446 printf "B"
447 end
9443b3c7 448 if ($arg0 < 0 || $arg0 > 6)
bc5a45f3
EZ
449 printf "%d??", $arg0
450 end
451end
452document pbiditype
453Print textual description of bidi type given as first argument.
454end
455
1e99743b
KS
456define pgx
457 set $g = $arg0
be996d82 458 # CHAR_GLYPH
a1674f0b
EZ
459 if ($g.type == 0)
460 if ($g.u.ch >= ' ' && $g.u.ch < 127)
461 printf "CHAR[%c]", $g.u.ch
1e99743b 462 else
a1674f0b 463 printf "CHAR[0x%x]", $g.u.ch
1e99743b
KS
464 end
465 end
be996d82 466 # COMPOSITE_GLYPH
a1674f0b
EZ
467 if ($g.type == 1)
468 printf "COMP[%d (%d..%d)]", $g.u.cmp.id, $g.slice.cmp.from, $g.slice.cmp.to
1e99743b 469 end
0eb025fb 470 # GLYPHLESS_GLYPH
a1674f0b 471 if ($g.type == 2)
0eb025fb 472 printf "GLYPHLESS["
a1674f0b 473 if ($g.u.glyphless.method == 0)
0eb025fb
EZ
474 printf "THIN]"
475 end
a1674f0b 476 if ($g.u.glyphless.method == 1)
0eb025fb
EZ
477 printf "EMPTY]"
478 end
a1674f0b 479 if ($g.u.glyphless.method == 2)
0eb025fb
EZ
480 printf "ACRO]"
481 end
a1674f0b 482 if ($g.u.glyphless.method == 3)
0eb025fb
EZ
483 printf "HEX]"
484 end
485 end
486 # IMAGE_GLYPH
a1674f0b
EZ
487 if ($g.type == 3)
488 printf "IMAGE[%d]", $g.u.img_id
1e99743b 489 end
be996d82 490 # STRETCH_GLYPH
a1674f0b
EZ
491 if ($g.type == 4)
492 printf "STRETCH[%d+%d]", $g.u.stretch.height, $g.u.stretch.ascent
1e99743b 493 end
a1674f0b 494 xgettype ($g.object)
1e99743b 495 if ($type == Lisp_String)
8654a41b
EZ
496 xgetptr $g.object
497 printf " str=0x%x[%d]", ((struct Lisp_String *)$ptr)->data, $g.charpos
1e99743b 498 else
a1674f0b 499 printf " pos=%d", $g.charpos
1e99743b 500 end
bc5a45f3 501 # For characters, print their resolved level and bidi type
a1674f0b
EZ
502 if ($g.type == 0)
503 printf " blev=%d,btyp=", $g.resolved_level
504 pbiditype $g.bidi_type
bc5a45f3 505 end
a1674f0b 506 printf " w=%d a+d=%d+%d", $g.pixel_width, $g.ascent, $g.descent
be996d82 507 # If not DEFAULT_FACE_ID
a1674f0b
EZ
508 if ($g.face_id != 0)
509 printf " face=%d", $g.face_id
1e99743b 510 end
a1674f0b
EZ
511 if ($g.voffset)
512 printf " vof=%d", $g.voffset
1e99743b 513 end
a1674f0b 514 if ($g.multibyte_p)
1e99743b
KS
515 printf " MB"
516 end
a1674f0b 517 if ($g.padding_p)
1e99743b
KS
518 printf " PAD"
519 end
a1674f0b 520 if ($g.glyph_not_available_p)
1e99743b
KS
521 printf " N/A"
522 end
a1674f0b 523 if ($g.overlaps_vertically_p)
1e99743b
KS
524 printf " OVL"
525 end
a1674f0b 526 if ($g.avoid_cursor_p)
cb4545ad
EZ
527 printf " AVOID"
528 end
a1674f0b 529 if ($g.left_box_line_p)
1e99743b
KS
530 printf " ["
531 end
a1674f0b 532 if ($g.right_box_line_p)
1e99743b
KS
533 printf " ]"
534 end
a1674f0b
EZ
535 if ($g.slice.img.x || $g.slice.img.y || $g.slice.img.width || $g.slice.img.height)
536 printf " slice=%d,%d,%d,%d" ,$g.slice.img.x, $g.slice.img.y, $g.slice.img.width, $g.slice.img.height
1e99743b
KS
537 end
538 printf "\n"
539end
540document pgx
541Pretty print a glyph structure.
89955f2e 542Takes one argument, a pointer to a glyph structure.
1e99743b
KS
543end
544
545define pg
546 set $pgidx = 0
547 pgx glyph
548end
549document pg
550Pretty print glyph structure glyph.
551end
552
553define pgi
554 set $pgidx = $arg0
555 pgx (&glyph[$pgidx])
556end
557document pgi
558Pretty print glyph structure glyph[I].
559Takes one argument, a integer I.
560end
561
562define pgn
563 set $pgidx = $pgidx + 1
564 pgx (&glyph[$pgidx])
565end
566document pgn
567Pretty print next glyph structure.
568end
569
570define pgrowx
571 set $row = $arg0
572 set $area = 0
573 set $xofs = $row->x
574 while ($area < 3)
575 set $used = $row->used[$area]
576 if ($used > 0)
577 set $gl0 = $row->glyphs[$area]
578 set $pgidx = 0
579 printf "%s: %d glyphs\n", ($area == 0 ? "LEFT" : $area == 2 ? "RIGHT" : "TEXT"), $used
580 while ($pgidx < $used)
581 printf "%3d %4d: ", $pgidx, $xofs
582 pgx $gl0[$pgidx]
583 set $xofs = $xofs + $gl0[$pgidx]->pixel_width
584 set $pgidx = $pgidx + 1
585 end
586 end
587 set $area = $area + 1
588 end
589end
590document pgrowx
591Pretty print all glyphs in a row structure.
592Takes one argument, a pointer to a row structure.
593end
594
595define pgrow
596 pgrowx row
597end
598document pgrow
599Pretty print all glyphs in row structure row.
600end
afca296c 601
be996d82
EZ
602define pgrowit
603 pgrowx it->glyph_row
604end
605document pgrowit
606Pretty print all glyphs in it->glyph_row.
607end
608
f866d742 609define prowlims
0416466c 610 printf "edges=(%d,%d),r2l=%d,cont=%d,trunc=(%d,%d),at_zv=%d\n", $arg0->minpos.charpos, $arg0->maxpos.charpos, $arg0->reversed_p, $arg0->continued_p, $arg0->truncated_on_left_p, $arg0->truncated_on_right_p, $arg0->ends_at_zv_p
f866d742
EZ
611end
612document prowlims
613Print important attributes of a glyph_row structure.
614Takes one argument, a pointer to a glyph_row structure.
615end
616
617define pmtxrows
618 set $mtx = $arg0
619 set $gl = $mtx->rows
0416466c
EZ
620 set $glend = $mtx->rows + $mtx->nrows - 1
621 set $i = 0
f866d742 622 while ($gl < $glend)
0416466c 623 printf "%d: ", $i
f866d742
EZ
624 prowlims $gl
625 set $gl = $gl + 1
0416466c 626 set $i = $i + 1
f866d742
EZ
627 end
628end
629document pmtxrows
630Print data about glyph rows in a glyph matrix.
631Takes one argument, a pointer to a glyph_matrix structure.
632end
633
a6ffc6a2 634define xtype
6b61353c
KH
635 xgettype $
636 output $type
637 echo \n
638 if $type == Lisp_Misc
639 xmisctype
640 else
641 if $type == Lisp_Vectorlike
642 xvectype
643 end
644 end
a6ffc6a2 645end
e065a56e 646document xtype
ba1e23bf 647Print the type of $, assuming it is an Emacs Lisp value.
3fe8bda5 648If the first type printed is Lisp_Vector or Lisp_Misc,
6b61353c 649a second line gives the more precise type.
3fe8bda5
RS
650end
651
652define xvectype
6b61353c 653 xgetptr $
cc7245e4 654 set $size = ((struct Lisp_Vector *) $ptr)->header.size
c20fdd9e
PE
655 if ($size & PSEUDOVECTOR_FLAG)
656 output (enum pvec_type) (($size & PVEC_TYPE_MASK) >> PSEUDOVECTOR_SIZE_BITS)
657 else
658 output $size & ~ARRAY_MARK_FLAG
659 end
6b61353c 660 echo \n
3fe8bda5
RS
661end
662document xvectype
89955f2e
NR
663Print the size or vector subtype of $.
664This command assumes that $ is a vector or pseudovector.
3fe8bda5
RS
665end
666
667define xmisctype
6b61353c
KH
668 xgetptr $
669 output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
670 echo \n
3fe8bda5
RS
671end
672document xmisctype
2d5ed88d 673Assume that $ is some misc type and print its specific type.
e065a56e 674end
a6ffc6a2
JB
675
676define xint
6b61353c
KH
677 xgetint $
678 print $int
a6ffc6a2 679end
e065a56e 680document xint
2d5ed88d 681Print $ as an Emacs Lisp integer. This gets the sign right.
e065a56e 682end
a6ffc6a2
JB
683
684define xptr
6b61353c
KH
685 xgetptr $
686 print (void *) $ptr
a6ffc6a2 687end
e065a56e 688document xptr
2d5ed88d 689Print the pointer portion of an Emacs Lisp value in $.
e065a56e 690end
a6ffc6a2 691
a6ffc6a2 692define xmarker
6b61353c
KH
693 xgetptr $
694 print (struct Lisp_Marker *) $ptr
a6ffc6a2 695end
e065a56e 696document xmarker
2d5ed88d
EZ
697Print $ as a marker pointer.
698This command assumes that $ is an Emacs Lisp marker value.
e065a56e 699end
a6ffc6a2 700
a6a3acf0 701define xoverlay
6b61353c
KH
702 xgetptr $
703 print (struct Lisp_Overlay *) $ptr
a6a3acf0
KH
704end
705document xoverlay
89955f2e
NR
706Print $ as a overlay pointer.
707This command assumes that $ is an Emacs Lisp overlay value.
a6a3acf0
KH
708end
709
710define xmiscfree
6b61353c
KH
711 xgetptr $
712 print (struct Lisp_Free *) $ptr
a6a3acf0
KH
713end
714document xmiscfree
89955f2e
NR
715Print $ as a misc free-cell pointer.
716This command assumes that $ is an Emacs Lisp Misc value.
a6a3acf0
KH
717end
718
a6ffc6a2 719define xsymbol
cfcde636
KS
720 set $sym = $
721 xgetptr $sym
6b61353c 722 print (struct Lisp_Symbol *) $ptr
cfcde636 723 xprintsym $sym
6b61353c 724 echo \n
a6ffc6a2 725end
e065a56e
JB
726document xsymbol
727Print the name and address of the symbol $.
ba1e23bf 728This command assumes that $ is an Emacs Lisp symbol value.
e065a56e 729end
a6ffc6a2
JB
730
731define xstring
6b61353c
KH
732 xgetptr $
733 print (struct Lisp_String *) $ptr
0001e968 734 xprintstr $
6b61353c 735 echo \n
a6ffc6a2 736end
a6ffc6a2 737document xstring
e065a56e 738Print the contents and address of the string $.
ba1e23bf 739This command assumes that $ is an Emacs Lisp string value.
a6ffc6a2
JB
740end
741
742define xvector
6b61353c
KH
743 xgetptr $
744 print (struct Lisp_Vector *) $ptr
1781b9e9 745 output ($->header.size > 50) ? 0 : ($->contents[0])@($->header.size & ~ARRAY_MARK_FLAG)
ef15f270 746echo \n
a6ffc6a2 747end
a6ffc6a2 748document xvector
e065a56e 749Print the contents and address of the vector $.
ba1e23bf 750This command assumes that $ is an Emacs Lisp vector value.
a6ffc6a2
JB
751end
752
14a8902a 753define xprocess
6b61353c
KH
754 xgetptr $
755 print (struct Lisp_Process *) $ptr
756 output *$
757 echo \n
14a8902a
RS
758end
759document xprocess
89955f2e
NR
760Print the address of the struct Lisp_process to which $ points.
761This command assumes that $ is a Lisp_Object.
14a8902a
RS
762end
763
ec558adc 764define xframe
6b61353c
KH
765 xgetptr $
766 print (struct frame *) $ptr
26d16b35 767 xgetptr $->name
28c1e1ca
KS
768 set $ptr = (struct Lisp_String *) $ptr
769 xprintstr $ptr
770 echo \n
a6ffc6a2 771end
ec558adc 772document xframe
2d5ed88d
EZ
773Print $ as a frame pointer.
774This command assumes $ is an Emacs Lisp frame value.
e065a56e 775end
a6ffc6a2 776
14a8902a 777define xcompiled
6b61353c
KH
778 xgetptr $
779 print (struct Lisp_Vector *) $ptr
cc7245e4 780 output ($->contents[0])@($->header.size & 0xff)
14a8902a
RS
781end
782document xcompiled
89955f2e
NR
783Print $ as a compiled function pointer.
784This command assumes that $ is an Emacs Lisp compiled value.
14a8902a
RS
785end
786
787define xwindow
6b61353c
KH
788 xgetptr $
789 print (struct window *) $ptr
25d34643 790 set $window = (struct window *) $ptr
26d16b35 791 xgetint $window->total_cols
25d34643 792 set $width=$int
26d16b35 793 xgetint $window->total_lines
25d34643 794 set $height=$int
26d16b35 795 xgetint $window->left_col
25d34643 796 set $left=$int
26d16b35 797 xgetint $window->top_line
25d34643
RS
798 set $top=$int
799 printf "%dx%d+%d+%d\n", $width, $height, $left, $top
14a8902a
RS
800end
801document xwindow
802Print $ as a window pointer, assuming it is an Emacs Lisp window value.
803Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
804end
805
029c56f6 806define xwinconfig
6b61353c
KH
807 xgetptr $
808 print (struct save_window_data *) $ptr
a6a3acf0 809end
029c56f6 810document xwinconfig
89955f2e
NR
811Print $ as a window configuration pointer.
812This command assumes that $ is an Emacs Lisp window configuration value.
a6a3acf0
KH
813end
814
14a8902a 815define xsubr
6b61353c
KH
816 xgetptr $
817 print (struct Lisp_Subr *) $ptr
818 output *$
819 echo \n
a6a3acf0 820end
14a8902a
RS
821document xsubr
822Print the address of the subr which the Lisp_Object $ points to.
823end
824
825define xchartable
6b61353c
KH
826 xgetptr $
827 print (struct Lisp_Char_Table *) $ptr
828 printf "Purpose: "
829 xprintsym $->purpose
cc7245e4 830 printf " %d extra slots", ($->header.size & 0x1ff) - 68
6b61353c 831 echo \n
14a8902a
RS
832end
833document xchartable
834Print the address of the char-table $, and its purpose.
835This command assumes that $ is an Emacs Lisp char-table value.
836end
837
d1da276f
EZ
838define xsubchartable
839 xgetptr $
840 print (struct Lisp_Sub_Char_Table *) $ptr
841 xgetint $->depth
842 set $depth = $int
843 xgetint $->min_char
844 printf "Depth: %d, Min char: %d (0x%x)\n", $depth, $int, $int
845end
846document xsubchartable
847Print the address of the sub-char-table $, its depth and min-char.
848This command assumes that $ is an Emacs Lisp sub-char-table value.
849end
850
14a8902a 851define xboolvector
6b61353c
KH
852 xgetptr $
853 print (struct Lisp_Bool_Vector *) $ptr
1781b9e9 854 output ($->size > 256) ? 0 : ($->data[0])@(($->size + BOOL_VECTOR_BITS_PER_CHAR - 1)/ BOOL_VECTOR_BITS_PER_CHAR)
6b61353c 855 echo \n
14a8902a
RS
856end
857document xboolvector
858Print the contents and address of the bool-vector $.
859This command assumes that $ is an Emacs Lisp bool-vector value.
860end
861
862define xbuffer
6b61353c
KH
863 xgetptr $
864 print (struct buffer *) $ptr
c40f8d15 865 xgetptr $->name_
6b61353c
KH
866 output ((struct Lisp_String *) $ptr)->data
867 echo \n
14a8902a
RS
868end
869document xbuffer
2d5ed88d
EZ
870Set $ as a buffer pointer and the name of the buffer.
871This command assumes $ is an Emacs Lisp buffer value.
a6a3acf0
KH
872end
873
3266f62b 874define xhashtable
6b61353c
KH
875 xgetptr $
876 print (struct Lisp_Hash_Table *) $ptr
3266f62b
GM
877end
878document xhashtable
89955f2e
NR
879Set $ as a hash table pointer.
880This command assumes that $ is an Emacs Lisp hash table value.
3266f62b
GM
881end
882
a6ffc6a2 883define xcons
6b61353c
KH
884 xgetptr $
885 print (struct Lisp_Cons *) $ptr
886 output/x *$
887 echo \n
a6ffc6a2 888end
e065a56e 889document xcons
2d5ed88d 890Print the contents of $ as an Emacs Lisp cons.
e065a56e 891end
a6ffc6a2 892
6f493884 893define nextcons
26d16b35 894 p $.u.cdr
6b61353c 895 xcons
6f493884
RS
896end
897document nextcons
898Print the contents of the next cell in a list.
89955f2e 899This command assumes that the last thing you printed was a cons cell contents
6f493884
RS
900(type struct Lisp_Cons) or a pointer to one.
901end
a6ffc6a2 902define xcar
6b61353c
KH
903 xgetptr $
904 xgettype $
26d16b35 905 print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
a6ffc6a2 906end
e065a56e 907document xcar
2d5ed88d 908Assume that $ is an Emacs Lisp pair and print its car.
e065a56e 909end
a6ffc6a2
JB
910
911define xcdr
6b61353c
KH
912 xgetptr $
913 xgettype $
26d16b35 914 print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0)
a6ffc6a2 915end
e065a56e 916document xcdr
2d5ed88d 917Assume that $ is an Emacs Lisp pair and print its cdr.
e065a56e 918end
a6ffc6a2 919
28c1e1ca
KS
920define xlist
921 xgetptr $
922 set $cons = (struct Lisp_Cons *) $ptr
923 xgetptr Qnil
924 set $nil = $ptr
925 set $i = 0
926 while $cons != $nil && $i < 10
26d16b35 927 p/x $cons->car
28c1e1ca 928 xpr
26d16b35 929 xgetptr $cons->u.cdr
28c1e1ca
KS
930 set $cons = (struct Lisp_Cons *) $ptr
931 set $i = $i + 1
932 printf "---\n"
933 end
934 if $cons == $nil
935 printf "nil\n"
936 else
937 printf "...\n"
938 p $ptr
939 end
940end
941document xlist
942Print $ assuming it is a list.
943end
944
df86e57e 945define xfloat
6b61353c 946 xgetptr $
b4483658 947 print ((struct Lisp_Float *) $ptr)->u.data
df86e57e
JB
948end
949document xfloat
950Print $ assuming it is a lisp floating-point number.
951end
952
b2367490 953define xscrollbar
6b61353c
KH
954 xgetptr $
955 print (struct scrollbar *) $ptr
b2367490
JB
956output *$
957echo \n
958end
dec5f4e3 959document xscrollbar
b2367490
JB
960Print $ as a scrollbar pointer.
961end
962
28c1e1ca
KS
963define xpr
964 xtype
646b5f55
AS
965 if $type == Lisp_Int0 || $type == Lisp_Int1
966 xint
28c1e1ca
KS
967 end
968 if $type == Lisp_Symbol
969 xsymbol
970 end
971 if $type == Lisp_String
972 xstring
973 end
974 if $type == Lisp_Cons
975 xcons
976 end
977 if $type == Lisp_Float
978 xfloat
979 end
980 if $type == Lisp_Misc
981 set $misc = (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
982 if $misc == Lisp_Misc_Free
983 xmiscfree
984 end
28c1e1ca
KS
985 if $misc == Lisp_Misc_Marker
986 xmarker
987 end
28c1e1ca
KS
988 if $misc == Lisp_Misc_Overlay
989 xoverlay
990 end
28c1e1ca
KS
991# if $misc == Lisp_Misc_Save_Value
992# xsavevalue
993# end
994 end
995 if $type == Lisp_Vectorlike
cc7245e4 996 set $size = ((struct Lisp_Vector *) $ptr)->header.size
1781b9e9 997 if ($size & PSEUDOVECTOR_FLAG)
c20fdd9e 998 set $vec = (enum pvec_type) (($size & PVEC_TYPE_MASK) >> PSEUDOVECTOR_SIZE_BITS)
28c1e1ca
KS
999 if $vec == PVEC_NORMAL_VECTOR
1000 xvector
1001 end
1002 if $vec == PVEC_PROCESS
1003 xprocess
1004 end
1005 if $vec == PVEC_FRAME
1006 xframe
1007 end
1008 if $vec == PVEC_COMPILED
1009 xcompiled
1010 end
1011 if $vec == PVEC_WINDOW
1012 xwindow
1013 end
1014 if $vec == PVEC_WINDOW_CONFIGURATION
1015 xwinconfig
1016 end
1017 if $vec == PVEC_SUBR
1018 xsubr
1019 end
1020 if $vec == PVEC_CHAR_TABLE
1021 xchartable
1022 end
1023 if $vec == PVEC_BOOL_VECTOR
1024 xboolvector
1025 end
1026 if $vec == PVEC_BUFFER
1027 xbuffer
1028 end
1029 if $vec == PVEC_HASH_TABLE
1030 xhashtable
1031 end
1032 else
1033 xvector
1034 end
1035 end
1036end
1037document xpr
1038Print $ as a lisp object of any type.
1039end
1040
0001e968 1041define xprintstr
d3332249 1042 set $data = (char *) $arg0->data
1781b9e9 1043 output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~ARRAY_MARK_FLAG : $arg0->size_byte)
0001e968
SM
1044end
1045
24b4d1bc 1046define xprintsym
6b61353c
KH
1047 xgetptr $arg0
1048 set $sym = (struct Lisp_Symbol *) $ptr
c644523b 1049 xgetptr $sym->name
6b61353c 1050 set $sym_name = (struct Lisp_String *) $ptr
0001e968 1051 xprintstr $sym_name
24b4d1bc
GM
1052end
1053document xprintsym
1054 Print argument as a symbol.
1055end
1056
d5fb9ac8 1057define xcoding
1781b9e9
PE
1058 set $tmp = (struct Lisp_Hash_Table *) ((Vcoding_system_hash_table & VALMASK) | DATA_SEG_BITS)
1059 set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & VALMASK) | DATA_SEG_BITS)
d5fb9ac8
KH
1060 set $name = $tmp->contents[$arg0 * 2]
1061 print $name
1062 pr
1063 print $tmp->contents[$arg0 * 2 + 1]
1064 pr
1065end
1066document xcoding
8f924df7 1067 Print the name and attributes of coding system that has ID (argument).
d5fb9ac8
KH
1068end
1069
1070define xcharset
1781b9e9
PE
1071 set $tmp = (struct Lisp_Hash_Table *) ((Vcharset_hash_table & VALMASK) | DATA_SEG_BITS)
1072 set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & VALMASK) | DATA_SEG_BITS)
af800dc0 1073 p $tmp->contents[charset_table[$arg0].hash_index * 2]
d5fb9ac8
KH
1074 pr
1075end
1076document xcharset
8f924df7 1077 Print the name of charset that has ID (argument).
d5fb9ac8
KH
1078end
1079
9e067dbc
KH
1080define xfontset
1081 xgetptr $
1082 set $tbl = (struct Lisp_Char_Table *) $ptr
1083 print $tbl
1084 xgetint $tbl->extras[0]
1085 printf " ID:%d", $int
1086 xgettype $tbl->extras[1]
1087 xgetptr $tbl->extras[1]
1088 if $type == Lisp_String
1089 set $ptr = (struct Lisp_String *) $ptr
1090 printf " Name:"
1091 xprintstr $ptr
1092 else
1093 xgetptr $tbl->extras[2]
1094 set $ptr = (struct Lisp_Char_Table *) $ptr
1095 xgetptr $ptr->extras[1]
1096 set $ptr = (struct Lisp_String *) $ptr
1097 printf " Realized from:"
1098 xprintstr $ptr
1099 end
1100 echo \n
1101end
1102
322081f1
KH
1103define xfont
1104 xgetptr $
cc7245e4 1105 set $size = (((struct Lisp_Vector *) $ptr)->header.size & 0x1FF)
322081f1
KH
1106 if $size == FONT_SPEC_MAX
1107 print (struct font_spec *) $ptr
1108 else
1109 if $size == FONT_ENTITY_MAX
1110 print (struct font_entity *) $ptr
1111 else
1112 print (struct font *) $ptr
1113 end
1114 end
1115end
1116document xfont
1117Print $ assuming it is a list font (font-spec, font-entity, or font-object).
1118end
1119
24b4d1bc
GM
1120define xbacktrace
1121 set $bt = backtrace_list
177c0ea7 1122 while $bt
b43d62ae 1123 xgettype ($bt->function)
3176a27e 1124 if $type == Lisp_Symbol
b43d62ae 1125 xprintsym ($bt->function)
c51842ec 1126 printf " (0x%x)\n", $bt->args
3176a27e 1127 else
b43d62ae 1128 xgetptr $bt->function
cf07311b 1129 printf "0x%x ", $ptr
3176a27e 1130 if $type == Lisp_Vectorlike
b43d62ae 1131 xgetptr ($bt->function)
cc7245e4 1132 set $size = ((struct Lisp_Vector *) $ptr)->header.size
c20fdd9e
PE
1133 if ($size & PSEUDOVECTOR_FLAG)
1134 output (enum pvec_type) (($size & PVEC_TYPE_MASK) >> PSEUDOVECTOR_SIZE_BITS)
1135 else
1136 output $size & ~ARRAY_MARK_FLAG
1137 end
3176a27e
GM
1138 else
1139 printf "Lisp type %d", $type
1140 end
1141 echo \n
1142 end
24b4d1bc
GM
1143 set $bt = $bt->next
1144 end
1145end
1146document xbacktrace
1147 Print a backtrace of Lisp function calls from backtrace_list.
177c0ea7 1148 Set a breakpoint at Fsignal and call this to see from where
3176a27e 1149 an error was signaled.
24b4d1bc
GM
1150end
1151
8b058d44
EZ
1152define xprintbytestr
1153 set $data = (char *) $arg0->data
1154 printf "Bytecode: "
1781b9e9 1155 output/u ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~ARRAY_MARK_FLAG : $arg0->size_byte)
8b058d44
EZ
1156end
1157document xprintbytestr
1158 Print a string of byte code.
1159end
1160
1161define xwhichsymbols
1162 set $output_debug = print_output_debug_flag
1163 set print_output_debug_flag = 0
6b1319ce 1164 call safe_debug_print (which_symbols ($arg0, $arg1))
8b058d44 1165 set print_output_debug_flag = $output_debug
28c1e1ca 1166end
8b058d44 1167document xwhichsymbols
89955f2e 1168 Print symbols which references a given lisp object
28c1e1ca 1169 either as its symbol value or symbol function.
8b058d44
EZ
1170 Call with two arguments: the lisp object and the
1171 maximum number of symbols referencing it to produce.
28c1e1ca
KS
1172end
1173
1174define xbytecode
1175 set $bt = byte_stack_list
1176 while $bt
8b058d44
EZ
1177 xgetptr $bt->byte_string
1178 set $ptr = (struct Lisp_String *) $ptr
1179 xprintbytestr $ptr
1180 printf "\n0x%x => ", $bt->byte_string
1181 xwhichsymbols $bt->byte_string 5
28c1e1ca
KS
1182 set $bt = $bt->next
1183 end
1184end
1185document xbytecode
1186 Print a backtrace of the byte code stack.
1187end
1188
338fa84a
KS
1189# Show Lisp backtrace after normal backtrace.
1190define hookpost-backtrace
1191 set $bt = backtrace_list
1192 if $bt
1193 echo \n
1194 echo Lisp Backtrace:\n
1195 xbacktrace
1196 end
1197end
1198
6c5d0c52
KS
1199# Flush display (X only)
1200define ff
1201 set x_flush (0)
1202end
1203document ff
1204Flush pending X window display updates to screen.
1205Works only when an inferior emacs is executing.
1206end
1207
1208
e065a56e 1209set print pretty on
df86e57e 1210set print sevenbit-strings
a6ffc6a2 1211
e5d77022 1212show environment DISPLAY
6f5d1a4f 1213show environment TERM
e5d77022 1214
d41e491e 1215# When debugging, it is handy to be able to "return" from
5101529e
EZ
1216# terminate_due_to_signal when an assertion failure is non-fatal.
1217break terminate_due_to_signal
dd878ee1 1218
feaf060a
EZ
1219# x_error_quitter is defined only on X. But window-system is set up
1220# only at run time, during Emacs startup, so we need to defer setting
1221# the breakpoint. init_sys_modes is the first function called on
1222# every platform after init_display, where window-system is set.
1223tbreak init_sys_modes
1224commands
1225 silent
2787bba3 1226 xgetptr globals.f_Vinitial_window_system
913645cd 1227 set $tem = (struct Lisp_Symbol *) $ptr
c644523b 1228 xgetptr $tem->name
913645cd
EZ
1229 set $tem = (struct Lisp_String *) $ptr
1230 set $tem = (char *) $tem->data
feaf060a
EZ
1231 # If we are running in synchronous mode, we want a chance to look
1232 # around before Emacs exits. Perhaps we should put the break
1233 # somewhere else instead...
913645cd 1234 if $tem[0] == 'x' && $tem[1] == '\0'
2d90e492 1235 break x_error_quitter
913645cd 1236 end
feaf060a 1237 continue
dd878ee1 1238end