aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGregory Heytings2022-11-27 22:53:20 +0000
committerGregory Heytings2022-11-27 23:53:51 +0100
commit6d3cea2c8edde5ee8d6d8fe1364cd318e3270515 (patch)
tree1ecd92a0b4388d95d9f7ede88d50c526566b2ca5
parentd5dc1dbf7cb263d8ff541a0def028c2d7d24f82b (diff)
downloademacs-6d3cea2c8edde5ee8d6d8fe1364cd318e3270515.tar.gz
emacs-6d3cea2c8edde5ee8d6d8fe1364cd318e3270515.zip
Minor improvements to locked narrowing
* src/xdisp.c (get_locked_narrowing_begv) (get_locked_narrowing_zv): Safer handling of negative values. (handle_fontified_prop): Do not use locked narrowing if the region size is <= 0. * src/keyboard.c (safe_run_hooks_maybe_narrowed): Do not use locked narrowing if the region size is <= 0.
-rw-r--r--src/keyboard.c3
-rw-r--r--src/xdisp.c9
2 files changed, 7 insertions, 5 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index b82a5e1a3ef..ac40ba059ea 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -1910,7 +1910,8 @@ safe_run_hooks_maybe_narrowed (Lisp_Object hook, struct window *w)
1910 1910
1911 specbind (Qinhibit_quit, Qt); 1911 specbind (Qinhibit_quit, Qt);
1912 1912
1913 if (current_buffer->long_line_optimizations_p) 1913 if (current_buffer->long_line_optimizations_p
1914 && long_line_locked_narrowing_region_size > 0)
1914 narrow_to_region_locked (make_fixnum (get_locked_narrowing_begv (PT)), 1915 narrow_to_region_locked (make_fixnum (get_locked_narrowing_begv (PT)),
1915 make_fixnum (get_locked_narrowing_zv (PT)), 1916 make_fixnum (get_locked_narrowing_zv (PT)),
1916 hook); 1917 hook);
diff --git a/src/xdisp.c b/src/xdisp.c
index 0002c3d611c..d423a77bde0 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -3536,12 +3536,12 @@ get_closer_narrowed_begv (struct window *w, ptrdiff_t pos)
3536ptrdiff_t 3536ptrdiff_t
3537get_locked_narrowing_begv (ptrdiff_t pos) 3537get_locked_narrowing_begv (ptrdiff_t pos)
3538{ 3538{
3539 if (long_line_locked_narrowing_region_size == 0) 3539 if (long_line_locked_narrowing_region_size <= 0)
3540 return BEGV; 3540 return BEGV;
3541 int len = long_line_locked_narrowing_region_size / 2; 3541 int len = long_line_locked_narrowing_region_size / 2;
3542 int begv = max (pos - len, BEGV); 3542 int begv = max (pos - len, BEGV);
3543 int limit = long_line_locked_narrowing_bol_search_limit; 3543 int limit = long_line_locked_narrowing_bol_search_limit;
3544 while (limit) 3544 while (limit > 0)
3545 { 3545 {
3546 if (begv == BEGV || FETCH_BYTE (CHAR_TO_BYTE (begv) - 1) == '\n') 3546 if (begv == BEGV || FETCH_BYTE (CHAR_TO_BYTE (begv) - 1) == '\n')
3547 return begv; 3547 return begv;
@@ -3554,7 +3554,7 @@ get_locked_narrowing_begv (ptrdiff_t pos)
3554ptrdiff_t 3554ptrdiff_t
3555get_locked_narrowing_zv (ptrdiff_t pos) 3555get_locked_narrowing_zv (ptrdiff_t pos)
3556{ 3556{
3557 if (long_line_locked_narrowing_region_size == 0) 3557 if (long_line_locked_narrowing_region_size <= 0)
3558 return ZV; 3558 return ZV;
3559 int len = long_line_locked_narrowing_region_size / 2; 3559 int len = long_line_locked_narrowing_region_size / 2;
3560 return min (pos + len, ZV); 3560 return min (pos + len, ZV);
@@ -4393,7 +4393,8 @@ handle_fontified_prop (struct it *it)
4393 4393
4394 eassert (it->end_charpos == ZV); 4394 eassert (it->end_charpos == ZV);
4395 4395
4396 if (current_buffer->long_line_optimizations_p) 4396 if (current_buffer->long_line_optimizations_p
4397 && long_line_locked_narrowing_region_size > 0)
4397 { 4398 {
4398 ptrdiff_t begv = it->locked_narrowing_begv; 4399 ptrdiff_t begv = it->locked_narrowing_begv;
4399 ptrdiff_t zv = it->locked_narrowing_zv; 4400 ptrdiff_t zv = it->locked_narrowing_zv;