3270 |
IT's face is restored in set_iterator_to_next. */ |
IT's face is restored in set_iterator_to_next. */ |
3271 |
it->saved_face_id = it->face_id; |
it->saved_face_id = it->face_id; |
3272 |
it->method = next_element_from_display_vector; |
it->method = next_element_from_display_vector; |
3273 |
|
it->ellipsis_p = 1; |
3274 |
} |
} |
3275 |
|
|
3276 |
|
|
4913 |
it->current.dpvec_index = 0; |
it->current.dpvec_index = 0; |
4914 |
it->saved_face_id = it->face_id; |
it->saved_face_id = it->face_id; |
4915 |
it->method = next_element_from_display_vector; |
it->method = next_element_from_display_vector; |
4916 |
|
it->ellipsis_p = 0; |
4917 |
} |
} |
4918 |
else |
else |
4919 |
{ |
{ |
5064 |
it->current.dpvec_index = 0; |
it->current.dpvec_index = 0; |
5065 |
it->saved_face_id = it->face_id; |
it->saved_face_id = it->face_id; |
5066 |
it->method = next_element_from_display_vector; |
it->method = next_element_from_display_vector; |
5067 |
|
it->ellipsis_p = 0; |
5068 |
goto get_next; |
goto get_next; |
5069 |
} |
} |
5070 |
} |
} |
5706 |
saved_glyph_row = it->glyph_row; |
saved_glyph_row = it->glyph_row; |
5707 |
it->glyph_row = NULL; |
it->glyph_row = NULL; |
5708 |
|
|
5709 |
#define BUFFER_POS_REACHED_P() \ |
#define BUFFER_POS_REACHED_P() \ |
5710 |
((op & MOVE_TO_POS) != 0 \ |
((op & MOVE_TO_POS) != 0 \ |
5711 |
&& BUFFERP (it->object) \ |
&& BUFFERP (it->object) \ |
5712 |
&& IT_CHARPOS (*it) >= to_charpos) |
&& IT_CHARPOS (*it) >= to_charpos \ |
5713 |
|
&& it->method == next_element_from_buffer) |
5714 |
|
|
5715 |
while (1) |
while (1) |
5716 |
{ |
{ |
10816 |
glyph = cursor; |
glyph = cursor; |
10817 |
x = cursor_x; |
x = cursor_x; |
10818 |
} |
} |
10819 |
|
else if (row->ends_in_ellipsis_p && glyph == end) |
10820 |
|
{ |
10821 |
|
/* Scan back over the ellipsis glyphs, decrementing positions. */ |
10822 |
|
while (glyph > row->glyphs[TEXT_AREA] |
10823 |
|
&& (glyph - 1)->charpos == last_pos) |
10824 |
|
glyph--, x -= glyph->pixel_width; |
10825 |
|
/* That loop always goes one position too far, |
10826 |
|
including the glyph before the ellipsis. |
10827 |
|
So scan forward over that one. */ |
10828 |
|
x += glyph->pixel_width; |
10829 |
|
glyph++; |
10830 |
|
} |
10831 |
else if (string_start |
else if (string_start |
10832 |
&& (glyph == end || !BUFFERP (glyph->object) || last_pos > pt_old)) |
&& (glyph == end || !BUFFERP (glyph->object) || last_pos > pt_old)) |
10833 |
{ |
{ |
14629 |
/* If the row ends with a newline from a string, we don't want |
/* If the row ends with a newline from a string, we don't want |
14630 |
the cursor there (if the row is continued it doesn't end in a |
the cursor there (if the row is continued it doesn't end in a |
14631 |
newline). */ |
newline). */ |
14632 |
if (CHARPOS (row->end.string_pos) >= 0 |
if (CHARPOS (row->end.string_pos) >= 0) |
|
|| MATRIX_ROW_ENDS_IN_MIDDLE_OF_CHAR_P (row)) |
|
14633 |
cursor_row_p = row->continued_p; |
cursor_row_p = row->continued_p; |
14634 |
|
else if (MATRIX_ROW_ENDS_IN_MIDDLE_OF_CHAR_P (row)) |
14635 |
|
{ |
14636 |
|
/* If the row ends in middle of a real character, |
14637 |
|
and the line is continued, we want the cursor here. |
14638 |
|
That's because MATRIX_ROW_END_CHARPOS would equal |
14639 |
|
PT if PT is before the character. */ |
14640 |
|
if (!row->ends_in_ellipsis_p) |
14641 |
|
cursor_row_p = row->continued_p; |
14642 |
|
else |
14643 |
|
/* If the row ends in an ellipsis, then |
14644 |
|
MATRIX_ROW_END_CHARPOS will equal point after the invisible text. |
14645 |
|
We want that position to be displayed after the ellipsis. */ |
14646 |
|
cursor_row_p = 0; |
14647 |
|
} |
14648 |
/* If the row ends at ZV, display the cursor at the end of that |
/* If the row ends at ZV, display the cursor at the end of that |
14649 |
row instead of at the start of the row below. */ |
row instead of at the start of the row below. */ |
14650 |
else if (row->ends_at_zv_p) |
else if (row->ends_at_zv_p) |
15121 |
/* Remember the position at which this line ends. */ |
/* Remember the position at which this line ends. */ |
15122 |
row->end = it->current; |
row->end = it->current; |
15123 |
|
|
15124 |
|
/* Record whether this row ends inside an ellipsis. */ |
15125 |
|
row->ends_in_ellipsis_p |
15126 |
|
= (it->method == next_element_from_display_vector |
15127 |
|
&& it->ellipsis_p); |
15128 |
|
|
15129 |
/* Save fringe bitmaps in this row. */ |
/* Save fringe bitmaps in this row. */ |
15130 |
row->left_user_fringe_bitmap = it->left_user_fringe_bitmap; |
row->left_user_fringe_bitmap = it->left_user_fringe_bitmap; |
15131 |
row->left_user_fringe_face_id = it->left_user_fringe_face_id; |
row->left_user_fringe_face_id = it->left_user_fringe_face_id; |