Mercurial > emacs
changeset 82809:496cd44c3983
(Finsert_file_contents): Consult CHARS_MODIFF to tell
whether decoding has modified buffer contents.
author | Martin Rudalics <rudalics@gmx.at> |
---|---|
date | Fri, 24 Aug 2007 05:35:24 +0000 |
parents | 6e5814967ffb |
children | 1fce1579a68b |
files | src/fileio.c |
diffstat | 1 files changed, 21 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/fileio.c Fri Aug 24 05:27:22 2007 +0000 +++ b/src/fileio.c Fri Aug 24 05:35:24 2007 +0000 @@ -4733,14 +4733,21 @@ int opoint = PT; int opoint_byte = PT_BYTE; int oinserted = ZV - BEGV; + int ochars_modiff = CHARS_MODIFF; TEMP_SET_PT_BOTH (BEGV, BEGV_BYTE); insval = call3 (Qformat_decode, Qnil, make_number (oinserted), visit); CHECK_NUMBER (insval); - if (XINT (insval) == oinserted) + if (ochars_modiff == CHARS_MODIFF) + /* format_decode didn't modify buffer's characters => move + point back to position before inserted text and leave + value of inserted alone. */ SET_PT_BOTH (opoint, opoint_byte); - inserted = XFASTINT (insval); + else + /* format_decode modified buffer's characters => consider + entire buffer changed and leave point at point-min. */ + inserted = XFASTINT (insval); } /* For consistency with format-decode call these now iff inserted > 0 @@ -4763,15 +4770,24 @@ int opoint = PT; int opoint_byte = PT_BYTE; int oinserted = ZV - BEGV; - + int ochars_modiff = CHARS_MODIFF; + TEMP_SET_PT_BOTH (BEGV, BEGV_BYTE); insval = call1 (XCAR (p), make_number (oinserted)); if (!NILP (insval)) { CHECK_NUMBER (insval); - if (XINT (insval) == oinserted) + if (ochars_modiff == CHARS_MODIFF) + /* after_insert_file_functions didn't modify + buffer's characters => move point back to + position before inserted text and leave value of + inserted alone. */ SET_PT_BOTH (opoint, opoint_byte); - inserted = XFASTINT (insval); + else + /* after_insert_file_functions did modify buffer's + characters => consider entire buffer changed and + leave point at point-min. */ + inserted = XFASTINT (insval); } }