diff options
| author | Eli Zaretskii | 2016-07-30 11:23:10 +0300 |
|---|---|---|
| committer | Eli Zaretskii | 2016-07-30 11:23:10 +0300 |
| commit | 9c542a23a83d1fc883bd942d805259d061e0d189 (patch) | |
| tree | 53e3571278f70b29105d314b02f2d6c1832e8c6a /src/coding.c | |
| parent | 4a5b6e621c68172bb69d60fe8a76932f7c779f81 (diff) | |
| download | emacs-9c542a23a83d1fc883bd942d805259d061e0d189.tar.gz emacs-9c542a23a83d1fc883bd942d805259d061e0d189.zip | |
Avoid warnings about undo list while decoding
* src/coding.c (coding_restore_undo_list): New function.
(decode_coding_gap, decode_coding_object): Temporarily set the
buffer's undo list to t, to avoid warnings when decoding changes
the buffer many times, e.g. due to post-read-conversion. Use
coding_restore_undo_list to make sure the undo list is restored.
(Bug#23813)
Diffstat (limited to 'src/coding.c')
| -rw-r--r-- | src/coding.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/coding.c b/src/coding.c index a8ddc817565..b82d4f5cda9 100644 --- a/src/coding.c +++ b/src/coding.c | |||
| @@ -7851,6 +7851,15 @@ code_conversion_save (bool with_work_buf, bool multibyte) | |||
| 7851 | return workbuf; | 7851 | return workbuf; |
| 7852 | } | 7852 | } |
| 7853 | 7853 | ||
| 7854 | static void | ||
| 7855 | coding_restore_undo_list (Lisp_Object arg) | ||
| 7856 | { | ||
| 7857 | Lisp_Object undo_list = XCAR (arg); | ||
| 7858 | struct buffer *buf = XBUFFER (XCDR (arg)); | ||
| 7859 | |||
| 7860 | bset_undo_list (buf, undo_list); | ||
| 7861 | } | ||
| 7862 | |||
| 7854 | void | 7863 | void |
| 7855 | decode_coding_gap (struct coding_system *coding, | 7864 | decode_coding_gap (struct coding_system *coding, |
| 7856 | ptrdiff_t chars, ptrdiff_t bytes) | 7865 | ptrdiff_t chars, ptrdiff_t bytes) |
| @@ -7963,13 +7972,19 @@ decode_coding_gap (struct coding_system *coding, | |||
| 7963 | { | 7972 | { |
| 7964 | ptrdiff_t prev_Z = Z, prev_Z_BYTE = Z_BYTE; | 7973 | ptrdiff_t prev_Z = Z, prev_Z_BYTE = Z_BYTE; |
| 7965 | Lisp_Object val; | 7974 | Lisp_Object val; |
| 7975 | Lisp_Object undo_list = BVAR (current_buffer, undo_list); | ||
| 7976 | ptrdiff_t count1 = SPECPDL_INDEX (); | ||
| 7966 | 7977 | ||
| 7978 | record_unwind_protect (coding_restore_undo_list, | ||
| 7979 | Fcons (undo_list, Fcurrent_buffer ())); | ||
| 7980 | bset_undo_list (current_buffer, Qt); | ||
| 7967 | TEMP_SET_PT_BOTH (coding->dst_pos, coding->dst_pos_byte); | 7981 | TEMP_SET_PT_BOTH (coding->dst_pos, coding->dst_pos_byte); |
| 7968 | val = call1 (CODING_ATTR_POST_READ (attrs), | 7982 | val = call1 (CODING_ATTR_POST_READ (attrs), |
| 7969 | make_number (coding->produced_char)); | 7983 | make_number (coding->produced_char)); |
| 7970 | CHECK_NATNUM (val); | 7984 | CHECK_NATNUM (val); |
| 7971 | coding->produced_char += Z - prev_Z; | 7985 | coding->produced_char += Z - prev_Z; |
| 7972 | coding->produced += Z_BYTE - prev_Z_BYTE; | 7986 | coding->produced += Z_BYTE - prev_Z_BYTE; |
| 7987 | unbind_to (count1, Qnil); | ||
| 7973 | } | 7988 | } |
| 7974 | 7989 | ||
| 7975 | unbind_to (count, Qnil); | 7990 | unbind_to (count, Qnil); |
| @@ -8110,13 +8125,19 @@ decode_coding_object (struct coding_system *coding, | |||
| 8110 | { | 8125 | { |
| 8111 | ptrdiff_t prev_Z = Z, prev_Z_BYTE = Z_BYTE; | 8126 | ptrdiff_t prev_Z = Z, prev_Z_BYTE = Z_BYTE; |
| 8112 | Lisp_Object val; | 8127 | Lisp_Object val; |
| 8128 | Lisp_Object undo_list = BVAR (current_buffer, undo_list); | ||
| 8129 | ptrdiff_t count1 = SPECPDL_INDEX (); | ||
| 8113 | 8130 | ||
| 8131 | record_unwind_protect (coding_restore_undo_list, | ||
| 8132 | Fcons (undo_list, Fcurrent_buffer ())); | ||
| 8133 | bset_undo_list (current_buffer, Qt); | ||
| 8114 | TEMP_SET_PT_BOTH (coding->dst_pos, coding->dst_pos_byte); | 8134 | TEMP_SET_PT_BOTH (coding->dst_pos, coding->dst_pos_byte); |
| 8115 | val = safe_call1 (CODING_ATTR_POST_READ (attrs), | 8135 | val = safe_call1 (CODING_ATTR_POST_READ (attrs), |
| 8116 | make_number (coding->produced_char)); | 8136 | make_number (coding->produced_char)); |
| 8117 | CHECK_NATNUM (val); | 8137 | CHECK_NATNUM (val); |
| 8118 | coding->produced_char += Z - prev_Z; | 8138 | coding->produced_char += Z - prev_Z; |
| 8119 | coding->produced += Z_BYTE - prev_Z_BYTE; | 8139 | coding->produced += Z_BYTE - prev_Z_BYTE; |
| 8140 | unbind_to (count1, Qnil); | ||
| 8120 | } | 8141 | } |
| 8121 | 8142 | ||
| 8122 | if (EQ (dst_object, Qt)) | 8143 | if (EQ (dst_object, Qt)) |