diff options
Diffstat (limited to 'src/buffer.c')
| -rw-r--r-- | src/buffer.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/buffer.c b/src/buffer.c index b9c4c853546..4e87498ea51 100644 --- a/src/buffer.c +++ b/src/buffer.c | |||
| @@ -2234,10 +2234,6 @@ DEFUN ("buffer-swap-text", Fbuffer_swap_text, Sbuffer_swap_text, | |||
| 2234 | swapfield (overlay_center, EMACS_INT); | 2234 | swapfield (overlay_center, EMACS_INT); |
| 2235 | swapfield (undo_list, Lisp_Object); | 2235 | swapfield (undo_list, Lisp_Object); |
| 2236 | swapfield (mark, Lisp_Object); | 2236 | swapfield (mark, Lisp_Object); |
| 2237 | if (MARKERP (current_buffer->mark) && XMARKER (current_buffer->mark)->buffer) | ||
| 2238 | XMARKER (current_buffer->mark)->buffer = current_buffer; | ||
| 2239 | if (MARKERP (other_buffer->mark) && XMARKER (other_buffer->mark)->buffer) | ||
| 2240 | XMARKER (other_buffer->mark)->buffer = other_buffer; | ||
| 2241 | swapfield (enable_multibyte_characters, Lisp_Object); | 2237 | swapfield (enable_multibyte_characters, Lisp_Object); |
| 2242 | /* FIXME: Not sure what we should do with these *_marker fields. | 2238 | /* FIXME: Not sure what we should do with these *_marker fields. |
| 2243 | Hopefully they're just nil anyway. */ | 2239 | Hopefully they're just nil anyway. */ |
| @@ -2252,16 +2248,24 @@ DEFUN ("buffer-swap-text", Fbuffer_swap_text, Sbuffer_swap_text, | |||
| 2252 | current_buffer->text->overlay_modiff++; other_buffer->text->overlay_modiff++; | 2248 | current_buffer->text->overlay_modiff++; other_buffer->text->overlay_modiff++; |
| 2253 | current_buffer->text->beg_unchanged = current_buffer->text->gpt; | 2249 | current_buffer->text->beg_unchanged = current_buffer->text->gpt; |
| 2254 | current_buffer->text->end_unchanged = current_buffer->text->gpt; | 2250 | current_buffer->text->end_unchanged = current_buffer->text->gpt; |
| 2255 | other_buffer->text->beg_unchanged = current_buffer->text->gpt; | 2251 | other_buffer->text->beg_unchanged = other_buffer->text->gpt; |
| 2256 | other_buffer->text->end_unchanged = current_buffer->text->gpt; | 2252 | other_buffer->text->end_unchanged = other_buffer->text->gpt; |
| 2257 | { | 2253 | { |
| 2258 | struct Lisp_Marker *m; | 2254 | struct Lisp_Marker *m; |
| 2259 | for (m = BUF_MARKERS (current_buffer); m; m = m->next) | 2255 | for (m = BUF_MARKERS (current_buffer); m; m = m->next) |
| 2260 | if (m->buffer == other_buffer) | 2256 | if (m->buffer == other_buffer) |
| 2261 | m->buffer = current_buffer; | 2257 | m->buffer = current_buffer; |
| 2258 | else | ||
| 2259 | /* Since there's no indirect buffer in sight, markers on | ||
| 2260 | BUF_MARKERS(buf) should either be for `buf' or dead. */ | ||
| 2261 | eassert (!m->buffer); | ||
| 2262 | for (m = BUF_MARKERS (other_buffer); m; m = m->next) | 2262 | for (m = BUF_MARKERS (other_buffer); m; m = m->next) |
| 2263 | if (m->buffer == current_buffer) | 2263 | if (m->buffer == current_buffer) |
| 2264 | m->buffer = other_buffer; | 2264 | m->buffer = other_buffer; |
| 2265 | else | ||
| 2266 | /* Since there's no indirect buffer in sight, markers on | ||
| 2267 | BUF_MARKERS(buf) should either be for `buf' or dead. */ | ||
| 2268 | eassert (!m->buffer); | ||
| 2265 | } | 2269 | } |
| 2266 | { /* Some of the C code expects that w->buffer == w->pointm->buffer. | 2270 | { /* Some of the C code expects that w->buffer == w->pointm->buffer. |
| 2267 | So since we just swapped the markers between the two buffers, we need | 2271 | So since we just swapped the markers between the two buffers, we need |