Mercurial > hg > xemacs-beta
comparison src/redisplay.c @ 406:b8cc9ab3f761 r21-2-33
Import from CVS: tag r21-2-33
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:17:09 +0200 |
parents | 2f8bb876ab1d |
children | 501cfd01ee6d |
comparison
equal
deleted
inserted
replaced
405:0e08f63c74d2 | 406:b8cc9ab3f761 |
---|---|
448 | 448 |
449 Lisp_Object Vwindow_size_change_functions; | 449 Lisp_Object Vwindow_size_change_functions; |
450 Lisp_Object Vwindow_scroll_functions; | 450 Lisp_Object Vwindow_scroll_functions; |
451 Lisp_Object Qredisplay_end_trigger_functions, Vredisplay_end_trigger_functions; | 451 Lisp_Object Qredisplay_end_trigger_functions, Vredisplay_end_trigger_functions; |
452 | 452 |
453 Lisp_Object Qbuffer_list_changed_hook, Vbuffer_list_changed_hook; | |
454 | |
455 | |
453 #define INHIBIT_REDISPLAY_HOOKS /* #### Until we've thought about | 456 #define INHIBIT_REDISPLAY_HOOKS /* #### Until we've thought about |
454 this more. */ | 457 this more. */ |
455 #ifndef INHIBIT_REDISPLAY_HOOKS | 458 #ifndef INHIBIT_REDISPLAY_HOOKS |
456 /* #### Chuck says: I think this needs more thought. | 459 /* #### Chuck says: I think this needs more thought. |
457 Think about this for 19.14. */ | 460 Think about this for 19.14. */ |
802 | 805 |
803 gb.extent = Qnil; | 806 gb.extent = Qnil; |
804 gb.glyph = Vhscroll_glyph; | 807 gb.glyph = Vhscroll_glyph; |
805 { | 808 { |
806 int oldpixpos = data->pixpos; | 809 int oldpixpos = data->pixpos; |
807 retval = add_glyph_rune (data, &gb, BEGIN_GLYPHS, 1, | 810 retval = add_glyph_rune (data, &gb, BEGIN_GLYPHS, 0, |
808 GLYPH_CACHEL (XWINDOW (data->window), | 811 GLYPH_CACHEL (XWINDOW (data->window), |
809 HSCROLL_GLYPH_INDEX)); | 812 HSCROLL_GLYPH_INDEX)); |
810 data->hscroll_glyph_width_adjust = | 813 data->hscroll_glyph_width_adjust = |
811 data->pixpos - oldpixpos - space_width (XWINDOW (data->window)); | 814 data->pixpos - oldpixpos - space_width (XWINDOW (data->window)); |
812 } | 815 } |
922 bytecount_to_charcount (XSTRING_DATA (data->string), data->bi_bufpos); | 925 bytecount_to_charcount (XSTRING_DATA (data->string), data->bi_bufpos); |
923 } | 926 } |
924 else if (data->is_modeline) | 927 else if (data->is_modeline) |
925 crb->bufpos = data->modeline_charpos; | 928 crb->bufpos = data->modeline_charpos; |
926 else | 929 else |
927 /* fuckme if this shouldn't be an abort. */ | 930 /* Text but not in buffer */ |
928 /* abort (); fuckme harder, this abort gets tripped quite often, | |
929 in propagation and whatnot. #### fixme */ | |
930 crb->bufpos = 0; | 931 crb->bufpos = 0; |
931 crb->type = RUNE_CHAR; | 932 crb->type = RUNE_CHAR; |
932 crb->object.chr.ch = data->font_is_bogus ? '~' : data->ch; | 933 crb->object.chr.ch = data->font_is_bogus ? '~' : data->ch; |
933 crb->endpos = 0; | 934 crb->endpos = 0; |
934 | 935 |
1540 /* A nil extent indicates a special glyph (ex. truncator). */ | 1541 /* A nil extent indicates a special glyph (ex. truncator). */ |
1541 if (NILP (gb->extent) | 1542 if (NILP (gb->extent) |
1542 || (pos_type == BEGIN_GLYPHS && | 1543 || (pos_type == BEGIN_GLYPHS && |
1543 extent_begin_glyph_layout (XEXTENT (gb->extent)) == GL_TEXT) | 1544 extent_begin_glyph_layout (XEXTENT (gb->extent)) == GL_TEXT) |
1544 || (pos_type == END_GLYPHS && | 1545 || (pos_type == END_GLYPHS && |
1545 extent_end_glyph_layout (XEXTENT (gb->extent)) == GL_TEXT)) | 1546 extent_end_glyph_layout (XEXTENT (gb->extent)) == GL_TEXT) |
1547 || pos_type == LEFT_GLYPHS || pos_type == RIGHT_GLYPHS) | |
1546 { | 1548 { |
1547 struct rune rb; | 1549 struct rune rb; |
1548 int width; | 1550 int width; |
1549 int xoffset = 0; | 1551 int xoffset = 0; |
1550 int ascent, descent; | 1552 int ascent, descent; |
1551 Lisp_Object baseline; | 1553 Lisp_Object baseline; |
1552 Lisp_Object face; | 1554 Lisp_Object face; |
1555 Lisp_Object instance; | |
1556 face_index findex; | |
1553 | 1557 |
1554 if (cachel) | 1558 if (cachel) |
1555 width = cachel->width; | 1559 width = cachel->width; |
1556 else | 1560 else |
1557 width = glyph_width (gb->glyph, data->window); | 1561 width = glyph_width (gb->glyph, data->window); |
1659 abort (); | 1663 abort (); |
1660 } | 1664 } |
1661 | 1665 |
1662 face = glyph_face (gb->glyph, data->window); | 1666 face = glyph_face (gb->glyph, data->window); |
1663 if (NILP (face)) | 1667 if (NILP (face)) |
1664 rb.findex = data->findex; | 1668 findex = data->findex; |
1665 else | 1669 else |
1666 rb.findex = get_builtin_face_cache_index (w, face); | 1670 findex = get_builtin_face_cache_index (w, face); |
1667 | 1671 |
1672 instance = glyph_image_instance (gb->glyph, data->window, | |
1673 ERROR_ME_NOT, 1); | |
1674 if (TEXT_IMAGE_INSTANCEP (instance)) | |
1675 { | |
1676 Lisp_Object string = XIMAGE_INSTANCE_TEXT_STRING (instance); | |
1677 face_index orig_findex = data->findex; | |
1678 Bytind orig_bufpos = data->bi_bufpos; | |
1679 Bytind orig_start_col_enabled = data->bi_start_col_enabled; | |
1680 | |
1681 data->findex = findex; | |
1682 data->bi_start_col_enabled = 0; | |
1683 if (!allow_cursor) | |
1684 data->bi_bufpos = 0; | |
1685 add_bufbyte_string_runes (data, XSTRING_DATA (string), | |
1686 XSTRING_LENGTH (string), 0); | |
1687 data->findex = orig_findex; | |
1688 data->bi_bufpos = orig_bufpos; | |
1689 data->bi_start_col_enabled = orig_start_col_enabled; | |
1690 return NULL; | |
1691 } | |
1692 | |
1693 rb.findex = findex; | |
1668 rb.xpos = data->pixpos; | 1694 rb.xpos = data->pixpos; |
1669 rb.width = width; | 1695 rb.width = width; |
1670 rb.bufpos = 0; /* glyphs are never "at" anywhere */ | 1696 rb.bufpos = 0; /* glyphs are never "at" anywhere */ |
1671 if (data->bi_endpos) | 1697 if (data->bi_endpos) |
1672 /* #### is this necessary at all? */ | 1698 /* #### is this necessary at all? */ |
1673 rb.endpos = bytind_to_bufpos (XBUFFER (WINDOW_BUFFER (w)), | 1699 rb.endpos = bytind_to_bufpos (XBUFFER (WINDOW_BUFFER (w)), |
1674 data->bi_endpos); | 1700 data->bi_endpos); |
1675 else | 1701 else |
1676 rb.endpos = 0; | 1702 rb.endpos = 0; |
1677 rb.type = RUNE_DGLYPH; | 1703 rb.type = RUNE_DGLYPH; |
1678 /* #### Ben sez: this is way bogus if the glyph is a string. | |
1679 You should not make the output routines have to cope with | |
1680 this. The string could contain Mule characters, or non- | |
1681 printable characters, or characters to be passed through | |
1682 the display table, or non-character objects (when this gets | |
1683 implemented), etc. Instead, this routine here should parse | |
1684 the string into a series of runes. */ | |
1685 rb.object.dglyph.glyph = gb->glyph; | 1704 rb.object.dglyph.glyph = gb->glyph; |
1686 rb.object.dglyph.extent = gb->extent; | 1705 rb.object.dglyph.extent = gb->extent; |
1687 rb.object.dglyph.xoffset = xoffset; | 1706 rb.object.dglyph.xoffset = xoffset; |
1688 | 1707 |
1689 if (allow_cursor) | 1708 if (allow_cursor) |
1882 Lisp_Object synch_minibuffers_value = | 1901 Lisp_Object synch_minibuffers_value = |
1883 symbol_value_in_buffer (Qsynchronize_minibuffers, w->buffer); | 1902 symbol_value_in_buffer (Qsynchronize_minibuffers, w->buffer); |
1884 | 1903 |
1885 dl->used_prop_data = 0; | 1904 dl->used_prop_data = 0; |
1886 dl->num_chars = 0; | 1905 dl->num_chars = 0; |
1906 dl->line_continuation = 0; | |
1887 | 1907 |
1888 xzero (data); | 1908 xzero (data); |
1889 data.ef = extent_fragment_new (w->buffer, f); | 1909 data.ef = extent_fragment_new (w->buffer, f); |
1890 | 1910 |
1891 /* These values are used by all of the rune addition routines. We add | 1911 /* These values are used by all of the rune addition routines. We add |
2472 /* The cursor can never be on the continuation glyph. */ | 2492 /* The cursor can never be on the continuation glyph. */ |
2473 data.cursor_type = NO_CURSOR; | 2493 data.cursor_type = NO_CURSOR; |
2474 | 2494 |
2475 /* data.bi_bufpos is already at the start of the next line. */ | 2495 /* data.bi_bufpos is already at the start of the next line. */ |
2476 | 2496 |
2497 dl->line_continuation = 1; | |
2477 gb.glyph = Vcontinuation_glyph; | 2498 gb.glyph = Vcontinuation_glyph; |
2478 cachel = GLYPH_CACHEL (w, CONT_GLYPH_INDEX); | 2499 cachel = GLYPH_CACHEL (w, CONT_GLYPH_INDEX); |
2479 } | 2500 } |
2480 | 2501 |
2481 add_glyph_rune (&data, &gb, BEGIN_GLYPHS, 1, cachel); | 2502 add_glyph_rune (&data, &gb, BEGIN_GLYPHS, 0, cachel); |
2482 | 2503 |
2483 if (truncate_win && data.bi_bufpos == BI_BUF_ZV (b) | 2504 if (truncate_win && data.bi_bufpos == BI_BUF_ZV (b) |
2484 && BI_BUF_FETCH_CHAR (b, prev_bytind (b, BI_BUF_ZV (b))) != '\n') | 2505 && BI_BUF_FETCH_CHAR (b, prev_bytind (b, BI_BUF_ZV (b))) != '\n') |
2485 /* #### Damn this losing shit. */ | 2506 /* #### Damn this losing shit. */ |
2486 data.bi_bufpos++; | 2507 data.bi_bufpos++; |
2724 { | 2745 { |
2725 glyph_block_dynarr *gbd = (side == LEFT_GLYPHS | 2746 glyph_block_dynarr *gbd = (side == LEFT_GLYPHS |
2726 ? dl->left_glyphs | 2747 ? dl->left_glyphs |
2727 : dl->right_glyphs); | 2748 : dl->right_glyphs); |
2728 int elt, end; | 2749 int elt, end; |
2729 int xpos = start; | |
2730 int reverse; | 2750 int reverse; |
2751 struct window *w = XWINDOW (window); | |
2752 struct frame *f = XFRAME (w->frame); | |
2753 struct device *d = XDEVICE (f->device); | |
2754 pos_data data; | |
2755 | |
2756 xzero (data); | |
2757 data.d = d; | |
2758 data.window = window; | |
2759 data.db = db; | |
2760 data.dl = dl; | |
2761 data.pixpos = start; | |
2762 data.cursor_type = NO_CURSOR; | |
2763 data.cursor_x = -1; | |
2764 data.last_charset = Qunbound; | |
2765 data.last_findex = DEFAULT_INDEX; | |
2766 data.result_str = Qnil; | |
2767 data.string = Qnil; | |
2768 data.new_ascent = dl->ascent; | |
2769 data.new_descent = dl->descent; | |
2731 | 2770 |
2732 if ((layout == GL_WHITESPACE && side == LEFT_GLYPHS) | 2771 if ((layout == GL_WHITESPACE && side == LEFT_GLYPHS) |
2733 || (layout == GL_INSIDE_MARGIN && side == RIGHT_GLYPHS)) | 2772 || (layout == GL_INSIDE_MARGIN && side == RIGHT_GLYPHS)) |
2734 { | 2773 { |
2735 reverse = 1; | 2774 reverse = 1; |
2754 ((side == LEFT_GLYPHS && | 2793 ((side == LEFT_GLYPHS && |
2755 extent_begin_glyph_layout (XEXTENT (gb->extent)) == layout) | 2794 extent_begin_glyph_layout (XEXTENT (gb->extent)) == layout) |
2756 || (side == RIGHT_GLYPHS && | 2795 || (side == RIGHT_GLYPHS && |
2757 extent_end_glyph_layout (XEXTENT (gb->extent)) == layout))) | 2796 extent_end_glyph_layout (XEXTENT (gb->extent)) == layout))) |
2758 { | 2797 { |
2759 struct rune rb; | 2798 data.findex = gb->findex; |
2760 | 2799 data.max_pixpos = data.pixpos + gb->width; |
2761 rb.width = gb->width; | 2800 add_glyph_rune (&data, gb, side, 0, NULL); |
2762 rb.findex = gb->findex; | |
2763 rb.xpos = xpos; | |
2764 rb.bufpos = -1; | |
2765 rb.endpos = 0; | |
2766 rb.type = RUNE_DGLYPH; | |
2767 rb.object.dglyph.glyph = gb->glyph; | |
2768 rb.object.dglyph.extent = gb->extent; | |
2769 rb.object.dglyph.xoffset = 0; | |
2770 rb.cursor_type = CURSOR_OFF; | |
2771 | |
2772 Dynarr_add (db->runes, rb); | |
2773 xpos += rb.width; | |
2774 count--; | 2801 count--; |
2775 gb->active = 0; | 2802 gb->active = 0; |
2776 | |
2777 if (glyph_contrib_p (gb->glyph, window)) | |
2778 { | |
2779 unsigned short ascent, descent; | |
2780 Lisp_Object baseline = glyph_baseline (gb->glyph, window); | |
2781 | |
2782 ascent = glyph_ascent (gb->glyph, window); | |
2783 descent = glyph_descent (gb->glyph, window); | |
2784 | |
2785 /* A pixmap that has not had a baseline explicitly set. | |
2786 We use the existing ascent / descent ratio of the | |
2787 line. */ | |
2788 if (NILP (baseline)) | |
2789 { | |
2790 int gheight = ascent + descent; | |
2791 int line_height = dl->ascent + dl->descent; | |
2792 int pix_ascent, pix_descent; | |
2793 | |
2794 pix_descent = (int) (gheight * dl->descent) / line_height; | |
2795 pix_ascent = gheight - pix_descent; | |
2796 | |
2797 dl->ascent = max ((int) dl->ascent, pix_ascent); | |
2798 dl->descent = max ((int) dl->descent, pix_descent); | |
2799 } | |
2800 | |
2801 /* A string so determine contribution normally. */ | |
2802 else if (EQ (baseline, Qt)) | |
2803 { | |
2804 dl->ascent = max (dl->ascent, ascent); | |
2805 dl->descent = max (dl->descent, descent); | |
2806 } | |
2807 | |
2808 /* A pixmap with an explicitly set baseline. We determine the | |
2809 contribution here. */ | |
2810 else if (INTP (baseline)) | |
2811 { | |
2812 int height = ascent + descent; | |
2813 int pix_ascent, pix_descent; | |
2814 | |
2815 pix_ascent = height * XINT (baseline) / 100; | |
2816 pix_descent = height - pix_ascent; | |
2817 | |
2818 dl->ascent = max ((int) dl->ascent, pix_ascent); | |
2819 dl->descent = max ((int) dl->descent, pix_descent); | |
2820 } | |
2821 | |
2822 /* Otherwise something is screwed up. */ | |
2823 else | |
2824 abort (); | |
2825 } | |
2826 } | 2803 } |
2827 | 2804 |
2828 (reverse ? elt-- : elt++); | 2805 (reverse ? elt-- : elt++); |
2829 } | 2806 } |
2830 | 2807 |
2831 return xpos; | 2808 if (data.max_pixmap_height) |
2809 { | |
2810 int height = data.new_ascent + data.new_descent; | |
2811 int pix_ascent, pix_descent; | |
2812 | |
2813 pix_descent = data.max_pixmap_height * data.new_descent / height; | |
2814 pix_ascent = data.max_pixmap_height - pix_descent; | |
2815 data.new_ascent = max (data.new_ascent, pix_ascent); | |
2816 data.new_descent = max (data.new_descent, pix_descent); | |
2817 } | |
2818 | |
2819 dl->ascent = data.new_ascent; | |
2820 dl->descent = data.new_descent; | |
2821 | |
2822 return data.pixpos; | |
2832 } | 2823 } |
2833 | 2824 |
2834 /* Add a blank to a margin display block. */ | 2825 /* Add a blank to a margin display block. */ |
2835 | 2826 |
2836 static void | 2827 static void |
3554 int elt; | 3545 int elt; |
3555 Bytecount len; | 3546 Bytecount len; |
3556 Bufbyte *strdata; | 3547 Bufbyte *strdata; |
3557 struct buffer *buf = XBUFFER (WINDOW_BUFFER (w)); | 3548 struct buffer *buf = XBUFFER (WINDOW_BUFFER (w)); |
3558 | 3549 |
3550 in_modeline_generation = 1; | |
3551 | |
3559 detach_all_extents (result_str); | 3552 detach_all_extents (result_str); |
3560 resize_string (XSTRING (result_str), -1, | 3553 resize_string (XSTRING (result_str), -1, |
3561 data.bytepos - XSTRING_LENGTH (result_str)); | 3554 data.bytepos - XSTRING_LENGTH (result_str)); |
3562 | 3555 |
3563 strdata = XSTRING_DATA (result_str); | 3556 strdata = XSTRING_DATA (result_str); |
3590 (XEXTENT (child), | 3583 (XEXTENT (child), |
3591 Dynarr_at (formatted_string_extent_start_dynarr, elt), | 3584 Dynarr_at (formatted_string_extent_start_dynarr, elt), |
3592 Dynarr_at (formatted_string_extent_end_dynarr, elt), | 3585 Dynarr_at (formatted_string_extent_end_dynarr, elt), |
3593 result_str); | 3586 result_str); |
3594 } | 3587 } |
3588 | |
3589 in_modeline_generation = 0; | |
3595 } | 3590 } |
3596 } | 3591 } |
3597 | 3592 |
3598 /* Ensure that the given display line DL accurately represents the | 3593 /* Ensure that the given display line DL accurately represents the |
3599 modeline for the given window. */ | 3594 modeline for the given window. */ |
4365 displayed. */ | 4360 displayed. */ |
4366 int no_more_frags = 0; | 4361 int no_more_frags = 0; |
4367 | 4362 |
4368 dl->used_prop_data = 0; | 4363 dl->used_prop_data = 0; |
4369 dl->num_chars = 0; | 4364 dl->num_chars = 0; |
4365 dl->line_continuation = 0; | |
4370 | 4366 |
4371 /* set up faces to use for clearing areas, used by | 4367 /* set up faces to use for clearing areas, used by |
4372 output_display_line */ | 4368 output_display_line */ |
4373 dl->default_findex = default_face; | 4369 dl->default_findex = default_face; |
4374 if (default_face) | 4370 if (default_face) |
4757 /* The cursor can never be on the continuation glyph. */ | 4753 /* The cursor can never be on the continuation glyph. */ |
4758 data.cursor_type = NO_CURSOR; | 4754 data.cursor_type = NO_CURSOR; |
4759 | 4755 |
4760 /* data.bi_bufpos is already at the start of the next line. */ | 4756 /* data.bi_bufpos is already at the start of the next line. */ |
4761 | 4757 |
4758 dl->line_continuation = 1; | |
4762 gb.glyph = Vcontinuation_glyph; | 4759 gb.glyph = Vcontinuation_glyph; |
4763 cachel = GLYPH_CACHEL (w, CONT_GLYPH_INDEX); | 4760 cachel = GLYPH_CACHEL (w, CONT_GLYPH_INDEX); |
4764 } | 4761 } |
4765 | 4762 |
4766 if (end_glyph_width) | 4763 if (end_glyph_width) |
5595 | 5592 |
5596 assert (cdl->bufpos == ddl->bufpos); | 5593 assert (cdl->bufpos == ddl->bufpos); |
5597 assert (cdl->end_bufpos == ddl->end_bufpos); | 5594 assert (cdl->end_bufpos == ddl->end_bufpos); |
5598 assert (cdl->offset == ddl->offset); | 5595 assert (cdl->offset == ddl->offset); |
5599 | 5596 |
5600 /* If the last rune is already a continuation glyph, fail. | 5597 /* If the line continues to next display line, fail. */ |
5601 #### We should be able to handle this better. */ | 5598 if (ddl->line_continuation) |
5602 { | 5599 return 0; |
5603 struct display_block *db = get_display_block_from_line (ddl, TEXT); | |
5604 if (Dynarr_length (db->runes)) | |
5605 { | |
5606 struct rune *rb = | |
5607 Dynarr_atp (db->runes, Dynarr_length (db->runes) - 1); | |
5608 | |
5609 if (rb->type == RUNE_DGLYPH | |
5610 && EQ (rb->object.dglyph.glyph, Vcontinuation_glyph)) | |
5611 return 0; | |
5612 } | |
5613 } | |
5614 | 5600 |
5615 /* If the line was generated using propagation data, fail. */ | 5601 /* If the line was generated using propagation data, fail. */ |
5616 if (ddl->used_prop_data) | 5602 if (ddl->used_prop_data) |
5617 return 0; | 5603 return 0; |
5618 | 5604 |
5626 { | 5612 { |
5627 Dynarr_free (prop); | 5613 Dynarr_free (prop); |
5628 return 0; | 5614 return 0; |
5629 } | 5615 } |
5630 | 5616 |
5631 /* If the last rune is now a continuation glyph, fail. */ | 5617 /* If the line continues to next display line, fail. */ |
5632 { | 5618 if (ddl->line_continuation) |
5633 struct display_block *db = get_display_block_from_line (ddl, TEXT); | 5619 return 0; |
5634 if (Dynarr_length (db->runes)) | |
5635 { | |
5636 struct rune *rb = | |
5637 Dynarr_atp (db->runes, Dynarr_length (db->runes) - 1); | |
5638 | |
5639 if (rb->type == RUNE_DGLYPH | |
5640 && EQ (rb->object.dglyph.glyph, Vcontinuation_glyph)) | |
5641 return 0; | |
5642 } | |
5643 } | |
5644 | 5620 |
5645 /* If any line position parameters have changed or a | 5621 /* If any line position parameters have changed or a |
5646 cursor has disappeared or disappeared, fail. */ | 5622 cursor has disappeared or disappeared, fail. */ |
5647 if (cdl->ypos != ddl->ypos | 5623 if (cdl->ypos != ddl->ypos |
5648 || cdl->ascent != ddl->ascent | 5624 || cdl->ascent != ddl->ascent |
6306 int preempted; | 6282 int preempted; |
6307 | 6283 |
6308 REDISPLAY_PREEMPTION_CHECK; | 6284 REDISPLAY_PREEMPTION_CHECK; |
6309 if (preempted) | 6285 if (preempted) |
6310 return 1; | 6286 return 1; |
6287 } | |
6288 | |
6289 if (!internal_equal (f->old_buffer_alist, f->buffer_alist, 0)) | |
6290 { | |
6291 Lisp_Object frame; | |
6292 | |
6293 f->old_buffer_alist = Freplace_list (f->old_buffer_alist, | |
6294 f->buffer_alist); | |
6295 XSETFRAME (frame, f); | |
6296 va_run_hook_with_args (Qbuffer_list_changed_hook, 1, frame); | |
6311 } | 6297 } |
6312 | 6298 |
6313 /* Before we put a hold on frame size changes, attempt to process | 6299 /* Before we put a hold on frame size changes, attempt to process |
6314 any which are already pending. */ | 6300 any which are already pending. */ |
6315 if (f->size_change_pending) | 6301 if (f->size_change_pending) |
9270 defsymbol (&Qdisplay_warning_buffer, "display-warning-buffer"); | 9256 defsymbol (&Qdisplay_warning_buffer, "display-warning-buffer"); |
9271 defsymbol (&Qbar_cursor, "bar-cursor"); | 9257 defsymbol (&Qbar_cursor, "bar-cursor"); |
9272 defsymbol (&Qredisplay_end_trigger_functions, | 9258 defsymbol (&Qredisplay_end_trigger_functions, |
9273 "redisplay-end-trigger-functions"); | 9259 "redisplay-end-trigger-functions"); |
9274 defsymbol (&Qtop_bottom, "top-bottom"); | 9260 defsymbol (&Qtop_bottom, "top-bottom"); |
9261 defsymbol (&Qbuffer_list_changed_hook, "buffer-list-changed-hook"); | |
9275 | 9262 |
9276 DEFSUBR (Fredisplay_echo_area); | 9263 DEFSUBR (Fredisplay_echo_area); |
9277 DEFSUBR (Fredraw_frame); | 9264 DEFSUBR (Fredraw_frame); |
9278 DEFSUBR (Fredisplay_frame); | 9265 DEFSUBR (Fredisplay_frame); |
9279 DEFSUBR (Fredraw_device); | 9266 DEFSUBR (Fredraw_device); |
9421 Vbar_cursor = Qnil; | 9408 Vbar_cursor = Qnil; |
9422 | 9409 |
9423 #ifndef INHIBIT_REDISPLAY_HOOKS | 9410 #ifndef INHIBIT_REDISPLAY_HOOKS |
9424 xxDEFVAR_LISP ("pre-redisplay-hook", &Vpre_redisplay_hook /* | 9411 xxDEFVAR_LISP ("pre-redisplay-hook", &Vpre_redisplay_hook /* |
9425 Function or functions to run before every redisplay. | 9412 Function or functions to run before every redisplay. |
9426 Functions on this hook must be careful to avoid signalling errors! | |
9427 */ ); | 9413 */ ); |
9428 Vpre_redisplay_hook = Qnil; | 9414 Vpre_redisplay_hook = Qnil; |
9429 | 9415 |
9430 xxDEFVAR_LISP ("post-redisplay-hook", &Vpost_redisplay_hook /* | 9416 xxDEFVAR_LISP ("post-redisplay-hook", &Vpost_redisplay_hook /* |
9431 Function or functions to run after every redisplay. | 9417 Function or functions to run after every redisplay. |
9432 Functions on this hook must be careful to avoid signalling errors! | |
9433 */ ); | 9418 */ ); |
9434 Vpost_redisplay_hook = Qnil; | 9419 Vpost_redisplay_hook = Qnil; |
9435 #endif /* INHIBIT_REDISPLAY_HOOKS */ | 9420 #endif /* INHIBIT_REDISPLAY_HOOKS */ |
9421 | |
9422 DEFVAR_LISP ("buffer-list-changed-hook", &Vbuffer_list_changed_hook /* | |
9423 Function or functions to call when a frame's buffer list has changed. | |
9424 This is called during redisplay, before redisplaying each frame. | |
9425 Functions on this hook are called with one argument, the frame. | |
9426 */ ); | |
9427 Vbuffer_list_changed_hook = Qnil; | |
9436 | 9428 |
9437 DEFVAR_INT ("display-warning-tick", &display_warning_tick /* | 9429 DEFVAR_INT ("display-warning-tick", &display_warning_tick /* |
9438 Bump this to tell the C code to call `display-warning-buffer' | 9430 Bump this to tell the C code to call `display-warning-buffer' |
9439 at next redisplay. You should not normally change this; the function | 9431 at next redisplay. You should not normally change this; the function |
9440 `display-warning' automatically does this at appropriate times. | 9432 `display-warning' automatically does this at appropriate times. |