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