Mercurial > emacs
comparison src/xdisp.c @ 54227:b35f97c56fa4
(Voverlay_arrow_variable_list): New variable to properly
implement and integrate multiple overlay arrows with redisplay.
(syms_of_xdisp): DEFVAR_LISP and initialize it.
(last_arrow_position, last_arrow_string): Replace by properties.
(Qlast_arrow_position, Qlast_arrow_string)
(Qoverlay_arrow_string, Qoverlay_arrow_bitmap): New variables.
(syms_of_xdisp): Intern and staticpro them.
(overlay_arrow_string_or_property, update_overlay_arrows)
(overlay_arrow_in_current_buffer_p, overlay_arrows_changed_p)
(overlay_arrow_at_row): New functions for multiple overlay arrows.
(redisplay_internal): Use them instead of directly accessing
Voverlay_arrow_position etc. for multiple overlay arrows.
(mark_window_display_accurate): Use update_overlay_arrows.
(try_cursor_movement): Use overlay_arrow_in_current_buffer_p.
(try_window_id): Use overlay_arrows_changed_p.
(get_overlay_arrow_glyph_row): Add overlay_arrow_string arg.
(display_line): Use overlay_arrow_at_row to check multiple
overlay arrows, and get relevant overlay-arrow-string and
overlay-arrow-bitmap. Set w->overlay_arrow_bitmap accordingly.
(produce_image_glyph): Set pixel_width = 0 for fringe bitmap.
(syms_of_xdisp): Remove last_arrow_position and last_arrow_string.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Mon, 01 Mar 2004 23:55:52 +0000 |
parents | 02b649742717 |
children | 4db32fef9348 |
comparison
equal
deleted
inserted
replaced
54226:448dbcee98d6 | 54227:b35f97c56fa4 |
---|---|
401 | 401 |
402 int multiple_frames; | 402 int multiple_frames; |
403 | 403 |
404 Lisp_Object Vglobal_mode_string; | 404 Lisp_Object Vglobal_mode_string; |
405 | 405 |
406 | |
407 /* List of variables (symbols) which hold markers for overlay arrows. | |
408 The symbols on this list are examined during redisplay to determine | |
409 where to display overlay arrows. */ | |
410 | |
411 Lisp_Object Voverlay_arrow_variable_list; | |
412 | |
406 /* Marker for where to display an arrow on top of the buffer text. */ | 413 /* Marker for where to display an arrow on top of the buffer text. */ |
407 | 414 |
408 Lisp_Object Voverlay_arrow_position; | 415 Lisp_Object Voverlay_arrow_position; |
409 | 416 |
410 /* String to display for the arrow. Only used on terminal frames. */ | 417 /* String to display for the arrow. Only used on terminal frames. */ |
411 | 418 |
412 Lisp_Object Voverlay_arrow_string; | 419 Lisp_Object Voverlay_arrow_string; |
413 | 420 |
414 /* Values of those variables at last redisplay. However, if | 421 /* Values of those variables at last redisplay are stored as |
415 Voverlay_arrow_position is a marker, last_arrow_position is its | 422 properties on `overlay-arrow-position' symbol. However, if |
423 Voverlay_arrow_position is a marker, last-arrow-position is its | |
416 numerical position. */ | 424 numerical position. */ |
417 | 425 |
418 static Lisp_Object last_arrow_position, last_arrow_string; | 426 Lisp_Object Qlast_arrow_position, Qlast_arrow_string; |
427 | |
428 /* Alternative overlay-arrow-string and overlay-arrow-bitmap | |
429 properties on a symbol in overlay-arrow-variable-list. */ | |
430 | |
431 Lisp_Object Qoverlay_arrow_string, Qoverlay_arrow_bitmap; | |
419 | 432 |
420 /* Like mode-line-format, but for the title bar on a visible frame. */ | 433 /* Like mode-line-format, but for the title bar on a visible frame. */ |
421 | 434 |
422 Lisp_Object Vframe_title_format; | 435 Lisp_Object Vframe_title_format; |
423 | 436 |
830 static struct text_pos display_prop_end P_ ((struct it *, Lisp_Object, | 843 static struct text_pos display_prop_end P_ ((struct it *, Lisp_Object, |
831 struct text_pos)); | 844 struct text_pos)); |
832 static int compute_window_start_on_continuation_line P_ ((struct window *)); | 845 static int compute_window_start_on_continuation_line P_ ((struct window *)); |
833 static Lisp_Object safe_eval_handler P_ ((Lisp_Object)); | 846 static Lisp_Object safe_eval_handler P_ ((Lisp_Object)); |
834 static void insert_left_trunc_glyphs P_ ((struct it *)); | 847 static void insert_left_trunc_glyphs P_ ((struct it *)); |
835 static struct glyph_row *get_overlay_arrow_glyph_row P_ ((struct window *)); | 848 static struct glyph_row *get_overlay_arrow_glyph_row P_ ((struct window *, |
849 Lisp_Object)); | |
836 static void extend_face_to_end_of_line P_ ((struct it *)); | 850 static void extend_face_to_end_of_line P_ ((struct it *)); |
837 static int append_space P_ ((struct it *, int)); | 851 static int append_space P_ ((struct it *, int)); |
838 static int make_cursor_line_fully_visible P_ ((struct window *)); | 852 static int make_cursor_line_fully_visible P_ ((struct window *)); |
839 static int try_scrolling P_ ((Lisp_Object, int, EMACS_INT, EMACS_INT, int, int)); | 853 static int try_scrolling P_ ((Lisp_Object, int, EMACS_INT, EMACS_INT, int, int)); |
840 static int try_cursor_movement P_ ((Lisp_Object, struct text_pos, int *)); | 854 static int try_cursor_movement P_ ((Lisp_Object, struct text_pos, int *)); |
9318 { | 9332 { |
9319 redisplay_internal (0); | 9333 redisplay_internal (0); |
9320 } | 9334 } |
9321 | 9335 |
9322 | 9336 |
9337 static Lisp_Object | |
9338 overlay_arrow_string_or_property (var, pbitmap) | |
9339 Lisp_Object var; | |
9340 int *pbitmap; | |
9341 { | |
9342 Lisp_Object pstr = Fget (var, Qoverlay_arrow_string); | |
9343 Lisp_Object bitmap; | |
9344 | |
9345 if (pbitmap) | |
9346 { | |
9347 *pbitmap = 0; | |
9348 if (bitmap = Fget (var, Qoverlay_arrow_bitmap), INTEGERP (bitmap)) | |
9349 *pbitmap = XINT (bitmap); | |
9350 } | |
9351 | |
9352 if (!NILP (pstr)) | |
9353 return pstr; | |
9354 return Voverlay_arrow_string; | |
9355 } | |
9356 | |
9357 /* Return 1 if there are any overlay-arrows in current_buffer. */ | |
9358 static int | |
9359 overlay_arrow_in_current_buffer_p () | |
9360 { | |
9361 Lisp_Object vlist; | |
9362 | |
9363 for (vlist = Voverlay_arrow_variable_list; | |
9364 CONSP (vlist); | |
9365 vlist = XCDR (vlist)) | |
9366 { | |
9367 Lisp_Object var = XCAR (vlist); | |
9368 Lisp_Object val; | |
9369 | |
9370 if (!SYMBOLP (var)) | |
9371 continue; | |
9372 val = find_symbol_value (var); | |
9373 if (MARKERP (val) | |
9374 && current_buffer == XMARKER (val)->buffer) | |
9375 return 1; | |
9376 } | |
9377 return 0; | |
9378 } | |
9379 | |
9380 | |
9381 /* Return 1 if any overlay_arrows have moved or overlay-arrow-string | |
9382 has changed. */ | |
9383 | |
9384 static int | |
9385 overlay_arrows_changed_p () | |
9386 { | |
9387 Lisp_Object vlist; | |
9388 | |
9389 for (vlist = Voverlay_arrow_variable_list; | |
9390 CONSP (vlist); | |
9391 vlist = XCDR (vlist)) | |
9392 { | |
9393 Lisp_Object var = XCAR (vlist); | |
9394 Lisp_Object val, pstr; | |
9395 | |
9396 if (!SYMBOLP (var)) | |
9397 continue; | |
9398 val = find_symbol_value (var); | |
9399 if (!MARKERP (val)) | |
9400 continue; | |
9401 if (! EQ (COERCE_MARKER (val), | |
9402 Fget (var, Qlast_arrow_position)) | |
9403 || ! (pstr = overlay_arrow_string_or_property (var, 0), | |
9404 EQ (pstr, Fget (var, Qlast_arrow_string)))) | |
9405 return 1; | |
9406 } | |
9407 return 0; | |
9408 } | |
9409 | |
9410 /* Mark overlay arrows to be updated on next redisplay. */ | |
9411 | |
9412 static void | |
9413 update_overlay_arrows (up_to_date) | |
9414 int up_to_date; | |
9415 { | |
9416 Lisp_Object vlist; | |
9417 | |
9418 for (vlist = Voverlay_arrow_variable_list; | |
9419 CONSP (vlist); | |
9420 vlist = XCDR (vlist)) | |
9421 { | |
9422 Lisp_Object var = XCAR (vlist); | |
9423 Lisp_Object val; | |
9424 | |
9425 if (!SYMBOLP (var)) | |
9426 continue; | |
9427 | |
9428 if (up_to_date) | |
9429 { | |
9430 Fput (var, Qlast_arrow_position, | |
9431 COERCE_MARKER (find_symbol_value (var))); | |
9432 Fput (var, Qlast_arrow_string, | |
9433 overlay_arrow_string_or_property (var, 0)); | |
9434 } | |
9435 else if (up_to_date < 0 | |
9436 || !NILP (Fget (var, Qlast_arrow_position))) | |
9437 { | |
9438 Fput (var, Qlast_arrow_position, Qt); | |
9439 Fput (var, Qlast_arrow_string, Qt); | |
9440 } | |
9441 } | |
9442 } | |
9443 | |
9444 | |
9445 /* Return overlay arrow string at row, or nil. */ | |
9446 | |
9447 static Lisp_Object | |
9448 overlay_arrow_at_row (f, row, pbitmap) | |
9449 struct frame *f; | |
9450 struct glyph_row *row; | |
9451 int *pbitmap; | |
9452 { | |
9453 Lisp_Object vlist; | |
9454 | |
9455 for (vlist = Voverlay_arrow_variable_list; | |
9456 CONSP (vlist); | |
9457 vlist = XCDR (vlist)) | |
9458 { | |
9459 Lisp_Object var = XCAR (vlist); | |
9460 Lisp_Object val; | |
9461 | |
9462 if (!SYMBOLP (var)) | |
9463 continue; | |
9464 | |
9465 val = find_symbol_value (var); | |
9466 | |
9467 if (MARKERP (val) | |
9468 && current_buffer == XMARKER (val)->buffer | |
9469 && (MATRIX_ROW_START_CHARPOS (row) == marker_position (val))) | |
9470 { | |
9471 val = overlay_arrow_string_or_property (var, pbitmap); | |
9472 if (FRAME_WINDOW_P (f)) | |
9473 return Qt; | |
9474 else if (STRINGP (val)) | |
9475 return val; | |
9476 break; | |
9477 } | |
9478 } | |
9479 | |
9480 *pbitmap = 0; | |
9481 return Qnil; | |
9482 } | |
9483 | |
9323 /* Return 1 if point moved out of or into a composition. Otherwise | 9484 /* Return 1 if point moved out of or into a composition. Otherwise |
9324 return 0. PREV_BUF and PREV_PT are the last point buffer and | 9485 return 0. PREV_BUF and PREV_PT are the last point buffer and |
9325 position. BUF and PT are the current point buffer and position. */ | 9486 position. BUF and PT are the current point buffer and position. */ |
9326 | 9487 |
9327 int | 9488 int |
9597 consider_all_windows_p = (update_mode_lines || buffer_shared > 1 | 9758 consider_all_windows_p = (update_mode_lines || buffer_shared > 1 |
9598 || cursor_type_changed); | 9759 || cursor_type_changed); |
9599 | 9760 |
9600 /* If specs for an arrow have changed, do thorough redisplay | 9761 /* If specs for an arrow have changed, do thorough redisplay |
9601 to ensure we remove any arrow that should no longer exist. */ | 9762 to ensure we remove any arrow that should no longer exist. */ |
9602 if (! EQ (COERCE_MARKER (Voverlay_arrow_position), last_arrow_position) | 9763 if (overlay_arrows_changed_p ()) |
9603 || ! EQ (Voverlay_arrow_string, last_arrow_string)) | |
9604 consider_all_windows_p = windows_or_buffers_changed = 1; | 9764 consider_all_windows_p = windows_or_buffers_changed = 1; |
9605 | 9765 |
9606 /* Normally the message* functions will have already displayed and | 9766 /* Normally the message* functions will have already displayed and |
9607 updated the echo area, but the frame may have been trashed, or | 9767 updated the echo area, but the frame may have been trashed, or |
9608 the update may have been preempted, so display the echo area | 9768 the update may have been preempted, so display the echo area |
10058 redisplay_internal that tries a single-line update of the | 10218 redisplay_internal that tries a single-line update of the |
10059 line containing the cursor in the selected window. */ | 10219 line containing the cursor in the selected window. */ |
10060 CHARPOS (this_line_start_pos) = 0; | 10220 CHARPOS (this_line_start_pos) = 0; |
10061 | 10221 |
10062 /* Let the overlay arrow be updated the next time. */ | 10222 /* Let the overlay arrow be updated the next time. */ |
10063 if (!NILP (last_arrow_position)) | 10223 update_overlay_arrows (0); |
10064 { | |
10065 last_arrow_position = Qt; | |
10066 last_arrow_string = Qt; | |
10067 } | |
10068 | 10224 |
10069 /* If we pause after scrolling, some rows in the current | 10225 /* If we pause after scrolling, some rows in the current |
10070 matrices of some windows are not valid. */ | 10226 matrices of some windows are not valid. */ |
10071 if (!WINDOW_FULL_WIDTH_P (w) | 10227 if (!WINDOW_FULL_WIDTH_P (w) |
10072 && !FRAME_WINDOW_P (XFRAME (w->frame))) | 10228 && !FRAME_WINDOW_P (XFRAME (w->frame))) |
10078 { | 10234 { |
10079 /* This has already been done above if | 10235 /* This has already been done above if |
10080 consider_all_windows_p is set. */ | 10236 consider_all_windows_p is set. */ |
10081 mark_window_display_accurate_1 (w, 1); | 10237 mark_window_display_accurate_1 (w, 1); |
10082 | 10238 |
10083 last_arrow_position = COERCE_MARKER (Voverlay_arrow_position); | 10239 /* Say overlay arrows are up to date. */ |
10084 last_arrow_string = Voverlay_arrow_string; | 10240 update_overlay_arrows (1); |
10085 | 10241 |
10086 if (frame_up_to_date_hook != 0) | 10242 if (frame_up_to_date_hook != 0) |
10087 frame_up_to_date_hook (sf); | 10243 frame_up_to_date_hook (sf); |
10088 } | 10244 } |
10089 | 10245 |
10275 mark_window_display_accurate (w->hchild, accurate_p); | 10431 mark_window_display_accurate (w->hchild, accurate_p); |
10276 } | 10432 } |
10277 | 10433 |
10278 if (accurate_p) | 10434 if (accurate_p) |
10279 { | 10435 { |
10280 last_arrow_position = COERCE_MARKER (Voverlay_arrow_position); | 10436 update_overlay_arrows (1); |
10281 last_arrow_string = Voverlay_arrow_string; | |
10282 } | 10437 } |
10283 else | 10438 else |
10284 { | 10439 { |
10285 /* Force a thorough redisplay the next time by setting | 10440 /* Force a thorough redisplay the next time by setting |
10286 last_arrow_position and last_arrow_string to t, which is | 10441 last_arrow_position and last_arrow_string to t, which is |
10287 unequal to any useful value of Voverlay_arrow_... */ | 10442 unequal to any useful value of Voverlay_arrow_... */ |
10288 last_arrow_position = Qt; | 10443 update_overlay_arrows (-1); |
10289 last_arrow_string = Qt; | |
10290 } | 10444 } |
10291 } | 10445 } |
10292 | 10446 |
10293 | 10447 |
10294 /* Return value in display table DP (Lisp_Char_Table *) for character | 10448 /* Return value in display table DP (Lisp_Char_Table *) for character |
11035 window.c. I don't have this on my list, now, so we do | 11189 window.c. I don't have this on my list, now, so we do |
11036 approximately the same as the old redisplay code. --gerd. */ | 11190 approximately the same as the old redisplay code. --gerd. */ |
11037 && INTEGERP (w->window_end_vpos) | 11191 && INTEGERP (w->window_end_vpos) |
11038 && XFASTINT (w->window_end_vpos) < w->current_matrix->nrows | 11192 && XFASTINT (w->window_end_vpos) < w->current_matrix->nrows |
11039 && (FRAME_WINDOW_P (f) | 11193 && (FRAME_WINDOW_P (f) |
11040 || !MARKERP (Voverlay_arrow_position) | 11194 || !overlay_arrow_in_current_buffer_p ())) |
11041 || current_buffer != XMARKER (Voverlay_arrow_position)->buffer)) | |
11042 { | 11195 { |
11043 int this_scroll_margin; | 11196 int this_scroll_margin; |
11044 struct glyph_row *row = NULL; | 11197 struct glyph_row *row = NULL; |
11045 | 11198 |
11046 #if GLYPH_DEBUG | 11199 #if GLYPH_DEBUG |
12785 /* Likewise if showing a region. */ | 12938 /* Likewise if showing a region. */ |
12786 if (!NILP (w->region_showing)) | 12939 if (!NILP (w->region_showing)) |
12787 GIVE_UP (10); | 12940 GIVE_UP (10); |
12788 | 12941 |
12789 /* Can use this if overlay arrow position and or string have changed. */ | 12942 /* Can use this if overlay arrow position and or string have changed. */ |
12790 if (!EQ (last_arrow_position, COERCE_MARKER (Voverlay_arrow_position)) | 12943 if (overlay_arrows_changed_p ()) |
12791 || !EQ (last_arrow_string, Voverlay_arrow_string)) | |
12792 GIVE_UP (12); | 12944 GIVE_UP (12); |
12793 | 12945 |
12794 | 12946 |
12795 /* Make sure beg_unchanged and end_unchanged are up to date. Do it | 12947 /* Make sure beg_unchanged and end_unchanged are up to date. Do it |
12796 only if buffer has really changed. The reason is that the gap is | 12948 only if buffer has really changed. The reason is that the gap is |
13723 | 13875 |
13724 /* Return a temporary glyph row holding the glyphs of an overlay | 13876 /* Return a temporary glyph row holding the glyphs of an overlay |
13725 arrow. Only used for non-window-redisplay windows. */ | 13877 arrow. Only used for non-window-redisplay windows. */ |
13726 | 13878 |
13727 static struct glyph_row * | 13879 static struct glyph_row * |
13728 get_overlay_arrow_glyph_row (w) | 13880 get_overlay_arrow_glyph_row (w, overlay_arrow_string) |
13729 struct window *w; | 13881 struct window *w; |
13882 Lisp_Object overlay_arrow_string; | |
13730 { | 13883 { |
13731 struct frame *f = XFRAME (WINDOW_FRAME (w)); | 13884 struct frame *f = XFRAME (WINDOW_FRAME (w)); |
13732 struct buffer *buffer = XBUFFER (w->buffer); | 13885 struct buffer *buffer = XBUFFER (w->buffer); |
13733 struct buffer *old = current_buffer; | 13886 struct buffer *old = current_buffer; |
13734 const unsigned char *arrow_string = SDATA (Voverlay_arrow_string); | 13887 const unsigned char *arrow_string = SDATA (overlay_arrow_string); |
13735 int arrow_len = SCHARS (Voverlay_arrow_string); | 13888 int arrow_len = SCHARS (overlay_arrow_string); |
13736 const unsigned char *arrow_end = arrow_string + arrow_len; | 13889 const unsigned char *arrow_end = arrow_string + arrow_len; |
13737 const unsigned char *p; | 13890 const unsigned char *p; |
13738 struct it it; | 13891 struct it it; |
13739 int multibyte_p; | 13892 int multibyte_p; |
13740 int n_glyphs_before; | 13893 int n_glyphs_before; |
13757 it.c = *p, it.len = 1; | 13910 it.c = *p, it.len = 1; |
13758 p += it.len; | 13911 p += it.len; |
13759 | 13912 |
13760 /* Get its face. */ | 13913 /* Get its face. */ |
13761 ilisp = make_number (p - arrow_string); | 13914 ilisp = make_number (p - arrow_string); |
13762 face = Fget_text_property (ilisp, Qface, Voverlay_arrow_string); | 13915 face = Fget_text_property (ilisp, Qface, overlay_arrow_string); |
13763 it.face_id = compute_char_face (f, it.c, face); | 13916 it.face_id = compute_char_face (f, it.c, face); |
13764 | 13917 |
13765 /* Compute its width, get its glyphs. */ | 13918 /* Compute its width, get its glyphs. */ |
13766 n_glyphs_before = it.glyph_row->used[TEXT_AREA]; | 13919 n_glyphs_before = it.glyph_row->used[TEXT_AREA]; |
13767 SET_TEXT_POS (it.position, -1, -1); | 13920 SET_TEXT_POS (it.position, -1, -1); |
14196 static int | 14349 static int |
14197 display_line (it) | 14350 display_line (it) |
14198 struct it *it; | 14351 struct it *it; |
14199 { | 14352 { |
14200 struct glyph_row *row = it->glyph_row; | 14353 struct glyph_row *row = it->glyph_row; |
14354 int overlay_arrow_bitmap; | |
14355 Lisp_Object overlay_arrow_string; | |
14201 | 14356 |
14202 /* We always start displaying at hpos zero even if hscrolled. */ | 14357 /* We always start displaying at hpos zero even if hscrolled. */ |
14203 xassert (it->hpos == 0 && it->current_x == 0); | 14358 xassert (it->hpos == 0 && it->current_x == 0); |
14204 | 14359 |
14205 /* We must not display in a row that's not a text row. */ | 14360 /* We must not display in a row that's not a text row. */ |
14591 | 14746 |
14592 /* If the start of this line is the overlay arrow-position, then | 14747 /* If the start of this line is the overlay arrow-position, then |
14593 mark this glyph row as the one containing the overlay arrow. | 14748 mark this glyph row as the one containing the overlay arrow. |
14594 This is clearly a mess with variable size fonts. It would be | 14749 This is clearly a mess with variable size fonts. It would be |
14595 better to let it be displayed like cursors under X. */ | 14750 better to let it be displayed like cursors under X. */ |
14596 if (MARKERP (Voverlay_arrow_position) | 14751 if (! overlay_arrow_seen |
14597 && current_buffer == XMARKER (Voverlay_arrow_position)->buffer | 14752 && (overlay_arrow_string = overlay_arrow_at_row (it->f, row, |
14598 && (MATRIX_ROW_START_CHARPOS (row) | 14753 &overlay_arrow_bitmap), |
14599 == marker_position (Voverlay_arrow_position)) | 14754 !NILP (overlay_arrow_string))) |
14600 && STRINGP (Voverlay_arrow_string) | |
14601 && ! overlay_arrow_seen) | |
14602 { | 14755 { |
14603 /* Overlay arrow in window redisplay is a fringe bitmap. */ | 14756 /* Overlay arrow in window redisplay is a fringe bitmap. */ |
14604 if (!FRAME_WINDOW_P (it->f)) | 14757 if (!FRAME_WINDOW_P (it->f)) |
14605 { | 14758 { |
14606 struct glyph_row *arrow_row = get_overlay_arrow_glyph_row (it->w); | 14759 struct glyph_row *arrow_row |
14760 = get_overlay_arrow_glyph_row (it->w, overlay_arrow_bitmap); | |
14607 struct glyph *glyph = arrow_row->glyphs[TEXT_AREA]; | 14761 struct glyph *glyph = arrow_row->glyphs[TEXT_AREA]; |
14608 struct glyph *arrow_end = glyph + arrow_row->used[TEXT_AREA]; | 14762 struct glyph *arrow_end = glyph + arrow_row->used[TEXT_AREA]; |
14609 struct glyph *p = row->glyphs[TEXT_AREA]; | 14763 struct glyph *p = row->glyphs[TEXT_AREA]; |
14610 struct glyph *p2, *end; | 14764 struct glyph *p2, *end; |
14611 | 14765 |
14625 row->used[TEXT_AREA] = p2 - row->glyphs[TEXT_AREA]; | 14779 row->used[TEXT_AREA] = p2 - row->glyphs[TEXT_AREA]; |
14626 } | 14780 } |
14627 } | 14781 } |
14628 | 14782 |
14629 overlay_arrow_seen = 1; | 14783 overlay_arrow_seen = 1; |
14784 it->w->overlay_arrow_bitmap = overlay_arrow_bitmap; | |
14630 row->overlay_arrow_p = 1; | 14785 row->overlay_arrow_p = 1; |
14631 } | 14786 } |
14632 | 14787 |
14633 /* Compute pixel dimensions of this line. */ | 14788 /* Compute pixel dimensions of this line. */ |
14634 compute_line_metrics (it); | 14789 compute_line_metrics (it); |
17706 PREPARE_FACE_FOR_DISPLAY (it->f, face); | 17861 PREPARE_FACE_FOR_DISPLAY (it->f, face); |
17707 | 17862 |
17708 if (it->image_id < 0) | 17863 if (it->image_id < 0) |
17709 { | 17864 { |
17710 /* Fringe bitmap. */ | 17865 /* Fringe bitmap. */ |
17866 it->ascent = it->phys_ascent = 0; | |
17867 it->descent = it->phys_descent = 0; | |
17868 it->pixel_width = 0; | |
17711 it->nglyphs = 0; | 17869 it->nglyphs = 0; |
17712 return; | 17870 return; |
17713 } | 17871 } |
17714 | 17872 |
17715 img = IMAGE_FROM_ID (it->f, it->image_id); | 17873 img = IMAGE_FROM_ID (it->f, it->image_id); |
21431 staticpro (&Qinhibit_free_realized_faces); | 21589 staticpro (&Qinhibit_free_realized_faces); |
21432 | 21590 |
21433 list_of_error = Fcons (intern ("error"), Qnil); | 21591 list_of_error = Fcons (intern ("error"), Qnil); |
21434 staticpro (&list_of_error); | 21592 staticpro (&list_of_error); |
21435 | 21593 |
21436 last_arrow_position = Qnil; | 21594 Qlast_arrow_position = intern ("last-arrow-position"); |
21437 last_arrow_string = Qnil; | 21595 staticpro (&Qlast_arrow_position); |
21438 staticpro (&last_arrow_position); | 21596 Qlast_arrow_string = intern ("last-arrow-string"); |
21439 staticpro (&last_arrow_string); | 21597 staticpro (&Qlast_arrow_string); |
21598 | |
21599 Qoverlay_arrow_string = intern ("overlay-arrow-string"); | |
21600 staticpro (&Qoverlay_arrow_string); | |
21601 Qoverlay_arrow_bitmap = intern ("overlay-arrow-bitmap"); | |
21602 staticpro (&Qoverlay_arrow_bitmap); | |
21440 | 21603 |
21441 echo_buffer[0] = echo_buffer[1] = Qnil; | 21604 echo_buffer[0] = echo_buffer[1] = Qnil; |
21442 staticpro (&echo_buffer[0]); | 21605 staticpro (&echo_buffer[0]); |
21443 staticpro (&echo_buffer[1]); | 21606 staticpro (&echo_buffer[1]); |
21444 | 21607 |
21498 This must be the beginning of a line in order to work. | 21661 This must be the beginning of a line in order to work. |
21499 See also `overlay-arrow-string'. */); | 21662 See also `overlay-arrow-string'. */); |
21500 Voverlay_arrow_position = Qnil; | 21663 Voverlay_arrow_position = Qnil; |
21501 | 21664 |
21502 DEFVAR_LISP ("overlay-arrow-string", &Voverlay_arrow_string, | 21665 DEFVAR_LISP ("overlay-arrow-string", &Voverlay_arrow_string, |
21503 doc: /* String to display as an arrow. See also `overlay-arrow-position'. */); | 21666 doc: /* String to display as an arrow in non-window frames. |
21667 See also `overlay-arrow-position'. */); | |
21504 Voverlay_arrow_string = Qnil; | 21668 Voverlay_arrow_string = Qnil; |
21669 | |
21670 DEFVAR_LISP ("overlay-arrow-variable-list", &Voverlay_arrow_variable_list, | |
21671 doc: /* List of variables (symbols) which hold markers for overlay arrows. | |
21672 The symbols on this list are examined during redisplay to determine | |
21673 where to display overlay arrows. */); | |
21674 Voverlay_arrow_variable_list | |
21675 = Fcons (intern ("overlay-arrow-position"), Qnil); | |
21505 | 21676 |
21506 DEFVAR_INT ("scroll-step", &scroll_step, | 21677 DEFVAR_INT ("scroll-step", &scroll_step, |
21507 doc: /* *The number of lines to try scrolling a window by when point moves out. | 21678 doc: /* *The number of lines to try scrolling a window by when point moves out. |
21508 If that fails to bring point back on frame, point is centered instead. | 21679 If that fails to bring point back on frame, point is centered instead. |
21509 If this is zero, point is always centered after it moves off frame. | 21680 If this is zero, point is always centered after it moves off frame. |