diff options
Diffstat (limited to 'src/xdisp.c')
-rw-r--r-- | src/xdisp.c | 164 |
1 files changed, 48 insertions, 116 deletions
diff --git a/src/xdisp.c b/src/xdisp.c index aa5bfcbcbe4..58a4f43be81 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -324,52 +324,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #define INFINITY 10000000 -Lisp_Object Qoverriding_local_map, Qoverriding_terminal_local_map; -Lisp_Object Qwindow_scroll_functions; -static Lisp_Object Qwindow_text_change_functions; -static Lisp_Object Qredisplay_end_trigger_functions; -Lisp_Object Qinhibit_point_motion_hooks; -static Lisp_Object QCeval, QCpropertize; -Lisp_Object QCfile, QCdata; -static Lisp_Object Qfontified; -static Lisp_Object Qgrow_only; -static Lisp_Object Qinhibit_eval_during_redisplay; -static Lisp_Object Qbuffer_position, Qposition, Qobject; -static Lisp_Object Qright_to_left, Qleft_to_right; - -/* Cursor shapes. */ -Lisp_Object Qbar, Qhbar, Qbox, Qhollow; - -/* Pointer shapes. */ -static Lisp_Object Qarrow, Qhand; -Lisp_Object Qtext; - /* Holds the list (error). */ static Lisp_Object list_of_error; -Lisp_Object Qfontification_functions; - -static Lisp_Object Qwrap_prefix; -static Lisp_Object Qline_prefix; -static Lisp_Object Qredisplay_internal; - -/* Non-nil means don't actually do any redisplay. */ - -Lisp_Object Qinhibit_redisplay; - -/* Names of text properties relevant for redisplay. */ - -Lisp_Object Qdisplay; - -Lisp_Object Qspace, QCalign_to; -static Lisp_Object QCrelative_width, QCrelative_height; -Lisp_Object Qleft_margin, Qright_margin; -static Lisp_Object Qspace_width, Qraise; -static Lisp_Object Qslice; -Lisp_Object Qcenter; -static Lisp_Object Qmargin, Qpointer; -static Lisp_Object Qline_height; - #ifdef HAVE_WINDOW_SYSTEM /* Test if overflow newline into fringe. Called with iterator IT @@ -403,31 +360,6 @@ static Lisp_Object Qline_height; && (*BYTE_POS_ADDR (IT_BYTEPOS (*it)) == ' ' \ || *BYTE_POS_ADDR (IT_BYTEPOS (*it)) == '\t')))) \ -/* Name of the face used to highlight trailing whitespace. */ - -static Lisp_Object Qtrailing_whitespace; - -/* Name and number of the face used to highlight escape glyphs. */ - -static Lisp_Object Qescape_glyph; - -/* Name and number of the face used to highlight non-breaking spaces. */ - -static Lisp_Object Qnobreak_space; - -/* The symbol `image' which is the car of the lists used to represent - images in Lisp. Also a tool bar style. */ - -Lisp_Object Qimage; - -/* The image map types. */ -Lisp_Object QCmap; -static Lisp_Object QCpointer; -static Lisp_Object Qrect, Qcircle, Qpoly; - -/* Tool bar styles */ -Lisp_Object Qboth, Qboth_horiz, Qtext_image_horiz; - /* Non-zero means print newline to stdout before next mini-buffer message. */ @@ -477,21 +409,6 @@ static struct text_pos this_line_min_pos; static struct buffer *this_line_buffer; - -/* Values of those variables at last redisplay are stored as - properties on `overlay-arrow-position' symbol. However, if - Voverlay_arrow_position is a marker, last-arrow-position is its - numerical position. */ - -static Lisp_Object Qlast_arrow_position, Qlast_arrow_string; - -/* Alternative overlay-arrow-string and overlay-arrow-bitmap - properties on a symbol in overlay-arrow-variable-list. */ - -static Lisp_Object Qoverlay_arrow_string, Qoverlay_arrow_bitmap; - -Lisp_Object Qmenu_bar_update_hook; - /* Nonzero if an overlay arrow has been displayed in this window. */ static bool overlay_arrow_seen; @@ -567,11 +484,6 @@ static bool display_last_displayed_message_p; static bool message_buf_print; -/* The symbol `inhibit-menubar-update' and its DEFVAR_BOOL variable. */ - -static Lisp_Object Qinhibit_menubar_update; -static Lisp_Object Qmessage_truncate_lines; - /* Set to 1 in clear_message to make redisplay_internal aware of an emptied echo area. */ @@ -691,8 +603,6 @@ int trace_move; #define TRACE_MOVE(x) (void) 0 #endif -static Lisp_Object Qauto_hscroll_mode; - /* Buffer being redisplayed -- for redisplay_window_error. */ static struct buffer *displayed_buffer; @@ -713,7 +623,7 @@ enum prop_handled struct props { /* The name of the property. */ - Lisp_Object *name; + struct Lisp_Symbol *name; /* A unique index for the property. */ enum prop_idx idx; @@ -734,13 +644,13 @@ static enum prop_handled handle_fontified_prop (struct it *); static struct props it_props[] = { - {&Qfontified, FONTIFIED_PROP_IDX, handle_fontified_prop}, + {XSYMBOL_INIT (Qfontified), FONTIFIED_PROP_IDX, handle_fontified_prop}, /* Handle `face' before `display' because some sub-properties of `display' need to know the face. */ - {&Qface, FACE_PROP_IDX, handle_face_prop}, - {&Qdisplay, DISPLAY_PROP_IDX, handle_display_prop}, - {&Qinvisible, INVISIBLE_PROP_IDX, handle_invisible_prop}, - {&Qcomposition, COMPOSITION_PROP_IDX, handle_composition_prop}, + {XSYMBOL_INIT (Qface), FACE_PROP_IDX, handle_face_prop}, + {XSYMBOL_INIT (Qdisplay), DISPLAY_PROP_IDX, handle_display_prop}, + {XSYMBOL_INIT (Qinvisible), INVISIBLE_PROP_IDX, handle_invisible_prop}, + {XSYMBOL_INIT (Qcomposition), COMPOSITION_PROP_IDX, handle_composition_prop}, {NULL, 0, NULL} }; @@ -796,9 +706,6 @@ static struct glyph_slice null_glyph_slice = { 0, 0, 0, 0 }; bool redisplaying_p; -static Lisp_Object Qinhibit_free_realized_faces; -static Lisp_Object Qmode_line_default_help_echo; - /* If a string, XTread_socket generates an event to display that string. (The display is done in read_char.) */ @@ -824,15 +731,6 @@ static struct atimer *hourglass_atimer; #endif /* HAVE_WINDOW_SYSTEM */ -/* Name of the face used to display glyphless characters. */ -static Lisp_Object Qglyphless_char; - -/* Symbol for the purpose of Vglyphless_char_display. */ -static Lisp_Object Qglyphless_char_display; - -/* Method symbols for Vglyphless_char_display. */ -static Lisp_Object Qhex_code, Qempty_box, Qthin_space, Qzero_width; - /* Default number of seconds to wait before displaying an hourglass cursor. */ #define DEFAULT_HOURGLASS_DELAY 1 @@ -2696,8 +2594,6 @@ safe__call1 (bool inhibit_quit, Lisp_Object fn, ...) return retval; } -static Lisp_Object Qeval; - Lisp_Object safe_eval (Lisp_Object sexpr) { @@ -3620,7 +3516,7 @@ compute_stop_pos (struct it *it) /* Get properties here. */ for (p = it_props; p->handler; ++p) - values_here[p->idx] = textget (iv->plist, *p->name); + values_here[p->idx] = textget (iv->plist, make_lisp_symbol (p->name)); /* Look for an interval following iv that has different properties. */ @@ -3632,9 +3528,8 @@ compute_stop_pos (struct it *it) { for (p = it_props; p->handler; ++p) { - Lisp_Object new_value; - - new_value = textget (next_iv->plist, *p->name); + Lisp_Object new_value = textget (next_iv->plist, + make_lisp_symbol (p->name)); if (!EQ (values_here[p->idx], new_value)) break; } @@ -13478,7 +13373,7 @@ redisplay_internal (void) specbind (Qinhibit_free_realized_faces, Qnil); /* Record this function, so it appears on the profiler's backtraces. */ - record_in_backtrace (Qredisplay_internal, &Qnil, 0); + record_in_backtrace (Qredisplay_internal, 0, 0); FOR_EACH_FRAME (tail, frame) XFRAME (frame)->already_hscrolled_p = 0; @@ -30571,7 +30466,9 @@ syms_of_xdisp (void) Vmessage_stack = Qnil; staticpro (&Vmessage_stack); + /* Non-nil means don't actually do any redisplay. */ DEFSYM (Qinhibit_redisplay, "inhibit-redisplay"); + DEFSYM (Qredisplay_internal, "redisplay_internal (C function)"); message_dolog_marker1 = Fmake_marker (); @@ -30610,6 +30507,8 @@ syms_of_xdisp (void) DEFSYM (Qinhibit_point_motion_hooks, "inhibit-point-motion-hooks"); DEFSYM (Qeval, "eval"); DEFSYM (QCdata, ":data"); + + /* Names of text properties relevant for redisplay. */ DEFSYM (Qdisplay, "display"); DEFSYM (Qspace_width, "space-width"); DEFSYM (Qraise, "raise"); @@ -30629,40 +30528,69 @@ syms_of_xdisp (void) DEFSYM (QCfile, ":file"); DEFSYM (Qfontified, "fontified"); DEFSYM (Qfontification_functions, "fontification-functions"); + + /* Name of the face used to highlight trailing whitespace. */ DEFSYM (Qtrailing_whitespace, "trailing-whitespace"); + + /* Name and number of the face used to highlight escape glyphs. */ DEFSYM (Qescape_glyph, "escape-glyph"); + + /* Name and number of the face used to highlight non-breaking spaces. */ DEFSYM (Qnobreak_space, "nobreak-space"); + + /* The symbol 'image' which is the car of the lists used to represent + images in Lisp. Also a tool bar style. */ DEFSYM (Qimage, "image"); + + /* Tool bar styles. */ DEFSYM (Qtext, "text"); DEFSYM (Qboth, "both"); DEFSYM (Qboth_horiz, "both-horiz"); DEFSYM (Qtext_image_horiz, "text-image-horiz"); + + /* The image map types. */ DEFSYM (QCmap, ":map"); DEFSYM (QCpointer, ":pointer"); DEFSYM (Qrect, "rect"); DEFSYM (Qcircle, "circle"); DEFSYM (Qpoly, "poly"); + + /* The symbol `inhibit-menubar-update' and its DEFVAR_BOOL variable. */ + DEFSYM (Qinhibit_menubar_update, "inhibit-menubar-update"); DEFSYM (Qmessage_truncate_lines, "message-truncate-lines"); + DEFSYM (Qgrow_only, "grow-only"); - DEFSYM (Qinhibit_menubar_update, "inhibit-menubar-update"); DEFSYM (Qinhibit_eval_during_redisplay, "inhibit-eval-during-redisplay"); DEFSYM (Qposition, "position"); DEFSYM (Qbuffer_position, "buffer-position"); DEFSYM (Qobject, "object"); + + /* Cursor shapes. */ DEFSYM (Qbar, "bar"); DEFSYM (Qhbar, "hbar"); DEFSYM (Qbox, "box"); DEFSYM (Qhollow, "hollow"); + + /* Pointer shapes. */ DEFSYM (Qhand, "hand"); DEFSYM (Qarrow, "arrow"); + /* also Qtext */ + DEFSYM (Qinhibit_free_realized_faces, "inhibit-free-realized-faces"); list_of_error = list1 (list2 (intern_c_string ("error"), intern_c_string ("void-variable"))); staticpro (&list_of_error); + /* Values of those variables at last redisplay are stored as + properties on 'overlay-arrow-position' symbol. However, if + Voverlay_arrow_position is a marker, last-arrow-position is its + numerical position. */ DEFSYM (Qlast_arrow_position, "last-arrow-position"); DEFSYM (Qlast_arrow_string, "last-arrow-string"); + + /* Alternative overlay-arrow-string and overlay-arrow-bitmap + properties on a symbol in overlay-arrow-variable-list. */ DEFSYM (Qoverlay_arrow_string, "overlay-arrow-string"); DEFSYM (Qoverlay_arrow_bitmap, "overlay-arrow-bitmap"); @@ -31162,7 +31090,10 @@ cursor shapes. */); hourglass_shown_p = 0; #endif /* HAVE_WINDOW_SYSTEM */ + /* Name of the face used to display glyphless characters. */ DEFSYM (Qglyphless_char, "glyphless-char"); + + /* Method symbols for Vglyphless_char_display. */ DEFSYM (Qhex_code, "hex-code"); DEFSYM (Qempty_box, "empty-box"); DEFSYM (Qthin_space, "thin-space"); @@ -31175,6 +31106,7 @@ be redisplayed. This set can be nil (meaning, only the selected window), or t (meaning all windows). */); Vpre_redisplay_function = intern ("ignore"); + /* Symbol for the purpose of Vglyphless_char_display. */ DEFSYM (Qglyphless_char_display, "glyphless-char-display"); Fput (Qglyphless_char_display, Qchar_table_extra_slots, make_number (1)); |