summaryrefslogtreecommitdiff
path: root/src/indent.c
diff options
context:
space:
mode:
authorMartin Rudalics <rudalics@gmx.at>2011-07-14 10:30:34 +0200
committerMartin Rudalics <rudalics@gmx.at>2011-07-14 10:30:34 +0200
commitadc47434a27e5f4a9733e657584823508f8ab952 (patch)
tree39e196ed7783f1d0b6dcd3716064ed585a073084 /src/indent.c
parent7e5bfb8fec244ab07253d1dd95fcef0673b89cbc (diff)
downloademacs-adc47434a27e5f4a9733e657584823508f8ab952.tar.gz
Fix bugs in vertical-motion and display-buffer-normalize-special.
* indent.c (Fvertical_motion): Set and restore w->pointm when saving and restoring the window's buffer (Bug#9006). * window.el (display-buffer-normalize-special): Replace `dedicated' by `dedicate' to dedicate window (Bug#9072).
Diffstat (limited to 'src/indent.c')
-rw-r--r--src/indent.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/indent.c b/src/indent.c
index 5c5966175aa..02eeb7f17d4 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -1985,7 +1985,8 @@ whether or not it is currently displayed in some window. */)
struct text_pos pt;
struct window *w;
Lisp_Object old_buffer;
- struct gcpro gcpro1;
+ EMACS_INT old_charpos, old_bytepos;
+ struct gcpro gcpro1, gcpro2, gcpro3;
Lisp_Object lcols = Qnil;
double cols IF_LINT (= 0);
@@ -2005,12 +2006,16 @@ whether or not it is currently displayed in some window. */)
w = XWINDOW (window);
old_buffer = Qnil;
- GCPRO1 (old_buffer);
+ GCPRO3 (old_buffer, old_charpos, old_bytepos);
if (XBUFFER (w->buffer) != current_buffer)
{
/* Set the window's buffer temporarily to the current buffer. */
old_buffer = w->buffer;
+ old_charpos = XMARKER (w->pointm)->charpos;
+ old_bytepos = XMARKER (w->pointm)->bytepos;
XSETBUFFER (w->buffer, current_buffer);
+ set_marker_both
+ (w->pointm, w->buffer, BUF_PT (current_buffer), BUF_PT_BYTE (current_buffer));
}
if (noninteractive)
@@ -2131,7 +2136,10 @@ whether or not it is currently displayed in some window. */)
}
if (BUFFERP (old_buffer))
- w->buffer = old_buffer;
+ {
+ w->buffer = old_buffer;
+ set_marker_both (w->pointm, w->buffer, old_charpos, old_bytepos);
+ }
RETURN_UNGCPRO (make_number (it.vpos));
}