summaryrefslogtreecommitdiff
path: root/src/window.c
diff options
context:
space:
mode:
authorGerd Moellmann <gerd@gnu.org>2000-08-10 19:14:59 +0000
committerGerd Moellmann <gerd@gnu.org>2000-08-10 19:14:59 +0000
commitcbc099e58429f712b1f88c1ee9b85457ce6e6c0e (patch)
tree7c4ef99ddce4344952ba3bb70d9d5065d77ce539 /src/window.c
parent92f424dfc0fa8a5943c6072fce1d3ddefb87880d (diff)
downloademacs-cbc099e58429f712b1f88c1ee9b85457ce6e6c0e.tar.gz
(Fwindow_end): Rewritten to not use Fvertical_motion,
because that function doesn't cope with variable-height lines.
Diffstat (limited to 'src/window.c')
-rw-r--r--src/window.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/src/window.c b/src/window.c
index 6dbe93be67e..b375d9b69f8 100644
--- a/src/window.c
+++ b/src/window.c
@@ -783,29 +783,29 @@ if it isn't already recorded.")
&& ! (! NILP (w->window_end_valid)
&& XFASTINT (w->last_modified) >= MODIFF))
{
- int opoint = PT, opoint_byte = PT_BYTE;
+ struct text_pos startp;
+ struct it it;
/* In case W->start is out of the range, use something
reasonable. This situation occured when loading a file with
`-l' containing a call to `rmail' with subsequent other
commands. At the end, W->start happened to be BEG, while
- rmail had already narrowed the buffer. This leads to an
- abort in temp_set_pt_both. */
+ rmail had already narrowed the buffer. */
if (XMARKER (w->start)->charpos < BEGV)
- TEMP_SET_PT_BOTH (BEGV, BEGV_BYTE);
+ SET_TEXT_POS (startp, BEGV, BEGV_BYTE);
else if (XMARKER (w->start)->charpos > ZV)
- TEMP_SET_PT_BOTH (ZV, ZV_BYTE);
+ SET_TEXT_POS (startp, ZV, ZV_BYTE);
else
- TEMP_SET_PT_BOTH (XMARKER (w->start)->charpos,
- XMARKER (w->start)->bytepos);
-
- Fvertical_motion (make_number (window_internal_height (w)), Qnil);
- XSETINT (value, PT);
- TEMP_SET_PT_BOTH (opoint, opoint_byte);
+ SET_TEXT_POS_FROM_MARKER (startp, w->start);
+
+ /* Cannot use Fvertical_motion because that function doesn't
+ cope with variable-height lines. */
+ start_display (&it, w, startp);
+ move_it_vertically (&it, window_box_height (w));
+ value = make_number (IT_CHARPOS (it));
}
else
- XSETINT (value,
- BUF_Z (XBUFFER (buf)) - XFASTINT (w->window_end_pos));
+ XSETINT (value, BUF_Z (XBUFFER (buf)) - XFASTINT (w->window_end_pos));
return value;
}