[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/xdisp.c
From: |
Kim F . Storm |
Subject: |
[Emacs-diffs] Changes to emacs/src/xdisp.c |
Date: |
Fri, 26 Nov 2004 09:44:58 -0500 |
Index: emacs/src/xdisp.c
diff -c emacs/src/xdisp.c:1.942 emacs/src/xdisp.c:1.943
*** emacs/src/xdisp.c:1.942 Wed Nov 24 11:29:46 2004
--- emacs/src/xdisp.c Fri Nov 26 14:38:55 2004
***************
*** 807,813 ****
/* Function prototypes. */
! static void setup_for_ellipsis P_ ((struct it *));
static void mark_window_display_accurate_1 P_ ((struct window *, int));
static int single_display_prop_string_p P_ ((Lisp_Object, Lisp_Object));
static int display_prop_string_p P_ ((Lisp_Object, Lisp_Object));
--- 807,813 ----
/* Function prototypes. */
! static void setup_for_ellipsis P_ ((struct it *, int));
static void mark_window_display_accurate_1 P_ ((struct window *, int));
static int single_display_prop_string_p P_ ((Lisp_Object, Lisp_Object));
static int display_prop_string_p P_ ((Lisp_Object, Lisp_Object));
***************
*** 3227,3233 ****
it->stack[it->sp - 1].display_ellipsis_p = display_ellipsis_p;
}
else if (display_ellipsis_p)
! setup_for_ellipsis (it);
}
}
--- 3227,3233 ----
it->stack[it->sp - 1].display_ellipsis_p = display_ellipsis_p;
}
else if (display_ellipsis_p)
! setup_for_ellipsis (it, 0);
}
}
***************
*** 3235,3248 ****
}
! /* Make iterator IT return `...' next. */
static void
! setup_for_ellipsis (it)
struct it *it;
{
! if (it->dp
! && VECTORP (DISP_INVIS_VECTOR (it->dp)))
{
struct Lisp_Vector *v = XVECTOR (DISP_INVIS_VECTOR (it->dp));
it->dpvec = v->contents;
--- 3235,3251 ----
}
! /* Make iterator IT return `...' next.
! Replaces LEN characters from buffer. */
static void
! setup_for_ellipsis (it, len)
struct it *it;
+ int len;
{
! /* Use the display table definition for `...'. Invalid glyphs
! will be handled by the method returning elements from dpvec. */
! if (it->dp && VECTORP (DISP_INVIS_VECTOR (it->dp)))
{
struct Lisp_Vector *v = XVECTOR (DISP_INVIS_VECTOR (it->dp));
it->dpvec = v->contents;
***************
*** 3255,3266 ****
it->dpend = default_invis_vector + 3;
}
! /* The ellipsis display does not replace the display of the
! character at the new position. Indicate this by setting
! IT->dpvec_char_len to zero. */
! it->dpvec_char_len = 0;
!
it->current.dpvec_index = 0;
it->method = next_element_from_display_vector;
}
--- 3258,3269 ----
it->dpend = default_invis_vector + 3;
}
! it->dpvec_char_len = len;
it->current.dpvec_index = 0;
+
+ /* Remember the current face id in case glyphs specify faces.
+ IT's face is restored in set_iterator_to_next. */
+ it->saved_face_id = it->face_id;
it->method = next_element_from_display_vector;
}
***************
*** 4048,4054 ****
/* If we have to display `...' for invisible text, set
the iterator up for that. */
if (display_ellipsis_p)
! setup_for_ellipsis (it);
}
else
{
--- 4051,4057 ----
/* If we have to display `...' for invisible text, set
the iterator up for that. */
if (display_ellipsis_p)
! setup_for_ellipsis (it, 0);
}
else
{
***************
*** 4840,4846 ****
we hit the end of what we iterate over. Performance note: the
function pointer `method' used here turns out to be faster than
using a sequence of if-statements. */
! int success_p = (*it->method) (it);
if (it->what == IT_CHARACTER)
{
--- 4843,4852 ----
we hit the end of what we iterate over. Performance note: the
function pointer `method' used here turns out to be faster than
using a sequence of if-statements. */
! int success_p;
!
! get_next:
! success_p = (*it->method) (it);
if (it->what == IT_CHARACTER)
{
***************
*** 4872,4885 ****
it->dpvec = v->contents;
it->dpend = v->contents + v->size;
it->current.dpvec_index = 0;
it->method = next_element_from_display_vector;
- success_p = get_next_display_element (it);
}
else
{
set_iterator_to_next (it, 0);
- success_p = get_next_display_element (it);
}
}
/* Translate control characters into `\003' or `^C' form.
--- 4878,4891 ----
it->dpvec = v->contents;
it->dpend = v->contents + v->size;
it->current.dpvec_index = 0;
+ it->saved_face_id = it->face_id;
it->method = next_element_from_display_vector;
}
else
{
set_iterator_to_next (it, 0);
}
+ goto get_next;
}
/* Translate control characters into `\003' or `^C' form.
***************
*** 4915,4920 ****
--- 4921,4927 ----
IT->ctl_chars with glyphs for what we have to
display. Then, set IT->dpvec to these glyphs. */
GLYPH g;
+ int ctl_len;
if (it->c < 128 && it->ctl_arrow_p)
{
***************
*** 4929,4942 ****
g = FAST_MAKE_GLYPH (it->c ^ 0100, 0);
XSETINT (it->ctl_chars[1], g);
!
! /* Set up IT->dpvec and return first character from it. */
! it->dpvec_char_len = it->len;
! it->dpvec = it->ctl_chars;
! it->dpend = it->dpvec + 2;
! it->current.dpvec_index = 0;
! it->method = next_element_from_display_vector;
! get_next_display_element (it);
}
else
{
--- 4936,4942 ----
g = FAST_MAKE_GLYPH (it->c ^ 0100, 0);
XSETINT (it->ctl_chars[1], g);
! ctl_len = 2;
}
else
{
***************
*** 4985,5000 ****
g = FAST_MAKE_GLYPH ((str[i] & 7) + '0', 0);
XSETINT (it->ctl_chars[i * 4 + 3], g);
}
!
! /* Set up IT->dpvec and return the first character
! from it. */
! it->dpvec_char_len = it->len;
! it->dpvec = it->ctl_chars;
! it->dpend = it->dpvec + len * 4;
! it->current.dpvec_index = 0;
! it->method = next_element_from_display_vector;
! get_next_display_element (it);
}
}
}
--- 4985,5001 ----
g = FAST_MAKE_GLYPH ((str[i] & 7) + '0', 0);
XSETINT (it->ctl_chars[i * 4 + 3], g);
}
! ctl_len = len * 4;
}
+
+ /* Set up IT->dpvec and return first character from it. */
+ it->dpvec_char_len = it->len;
+ it->dpvec = it->ctl_chars;
+ it->dpend = it->dpvec + ctl_len;
+ it->current.dpvec_index = 0;
+ it->saved_face_id = it->face_id;
+ it->method = next_element_from_display_vector;
+ goto get_next;
}
}
***************
*** 5184,5194 ****
&& IT_STRING_CHARPOS (*it) >= 0));
}
-
/* Load IT's display element fields with information about the next
display element which comes from a display table entry or from the
result of translating a control character to one of the forms `^C'
! or `\003'. IT->dpvec holds the glyphs to return as characters. */
static int
next_element_from_display_vector (it)
--- 5185,5198 ----
&& IT_STRING_CHARPOS (*it) >= 0));
}
/* Load IT's display element fields with information about the next
display element which comes from a display table entry or from the
result of translating a control character to one of the forms `^C'
! or `\003'.
!
! IT->dpvec holds the glyphs to return as characters.
! IT->saved_face_id holds the face id before the display vector--
! it is restored into IT->face_idin set_iterator_to_next. */
static int
next_element_from_display_vector (it)
***************
*** 5197,5206 ****
/* Precondition. */
xassert (it->dpvec && it->current.dpvec_index >= 0);
- /* Remember the current face id in case glyphs specify faces.
- IT's face is restored in set_iterator_to_next. */
- it->saved_face_id = it->face_id;
-
if (INTEGERP (*it->dpvec)
&& GLYPH_CHAR_VALID_P (XFASTINT (*it->dpvec)))
{
--- 5201,5206 ----
***************
*** 5384,5411 ****
struct it *it;
{
if (it->selective_display_ellipsis_p)
! {
! if (it->dp && VECTORP (DISP_INVIS_VECTOR (it->dp)))
! {
! /* Use the display table definition for `...'. Invalid glyphs
! will be handled by the method returning elements from dpvec. */
! struct Lisp_Vector *v = XVECTOR (DISP_INVIS_VECTOR (it->dp));
! it->dpvec_char_len = it->len;
! it->dpvec = v->contents;
! it->dpend = v->contents + v->size;
! it->current.dpvec_index = 0;
! it->method = next_element_from_display_vector;
! }
! else
! {
! /* Use default `...' which is stored in default_invis_vector. */
! it->dpvec_char_len = it->len;
! it->dpvec = default_invis_vector;
! it->dpend = default_invis_vector + 3;
! it->current.dpvec_index = 0;
! it->method = next_element_from_display_vector;
! }
! }
else
{
/* The face at the current position may be different from the
--- 5384,5390 ----
struct it *it;
{
if (it->selective_display_ellipsis_p)
! setup_for_ellipsis (it, it->len);
else
{
/* The face at the current position may be different from the
***************
*** 5776,5783 ****
result = MOVE_NEWLINE_OR_CR;
break;
}
- if (it->method ==
next_element_from_display_vector)
- it->face_id = it->saved_face_id;
}
#endif /* HAVE_WINDOW_SYSTEM */
}
--- 5755,5760 ----
***************
*** 5862,5869 ****
result = MOVE_NEWLINE_OR_CR;
break;
}
- if (it->method == next_element_from_display_vector)
- it->face_id = it->saved_face_id;
}
#endif /* HAVE_WINDOW_SYSTEM */
result = MOVE_LINE_TRUNCATED;
--- 5839,5844 ----
***************
*** 14633,14640 ****
{
move_it_in_display_line_to (it, ZV, it->first_visible_x,
MOVE_TO_POS | MOVE_TO_X);
- if (it->method == next_element_from_display_vector)
- it->face_id = it->saved_face_id;
}
/* Get the initial row height. This is either the height of the
--- 14608,14613 ----
***************
*** 14794,14801 ****
row->continued_p = 0;
row->exact_window_width_line_p = 1;
}
- else if (it->method ==
next_element_from_display_vector)
- it->face_id = it->saved_face_id;
}
#endif /* HAVE_WINDOW_SYSTEM */
}
--- 14767,14772 ----
***************
*** 14976,14983 ****
row->exact_window_width_line_p = 1;
goto at_end_of_line;
}
- if (it->method == next_element_from_display_vector)
- it->face_id = it->saved_face_id;
}
}
#endif /* HAVE_WINDOW_SYSTEM */
--- 14947,14952 ----
- [Emacs-diffs] Changes to emacs/src/xdisp.c, (continued)
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Kenichi Handa, 2004/11/15
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Stefan Monnier, 2004/11/16
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Kim F . Storm, 2004/11/16
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Luc Teirlinck, 2004/11/16
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Kim F . Storm, 2004/11/18
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Kim F . Storm, 2004/11/21
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Kim F . Storm, 2004/11/21
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Kim F . Storm, 2004/11/21
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Kim F . Storm, 2004/11/22
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Kim F . Storm, 2004/11/24
- [Emacs-diffs] Changes to emacs/src/xdisp.c,
Kim F . Storm <=