Mercurial > emacs
changeset 39033:9819ee584001
(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.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Thu, 30 Aug 2001 12:14:48 +0000 |
parents | ed864621a68e |
children | fe47985d622a |
files | src/xdisp.c |
diffstat | 1 files changed, 20 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- 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;