diff options
author | Miles Bader <miles@gnu.org> | 2007-08-13 13:48:35 +0000 |
---|---|---|
committer | Miles Bader <miles@gnu.org> | 2007-08-13 13:48:35 +0000 |
commit | b2e6b10fe2d40020a75ab0025af98a4abf339cd2 (patch) | |
tree | db265e5ea93cdc13f8e3b54ed5c7ad2869d50ec9 /src/xdisp.c | |
parent | 905350bef3ebc514a418658dd155c1d062664b56 (diff) | |
parent | 37cc095b6a175fb5a2fb18fa029eaf3aa3b3fa53 (diff) | |
download | emacs-b2e6b10fe2d40020a75ab0025af98a4abf339cd2.tar.gz emacs-b2e6b10fe2d40020a75ab0025af98a4abf339cd2.tar.bz2 emacs-b2e6b10fe2d40020a75ab0025af98a4abf339cd2.zip |
Merge from emacs--devo--0
Patches applied:
* emacs--devo--0 (patch 846-851)
- Update from CVS
- Merge from emacs--rel--22
* emacs--rel--22 (patch 88-92)
- Update from CVS
- Merge from gnus--rel--5.10
* gnus--rel--5.10 (patch 242-244)
- Update from CVS
Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-246
Diffstat (limited to 'src/xdisp.c')
-rw-r--r-- | src/xdisp.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/xdisp.c b/src/xdisp.c index f18bfc020af..a24dea966cf 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -7245,18 +7245,22 @@ move_it_by_lines (it, dvpos, need_y_p) { struct position pos; - if (!FRAME_WINDOW_P (it->f)) + /* The commented-out optimization uses vmotion on terminals. This + gives bad results, because elements like it->what, on which + callers such as pos_visible_p rely, aren't updated. */ + /* if (!FRAME_WINDOW_P (it->f)) { struct text_pos textpos; - /* We can use vmotion on frames without proportional fonts. */ pos = *vmotion (IT_CHARPOS (*it), dvpos, it->w); SET_TEXT_POS (textpos, pos.bufpos, pos.bytepos); reseat (it, textpos, 1); it->vpos += pos.vpos; it->current_y += pos.vpos; } - else if (dvpos == 0) + else */ + + if (dvpos == 0) { /* DVPOS == 0 means move to the start of the screen line. */ move_it_vertically_backward (it, 0); @@ -13669,7 +13673,10 @@ redisplay_window (window, just_this_one_p) /* Restore current_buffer and value of point in it. */ TEMP_SET_PT_BOTH (CHARPOS (opoint), BYTEPOS (opoint)); set_buffer_internal_1 (old); - TEMP_SET_PT_BOTH (CHARPOS (lpoint), BYTEPOS (lpoint)); + /* Avoid an abort in TEMP_SET_PT_BOTH if the buffer has become + shorter. This can be caused by log truncation in *Messages*. */ + if (CHARPOS (lpoint) <= ZV) + TEMP_SET_PT_BOTH (CHARPOS (lpoint), BYTEPOS (lpoint)); unbind_to (count, Qnil); } |