2000-06-07 Gerd Moellmann <gerd@gnu.org>
+ * window.c (displayed_window_lines): New function.
+ (Fmove_to_window_line): Use displayed_window_lines to determine
+ the number of lines to move, instead of using the window's height.
+
+ * lread.c (readevalloop): If READCHARFUN sets point to ZV, arrange
+ to stop reading, even if the form read sets point to a different
+ value when evaluated.
+
* xdisp.c (display_line): Fix code deciding in which line to
put the cursor.
int count = specpdl_ptr - specpdl;
struct gcpro gcpro1;
struct buffer *b = 0;
+ int continue_reading_p;
if (BUFFERP (readcharfun))
b = XBUFFER (readcharfun);
LOADHIST_ATTACH (sourcename);
- while (1)
+ continue_reading_p = 1;
+ while (continue_reading_p)
{
if (b != 0 && NILP (b->name))
error ("Reading from killed buffer");
{
UNREAD (c);
read_objects = Qnil;
- if (! NILP (readfun))
- val = call1 (readfun, readcharfun);
+ if (!NILP (readfun))
+ {
+ val = call1 (readfun, readcharfun);
+
+ /* If READCHARFUN has set point to ZV, we should
+ stop reading, even if the form read sets point
+ to a different value when evaluated. */
+ if (BUFFERP (readcharfun))
+ {
+ struct buffer *b = XBUFFER (readcharfun);
+ if (BUF_PT (b) == BUF_ZV (b))
+ continue_reading_p = 0;
+ }
+ }
else if (! NILP (Vload_read_function))
val = call1 (Vload_read_function, readcharfun);
else
}
val = (*evalfun) (val);
+
if (printflag)
{
Vvalues = Fcons (val, Vvalues);