# HG changeset patch # User Gerd Moellmann # Date 999173688 0 # Node ID 9819ee584001b26f002b9a92aca4a6efd34de0e1 # Parent ed864621a68ed645d5d615c65754882d5a475422 (Qbuffer_position, Qposition, Qobject): New variables. (syms_of_xdisp): Initialize them. (handle_single_display_prop): Don't change point, bind `object', `position', and `buffer-position' instead to the object having the `display' property, position in the object and position in the buffer. diff -r ed864621a68e -r 9819ee584001 src/xdisp.c --- a/src/xdisp.c Thu Aug 30 12:13:54 2001 +0000 +++ b/src/xdisp.c Thu Aug 30 12:14:48 2001 +0000 @@ -227,6 +227,7 @@ Lisp_Object Qfontified; Lisp_Object Qgrow_only; Lisp_Object Qinhibit_eval_during_redisplay; +Lisp_Object Qbuffer_position, Qposition, Qobject; /* Functions called to fontify regions of text. */ @@ -2815,26 +2816,22 @@ if (!NILP (form) && !EQ (form, Qt)) { + int count = BINDING_STACK_SIZE (); struct gcpro gcpro1; - struct text_pos end_pos, pt; - + + /* Bind `object' to the object having the `display' property, a + buffer or string. Bind `position' to the position in the + object where the property was found, and `buffer-position' + to the current position in the buffer. */ + specbind (Qobject, object); + specbind (Qposition, CHARPOS (*position)); + specbind (Qbuffer_position, (STRINGP (object) + ? make_number (IT_CHARPOS (*it)) + : make_number (CHARPOS (*position)))); GCPRO1 (form); - end_pos = display_prop_end (it, object, *position); - - /* Temporarily set point to the end position, and then evaluate - the form. This makes `(eolp)' work as FORM. */ - if (BUFFERP (object)) - { - CHARPOS (pt) = PT; - BYTEPOS (pt) = PT_BYTE; - TEMP_SET_PT_BOTH (CHARPOS (end_pos), BYTEPOS (end_pos)); - } - form = safe_eval (form); - - if (BUFFERP (object)) - TEMP_SET_PT_BOTH (CHARPOS (pt), BYTEPOS (pt)); - UNGCPRO; + UNGCPRO; + unbind_to (count, Qnil); } if (NILP (form)) @@ -14587,6 +14584,12 @@ staticpro (&Qinhibit_menubar_update); Qinhibit_eval_during_redisplay = intern ("inhibit-eval-during-redisplay"); staticpro (&Qinhibit_eval_during_redisplay); + Qposition = intern ("position"); + staticpro (&Qposition); + Qbuffer_position = intern ("buffer-position"); + staticpro (&Qbuffer_position); + Qobject = intern ("object"); + staticpro (&Qobject); last_arrow_position = Qnil; last_arrow_string = Qnil;