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