mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-13 23:10:26 -08:00
Further improvements to long lines handling.
* src/xdisp.c (get_visually_first_element): Fix segfault. (get_narrowed_begv): Specific improvement for character-only terminals.
This commit is contained in:
parent
66704fbbcf
commit
cc7f37b2a4
1 changed files with 16 additions and 3 deletions
19
src/xdisp.c
19
src/xdisp.c
|
|
@ -3501,9 +3501,12 @@ init_iterator (struct it *it, struct window *w,
|
|||
ptrdiff_t
|
||||
get_narrowed_begv (struct window *w)
|
||||
{
|
||||
int len; ptrdiff_t begv;
|
||||
len = 3 * (window_body_width (w, WINDOW_BODY_IN_CANONICAL_CHARS) *
|
||||
window_body_height (w, WINDOW_BODY_IN_CANONICAL_CHARS));
|
||||
int len, fact; ptrdiff_t begv;
|
||||
/* In a character-only terminal, only one font size is used, so we
|
||||
can use a smaller factor. */
|
||||
fact = EQ (Fterminal_live_p (Qnil), Qt) ? 2 : 3;
|
||||
len = fact * (window_body_width (w, WINDOW_BODY_IN_CANONICAL_CHARS) *
|
||||
window_body_height (w, WINDOW_BODY_IN_CANONICAL_CHARS));
|
||||
begv = max ((window_point (w) / len - 1) * len, BEGV);
|
||||
return begv == BEGV ? 0 : begv;
|
||||
}
|
||||
|
|
@ -8668,6 +8671,16 @@ get_visually_first_element (struct it *it)
|
|||
|
||||
SET_WITH_NARROWED_BEGV (it, bob, string_p ? 0 : BEGV);
|
||||
|
||||
/* Reseat again when, as a consequence of the SET_WITH_NARROWED_BEGV
|
||||
above, the iterator is before bob. */
|
||||
if (!string_p && IT_CHARPOS (*it) < bob)
|
||||
{
|
||||
struct text_pos pos;
|
||||
pos.charpos = bob;
|
||||
pos.bytepos = CHAR_TO_BYTE (bob);
|
||||
reseat (it, pos, true);
|
||||
}
|
||||
|
||||
if (STRINGP (it->string))
|
||||
{
|
||||
it->bidi_it.charpos = IT_STRING_CHARPOS (*it);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue