[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 9c12c3b7c5: Improve narrowing when iterator has moved outside of
From: |
Gregory Heytings |
Subject: |
master 9c12c3b7c5: Improve narrowing when iterator has moved outside of narrowing bounds. |
Date: |
Fri, 29 Jul 2022 12:29:15 -0400 (EDT) |
branch: master
commit 9c12c3b7c59ee102d3a022368ea050fc9e3bb186
Author: Gregory Heytings <gregory@heytings.org>
Commit: Gregory Heytings <gregory@heytings.org>
Improve narrowing when iterator has moved outside of narrowing bounds.
* src/xdisp.c (get_narrowed_begv, get_narrowed_zv): Add 'pos'
parameter.
(init_iterator): Add arguments to 'get_narrowed_begv' and
'get_narrowed_zv'.
(handle_fontified_prop): Recompute the narrowing when iterator
has moved outside of narrowing bounds.
* src/dispextern.h (get_narrowed_begv, get_narrowed_zv): Adapt
prototypes.
* src/composite.c (find_automatic_composition): Add argument
to 'get_narrowed_begv'.
---
src/composite.c | 2 +-
src/dispextern.h | 4 ++--
src/xdisp.c | 26 +++++++++++++++++---------
3 files changed, 20 insertions(+), 12 deletions(-)
diff --git a/src/composite.c b/src/composite.c
index b04d34337b..0f90b92a78 100644
--- a/src/composite.c
+++ b/src/composite.c
@@ -1599,7 +1599,7 @@ find_automatic_composition (ptrdiff_t pos, ptrdiff_t
limit, ptrdiff_t backlim,
head = backlim;
/* In buffers with very long lines, this function becomes very
slow. Pretend that the buffer is narrowed to make it fast. */
- narrowed_begv = get_narrowed_begv (w);
+ narrowed_begv = get_narrowed_begv (w, window_point (w));
if (narrowed_begv && pos > narrowed_begv)
head = narrowed_begv;
tail = ZV;
diff --git a/src/dispextern.h b/src/dispextern.h
index 2772e8cda8..817211e795 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -3404,8 +3404,8 @@ void mark_window_display_accurate (Lisp_Object, bool);
void redisplay_preserve_echo_area (int);
void init_iterator (struct it *, struct window *, ptrdiff_t,
ptrdiff_t, struct glyph_row *, enum face_id);
-ptrdiff_t get_narrowed_begv (struct window *);
-ptrdiff_t get_narrowed_zv (struct window *);
+ptrdiff_t get_narrowed_begv (struct window *, ptrdiff_t);
+ptrdiff_t get_narrowed_zv (struct window *, ptrdiff_t);
ptrdiff_t get_closer_narrowed_begv (struct window *, ptrdiff_t);
void init_iterator_to_row_start (struct it *, struct window *,
struct glyph_row *);
diff --git a/src/xdisp.c b/src/xdisp.c
index 9580e59601..cdef90b686 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -3427,8 +3427,8 @@ init_iterator (struct it *it, struct window *w,
if (current_buffer->long_line_optimizations_p)
{
- it->narrowed_begv = get_narrowed_begv (w);
- it->narrowed_zv = get_narrowed_zv (w);
+ it->narrowed_begv = get_narrowed_begv (w, window_point (w));
+ it->narrowed_zv = get_narrowed_zv (w, window_point (w));
}
/* If a buffer position was specified, set the iterator there,
@@ -3519,19 +3519,19 @@ get_narrowed_len (struct window *w)
}
ptrdiff_t
-get_narrowed_begv (struct window *w)
+get_narrowed_begv (struct window *w, ptrdiff_t pos)
{
int len = get_narrowed_len (w);
ptrdiff_t begv;
- begv = max ((window_point (w) / len - 1) * len, BEGV);
+ begv = max ((pos / len - 1) * len, BEGV);
return begv == BEGV ? 0 : begv;
}
ptrdiff_t
-get_narrowed_zv (struct window *w)
+get_narrowed_zv (struct window *w, ptrdiff_t pos)
{
int len = get_narrowed_len (w);
- return min ((window_point (w) / len + 1) * len, ZV);
+ return min ((pos / len + 1) * len, ZV);
}
ptrdiff_t
@@ -4408,9 +4408,17 @@ handle_fontified_prop (struct it *it)
eassert (it->end_charpos == ZV);
if (current_buffer->long_line_optimizations_p)
- Fnarrow_to_region (make_fixnum (it->narrowed_begv ?
- it->narrowed_begv : BEGV),
- make_fixnum (it->narrowed_zv), Qt);
+ {
+ ptrdiff_t begv = it->narrowed_begv ? it->narrowed_begv : BEGV;
+ ptrdiff_t zv = it->narrowed_zv;
+ ptrdiff_t charpos = IT_CHARPOS (*it);
+ if (charpos < begv || charpos > zv)
+ {
+ begv = get_narrowed_begv (it->w, charpos);
+ zv = get_narrowed_zv (it->w, charpos);
+ }
+ Fnarrow_to_region (make_fixnum (begv), make_fixnum (zv), Qt);
+ }
/* Don't allow Lisp that runs from 'fontification-functions'
clear our face and image caches behind our back. */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 9c12c3b7c5: Improve narrowing when iterator has moved outside of narrowing bounds.,
Gregory Heytings <=