342 |
|
|
343 |
Lisp_Object Qtrailing_whitespace; |
Lisp_Object Qtrailing_whitespace; |
344 |
|
|
345 |
|
/* Name and number of the face used to highlight escape glyphs. */ |
346 |
|
|
347 |
|
Lisp_Object Qescape_glyph; |
348 |
|
int escape_glyph_face; |
349 |
|
|
350 |
/* The symbol `image' which is the car of the lists used to represent |
/* The symbol `image' which is the car of the lists used to represent |
351 |
images in Lisp. */ |
images in Lisp. */ |
352 |
|
|
812 |
|
|
813 |
/* Function prototypes. */ |
/* Function prototypes. */ |
814 |
|
|
815 |
static void setup_for_ellipsis P_ ((struct it *)); |
static void setup_for_ellipsis P_ ((struct it *, int)); |
816 |
static void mark_window_display_accurate_1 P_ ((struct window *, int)); |
static void mark_window_display_accurate_1 P_ ((struct window *, int)); |
817 |
static int single_display_prop_string_p P_ ((Lisp_Object, Lisp_Object)); |
static int single_display_prop_string_p P_ ((Lisp_Object, Lisp_Object)); |
818 |
static int display_prop_string_p P_ ((Lisp_Object, Lisp_Object)); |
static int display_prop_string_p P_ ((Lisp_Object, Lisp_Object)); |
3232 |
it->stack[it->sp - 1].display_ellipsis_p = display_ellipsis_p; |
it->stack[it->sp - 1].display_ellipsis_p = display_ellipsis_p; |
3233 |
} |
} |
3234 |
else if (display_ellipsis_p) |
else if (display_ellipsis_p) |
3235 |
setup_for_ellipsis (it); |
setup_for_ellipsis (it, 0); |
3236 |
} |
} |
3237 |
} |
} |
3238 |
|
|
3240 |
} |
} |
3241 |
|
|
3242 |
|
|
3243 |
/* Make iterator IT return `...' next. */ |
/* Make iterator IT return `...' next. |
3244 |
|
Replaces LEN characters from buffer. */ |
3245 |
|
|
3246 |
static void |
static void |
3247 |
setup_for_ellipsis (it) |
setup_for_ellipsis (it, len) |
3248 |
struct it *it; |
struct it *it; |
3249 |
|
int len; |
3250 |
{ |
{ |
3251 |
if (it->dp |
/* Use the display table definition for `...'. Invalid glyphs |
3252 |
&& VECTORP (DISP_INVIS_VECTOR (it->dp))) |
will be handled by the method returning elements from dpvec. */ |
3253 |
|
if (it->dp && VECTORP (DISP_INVIS_VECTOR (it->dp))) |
3254 |
{ |
{ |
3255 |
struct Lisp_Vector *v = XVECTOR (DISP_INVIS_VECTOR (it->dp)); |
struct Lisp_Vector *v = XVECTOR (DISP_INVIS_VECTOR (it->dp)); |
3256 |
it->dpvec = v->contents; |
it->dpvec = v->contents; |
3263 |
it->dpend = default_invis_vector + 3; |
it->dpend = default_invis_vector + 3; |
3264 |
} |
} |
3265 |
|
|
3266 |
/* The ellipsis display does not replace the display of the |
it->dpvec_char_len = len; |
|
character at the new position. Indicate this by setting |
|
|
IT->dpvec_char_len to zero. */ |
|
|
it->dpvec_char_len = 0; |
|
|
|
|
3267 |
it->current.dpvec_index = 0; |
it->current.dpvec_index = 0; |
3268 |
|
|
3269 |
|
/* Remember the current face id in case glyphs specify faces. |
3270 |
|
IT's face is restored in set_iterator_to_next. */ |
3271 |
|
it->saved_face_id = it->face_id; |
3272 |
it->method = next_element_from_display_vector; |
it->method = next_element_from_display_vector; |
3273 |
} |
} |
3274 |
|
|
3583 |
|| EQ (XCAR (prop), Qright_fringe)) |
|| EQ (XCAR (prop), Qright_fringe)) |
3584 |
&& CONSP (XCDR (prop))) |
&& CONSP (XCDR (prop))) |
3585 |
{ |
{ |
3586 |
unsigned face_id = DEFAULT_FACE_ID; |
int face_id = DEFAULT_FACE_ID; |
3587 |
int fringe_bitmap; |
int fringe_bitmap; |
3588 |
|
|
3589 |
/* Save current settings of IT so that we can restore them |
/* Save current settings of IT so that we can restore them |
3602 |
if (CONSP (XCDR (XCDR (prop)))) |
if (CONSP (XCDR (XCDR (prop)))) |
3603 |
{ |
{ |
3604 |
Lisp_Object face_name = XCAR (XCDR (XCDR (prop))); |
Lisp_Object face_name = XCAR (XCDR (XCDR (prop))); |
3605 |
|
int face_id2 = lookup_named_face (it->f, face_name, 'A', 0); |
3606 |
face_id = lookup_named_face (it->f, face_name, 'A'); |
if (face_id2 >= 0) |
3607 |
if (face_id < 0) |
face_id = face_id2; |
|
return 0; |
|
3608 |
} |
} |
3609 |
|
|
3610 |
push_it (it); |
push_it (it); |
4056 |
/* If we have to display `...' for invisible text, set |
/* If we have to display `...' for invisible text, set |
4057 |
the iterator up for that. */ |
the iterator up for that. */ |
4058 |
if (display_ellipsis_p) |
if (display_ellipsis_p) |
4059 |
setup_for_ellipsis (it); |
setup_for_ellipsis (it, 0); |
4060 |
} |
} |
4061 |
else |
else |
4062 |
{ |
{ |
4848 |
we hit the end of what we iterate over. Performance note: the |
we hit the end of what we iterate over. Performance note: the |
4849 |
function pointer `method' used here turns out to be faster than |
function pointer `method' used here turns out to be faster than |
4850 |
using a sequence of if-statements. */ |
using a sequence of if-statements. */ |
4851 |
int success_p = (*it->method) (it); |
int success_p; |
4852 |
|
|
4853 |
|
get_next: |
4854 |
|
success_p = (*it->method) (it); |
4855 |
|
|
4856 |
if (it->what == IT_CHARACTER) |
if (it->what == IT_CHARACTER) |
4857 |
{ |
{ |
4883 |
it->dpvec = v->contents; |
it->dpvec = v->contents; |
4884 |
it->dpend = v->contents + v->size; |
it->dpend = v->contents + v->size; |
4885 |
it->current.dpvec_index = 0; |
it->current.dpvec_index = 0; |
4886 |
|
it->saved_face_id = it->face_id; |
4887 |
it->method = next_element_from_display_vector; |
it->method = next_element_from_display_vector; |
|
success_p = get_next_display_element (it); |
|
4888 |
} |
} |
4889 |
else |
else |
4890 |
{ |
{ |
4891 |
set_iterator_to_next (it, 0); |
set_iterator_to_next (it, 0); |
|
success_p = get_next_display_element (it); |
|
4892 |
} |
} |
4893 |
|
goto get_next; |
4894 |
} |
} |
4895 |
|
|
4896 |
/* Translate control characters into `\003' or `^C' form. |
/* Translate control characters into `\003' or `^C' form. |
4926 |
IT->ctl_chars with glyphs for what we have to |
IT->ctl_chars with glyphs for what we have to |
4927 |
display. Then, set IT->dpvec to these glyphs. */ |
display. Then, set IT->dpvec to these glyphs. */ |
4928 |
GLYPH g; |
GLYPH g; |
4929 |
|
int ctl_len; |
4930 |
|
int face_id = escape_glyph_face; |
4931 |
|
|
4932 |
|
/* Find the face id if `escape-glyph' unless we recently did. */ |
4933 |
|
if (face_id < 0) |
4934 |
|
{ |
4935 |
|
Lisp_Object tem = Fget (Qescape_glyph, Qface); |
4936 |
|
if (INTEGERP (tem)) |
4937 |
|
face_id = XINT (tem); |
4938 |
|
else |
4939 |
|
face_id = 0; |
4940 |
|
/* If there's overflow, use 0 instead. */ |
4941 |
|
if (FAST_GLYPH_FACE (FAST_MAKE_GLYPH (0, face_id)) != face_id) |
4942 |
|
face_id = 0; |
4943 |
|
escape_glyph_face = face_id; |
4944 |
|
} |
4945 |
|
|
4946 |
if (it->c < 128 && it->ctl_arrow_p) |
if (it->c < 128 && it->ctl_arrow_p) |
4947 |
{ |
{ |
4951 |
&& GLYPH_CHAR_VALID_P (XINT (DISP_CTRL_GLYPH (it->dp)))) |
&& GLYPH_CHAR_VALID_P (XINT (DISP_CTRL_GLYPH (it->dp)))) |
4952 |
g = XINT (DISP_CTRL_GLYPH (it->dp)); |
g = XINT (DISP_CTRL_GLYPH (it->dp)); |
4953 |
else |
else |
4954 |
g = FAST_MAKE_GLYPH ('^', 0); |
g = FAST_MAKE_GLYPH ('^', face_id); |
4955 |
XSETINT (it->ctl_chars[0], g); |
XSETINT (it->ctl_chars[0], g); |
4956 |
|
|
4957 |
g = FAST_MAKE_GLYPH (it->c ^ 0100, 0); |
g = FAST_MAKE_GLYPH (it->c ^ 0100, face_id); |
4958 |
XSETINT (it->ctl_chars[1], g); |
XSETINT (it->ctl_chars[1], g); |
4959 |
|
ctl_len = 2; |
|
/* 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); |
|
4960 |
} |
} |
4961 |
else |
else |
4962 |
{ |
{ |
4971 |
&& GLYPH_CHAR_VALID_P (XFASTINT (DISP_ESCAPE_GLYPH (it->dp)))) |
&& GLYPH_CHAR_VALID_P (XFASTINT (DISP_ESCAPE_GLYPH (it->dp)))) |
4972 |
escape_glyph = XFASTINT (DISP_ESCAPE_GLYPH (it->dp)); |
escape_glyph = XFASTINT (DISP_ESCAPE_GLYPH (it->dp)); |
4973 |
else |
else |
4974 |
escape_glyph = FAST_MAKE_GLYPH ('\\', 0); |
escape_glyph = FAST_MAKE_GLYPH ('\\', face_id); |
4975 |
|
|
4976 |
if (SINGLE_BYTE_CHAR_P (it->c)) |
if (SINGLE_BYTE_CHAR_P (it->c)) |
4977 |
str[0] = it->c, len = 1; |
str[0] = it->c, len = 1; |
4998 |
XSETINT (it->ctl_chars[i * 4], escape_glyph); |
XSETINT (it->ctl_chars[i * 4], escape_glyph); |
4999 |
/* Insert three more glyphs into IT->ctl_chars for |
/* Insert three more glyphs into IT->ctl_chars for |
5000 |
the octal display of the character. */ |
the octal display of the character. */ |
5001 |
g = FAST_MAKE_GLYPH (((str[i] >> 6) & 7) + '0', 0); |
g = FAST_MAKE_GLYPH (((str[i] >> 6) & 7) + '0', |
5002 |
|
face_id); |
5003 |
XSETINT (it->ctl_chars[i * 4 + 1], g); |
XSETINT (it->ctl_chars[i * 4 + 1], g); |
5004 |
g = FAST_MAKE_GLYPH (((str[i] >> 3) & 7) + '0', 0); |
g = FAST_MAKE_GLYPH (((str[i] >> 3) & 7) + '0', |
5005 |
|
face_id); |
5006 |
XSETINT (it->ctl_chars[i * 4 + 2], g); |
XSETINT (it->ctl_chars[i * 4 + 2], g); |
5007 |
g = FAST_MAKE_GLYPH ((str[i] & 7) + '0', 0); |
g = FAST_MAKE_GLYPH ((str[i] & 7) + '0', |
5008 |
|
face_id); |
5009 |
XSETINT (it->ctl_chars[i * 4 + 3], g); |
XSETINT (it->ctl_chars[i * 4 + 3], g); |
5010 |
} |
} |
5011 |
|
ctl_len = len * 4; |
|
/* 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); |
|
5012 |
} |
} |
5013 |
|
|
5014 |
|
/* Set up IT->dpvec and return first character from it. */ |
5015 |
|
it->dpvec_char_len = it->len; |
5016 |
|
it->dpvec = it->ctl_chars; |
5017 |
|
it->dpend = it->dpvec + ctl_len; |
5018 |
|
it->current.dpvec_index = 0; |
5019 |
|
it->saved_face_id = it->face_id; |
5020 |
|
it->method = next_element_from_display_vector; |
5021 |
|
goto get_next; |
5022 |
} |
} |
5023 |
} |
} |
5024 |
|
|
5208 |
&& IT_STRING_CHARPOS (*it) >= 0)); |
&& IT_STRING_CHARPOS (*it) >= 0)); |
5209 |
} |
} |
5210 |
|
|
|
|
|
5211 |
/* Load IT's display element fields with information about the next |
/* Load IT's display element fields with information about the next |
5212 |
display element which comes from a display table entry or from the |
display element which comes from a display table entry or from the |
5213 |
result of translating a control character to one of the forms `^C' |
result of translating a control character to one of the forms `^C' |
5214 |
or `\003'. IT->dpvec holds the glyphs to return as characters. */ |
or `\003'. |
5215 |
|
|
5216 |
|
IT->dpvec holds the glyphs to return as characters. |
5217 |
|
IT->saved_face_id holds the face id before the display vector-- |
5218 |
|
it is restored into IT->face_idin set_iterator_to_next. */ |
5219 |
|
|
5220 |
static int |
static int |
5221 |
next_element_from_display_vector (it) |
next_element_from_display_vector (it) |
5224 |
/* Precondition. */ |
/* Precondition. */ |
5225 |
xassert (it->dpvec && it->current.dpvec_index >= 0); |
xassert (it->dpvec && it->current.dpvec_index >= 0); |
5226 |
|
|
|
/* 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; |
|
|
|
|
5227 |
if (INTEGERP (*it->dpvec) |
if (INTEGERP (*it->dpvec) |
5228 |
&& GLYPH_CHAR_VALID_P (XFASTINT (*it->dpvec))) |
&& GLYPH_CHAR_VALID_P (XFASTINT (*it->dpvec))) |
5229 |
{ |
{ |
5407 |
struct it *it; |
struct it *it; |
5408 |
{ |
{ |
5409 |
if (it->selective_display_ellipsis_p) |
if (it->selective_display_ellipsis_p) |
5410 |
{ |
setup_for_ellipsis (it, it->len); |
|
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; |
|
|
} |
|
|
} |
|
5411 |
else |
else |
5412 |
{ |
{ |
5413 |
/* The face at the current position may be different from the |
/* The face at the current position may be different from the |
11601 |
*w->desired_matrix->method = 0; |
*w->desired_matrix->method = 0; |
11602 |
#endif |
#endif |
11603 |
|
|
11604 |
|
/* Force this to be looked up again for each redisp of each window. */ |
11605 |
|
escape_glyph_face = -1; |
11606 |
|
|
11607 |
specbind (Qinhibit_point_motion_hooks, Qt); |
specbind (Qinhibit_point_motion_hooks, Qt); |
11608 |
|
|
11609 |
reconsider_clip_changes (w, buffer); |
reconsider_clip_changes (w, buffer); |
14536 |
&& glyph->u.ch == ' ')) |
&& glyph->u.ch == ' ')) |
14537 |
&& trailing_whitespace_p (glyph->charpos)) |
&& trailing_whitespace_p (glyph->charpos)) |
14538 |
{ |
{ |
14539 |
int face_id = lookup_named_face (f, Qtrailing_whitespace, 0); |
int face_id = lookup_named_face (f, Qtrailing_whitespace, 0, 0); |
14540 |
|
if (face_id < 0) |
14541 |
|
return; |
14542 |
|
|
14543 |
while (glyph >= start |
while (glyph >= start |
14544 |
&& BUFFERP (glyph->object) |
&& BUFFERP (glyph->object) |
14631 |
hscrolled. This may stop at an x-position < IT->first_visible_x |
hscrolled. This may stop at an x-position < IT->first_visible_x |
14632 |
if the first glyph is partially visible or if we hit a line end. */ |
if the first glyph is partially visible or if we hit a line end. */ |
14633 |
if (it->current_x < it->first_visible_x) |
if (it->current_x < it->first_visible_x) |
14634 |
move_it_in_display_line_to (it, ZV, it->first_visible_x, |
{ |
14635 |
MOVE_TO_POS | MOVE_TO_X); |
move_it_in_display_line_to (it, ZV, it->first_visible_x, |
14636 |
|
MOVE_TO_POS | MOVE_TO_X); |
14637 |
|
} |
14638 |
|
|
14639 |
/* Get the initial row height. This is either the height of the |
/* Get the initial row height. This is either the height of the |
14640 |
text hscrolled, if there is any, or zero. */ |
text hscrolled, if there is any, or zero. */ |
14963 |
{ |
{ |
14964 |
if (!get_next_display_element (it)) |
if (!get_next_display_element (it)) |
14965 |
{ |
{ |
|
#ifdef HAVE_WINDOW_SYSTEM |
|
14966 |
it->continuation_lines_width = 0; |
it->continuation_lines_width = 0; |
14967 |
row->ends_at_zv_p = 1; |
row->ends_at_zv_p = 1; |
14968 |
row->exact_window_width_line_p = 1; |
row->exact_window_width_line_p = 1; |
14969 |
break; |
break; |
|
#endif /* HAVE_WINDOW_SYSTEM */ |
|
14970 |
} |
} |
14971 |
if (ITERATOR_AT_END_OF_LINE_P (it)) |
if (ITERATOR_AT_END_OF_LINE_P (it)) |
14972 |
{ |
{ |
18275 |
return x_reached; |
return x_reached; |
18276 |
} |
} |
18277 |
|
|
18278 |
|
/* Expand row matrix if too narrow. Don't expand if area |
18279 |
|
is not present. */ |
18280 |
|
|
18281 |
|
#define IT_EXPAND_MATRIX_WIDTH(it, area) \ |
18282 |
|
{ \ |
18283 |
|
if (!fonts_changed_p \ |
18284 |
|
&& (it->glyph_row->glyphs[area] \ |
18285 |
|
< it->glyph_row->glyphs[area + 1])) \ |
18286 |
|
{ \ |
18287 |
|
it->w->ncols_scale_factor++; \ |
18288 |
|
fonts_changed_p = 1; \ |
18289 |
|
} \ |
18290 |
|
} |
18291 |
|
|
18292 |
/* Store one glyph for IT->char_to_display in IT->glyph_row. |
/* Store one glyph for IT->char_to_display in IT->glyph_row. |
18293 |
Called from x_produce_glyphs when IT->glyph_row is non-null. */ |
Called from x_produce_glyphs when IT->glyph_row is non-null. */ |
18325 |
glyph->font_type = FONT_TYPE_UNKNOWN; |
glyph->font_type = FONT_TYPE_UNKNOWN; |
18326 |
++it->glyph_row->used[area]; |
++it->glyph_row->used[area]; |
18327 |
} |
} |
18328 |
else if (!fonts_changed_p) |
else |
18329 |
{ |
IT_EXPAND_MATRIX_WIDTH (it, area); |
|
it->w->ncols_scale_factor++; |
|
|
fonts_changed_p = 1; |
|
|
} |
|
18330 |
} |
} |
18331 |
|
|
18332 |
/* Store one glyph for the composition IT->cmp_id in IT->glyph_row. |
/* Store one glyph for the composition IT->cmp_id in IT->glyph_row. |
18364 |
glyph->font_type = FONT_TYPE_UNKNOWN; |
glyph->font_type = FONT_TYPE_UNKNOWN; |
18365 |
++it->glyph_row->used[area]; |
++it->glyph_row->used[area]; |
18366 |
} |
} |
18367 |
else if (!fonts_changed_p) |
else |
18368 |
{ |
IT_EXPAND_MATRIX_WIDTH (it, area); |
|
it->w->ncols_scale_factor++; |
|
|
fonts_changed_p = 1; |
|
|
} |
|
18369 |
} |
} |
18370 |
|
|
18371 |
|
|
18535 |
glyph->font_type = FONT_TYPE_UNKNOWN; |
glyph->font_type = FONT_TYPE_UNKNOWN; |
18536 |
++it->glyph_row->used[area]; |
++it->glyph_row->used[area]; |
18537 |
} |
} |
18538 |
else if (!fonts_changed_p) |
else |
18539 |
{ |
IT_EXPAND_MATRIX_WIDTH (it, area); |
|
it->w->ncols_scale_factor++; |
|
|
fonts_changed_p = 1; |
|
|
} |
|
18540 |
} |
} |
18541 |
} |
} |
18542 |
|
|
18580 |
glyph->font_type = FONT_TYPE_UNKNOWN; |
glyph->font_type = FONT_TYPE_UNKNOWN; |
18581 |
++it->glyph_row->used[area]; |
++it->glyph_row->used[area]; |
18582 |
} |
} |
18583 |
else if (!fonts_changed_p) |
else |
18584 |
{ |
IT_EXPAND_MATRIX_WIDTH (it, area); |
|
it->w->ncols_scale_factor++; |
|
|
fonts_changed_p = 1; |
|
|
} |
|
18585 |
} |
} |
18586 |
|
|
18587 |
|
|
18812 |
struct face *face; |
struct face *face; |
18813 |
struct font_info *font_info; |
struct font_info *font_info; |
18814 |
|
|
18815 |
face_id = lookup_named_face (it->f, face_name, ' '); |
face_id = lookup_named_face (it->f, face_name, ' ', 0); |
18816 |
if (face_id < 0) |
if (face_id < 0) |
18817 |
return make_number (-1); |
return make_number (-1); |
18818 |
|
|
20124 |
{ |
{ |
20125 |
int x, y; |
int x, y; |
20126 |
int header_line_height = WINDOW_HEADER_LINE_HEIGHT (w); |
int header_line_height = WINDOW_HEADER_LINE_HEIGHT (w); |
20127 |
|
int width; |
20128 |
|
|
20129 |
cursor_glyph = get_phys_cursor_glyph (w); |
cursor_glyph = get_phys_cursor_glyph (w); |
20130 |
if (cursor_glyph == NULL) |
if (cursor_glyph == NULL) |
20132 |
|
|
20133 |
x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x); |
x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x); |
20134 |
y = WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height, cursor_row->y)); |
y = WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height, cursor_row->y)); |
20135 |
|
width = min (cursor_glyph->pixel_width, |
20136 |
|
window_box_width (w, TEXT_AREA) - w->phys_cursor.x); |
20137 |
|
|
20138 |
rif->clear_frame_area (f, x, y, |
rif->clear_frame_area (f, x, y, width, cursor_row->visible_height); |
|
cursor_glyph->pixel_width, cursor_row->visible_height); |
|
20139 |
} |
} |
20140 |
|
|
20141 |
/* Erase the cursor by redrawing the character underneath it. */ |
/* Erase the cursor by redrawing the character underneath it. */ |
20956 |
/* If we're on a string with `help-echo' text property, arrange |
/* If we're on a string with `help-echo' text property, arrange |
20957 |
for the help to be displayed. This is done by setting the |
for the help to be displayed. This is done by setting the |
20958 |
global variable help_echo_string to the help string. */ |
global variable help_echo_string to the help string. */ |
20959 |
help = Fget_text_property (pos, Qhelp_echo, string); |
if (NILP (help)) |
|
if (!NILP (help)) |
|
20960 |
{ |
{ |
20961 |
help_echo_string = help; |
help = Fget_text_property (pos, Qhelp_echo, string); |
20962 |
XSETWINDOW (help_echo_window, w); |
if (!NILP (help)) |
20963 |
help_echo_object = string; |
{ |
20964 |
help_echo_pos = charpos; |
help_echo_string = help; |
20965 |
|
XSETWINDOW (help_echo_window, w); |
20966 |
|
help_echo_object = string; |
20967 |
|
help_echo_pos = charpos; |
20968 |
|
} |
20969 |
} |
} |
20970 |
|
|
20971 |
if (NILP (pointer)) |
if (NILP (pointer)) |
22171 |
staticpro (&Qfontification_functions); |
staticpro (&Qfontification_functions); |
22172 |
Qtrailing_whitespace = intern ("trailing-whitespace"); |
Qtrailing_whitespace = intern ("trailing-whitespace"); |
22173 |
staticpro (&Qtrailing_whitespace); |
staticpro (&Qtrailing_whitespace); |
22174 |
|
Qescape_glyph = intern ("escape-glyph"); |
22175 |
|
staticpro (&Qescape_glyph); |
22176 |
Qimage = intern ("image"); |
Qimage = intern ("image"); |
22177 |
staticpro (&Qimage); |
staticpro (&Qimage); |
22178 |
QCmap = intern (":map"); |
QCmap = intern (":map"); |