1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-25 07:28:20 +00:00

Make overlays-in treat zero-length overlays at point-max consistently

* doc/lispref/display.texi (Finding Overlays): Adjust documentation.

* src/buffer.c (overlays_in): Treat the end of the buffer and the
end of the narrowed-to buffer the same (bug#19422).
(Foverlays_in): Adjust doc string.
This commit is contained in:
Lars Ingebrigtsen 2021-08-16 15:40:43 +02:00
parent a3b31302dd
commit 5d7b1d5fc7
4 changed files with 35 additions and 4 deletions

View File

@ -1917,7 +1917,8 @@ This function returns a list of the overlays that overlap the region
contains one or more characters in the region; empty overlays
(@pxref{Managing Overlays, empty overlay}) overlap if they are at
@var{beg}, strictly between @var{beg} and @var{end}, or at @var{end}
when @var{end} denotes the position at the end of the buffer.
when @var{end} denotes the position at the end of the accessible part
of the buffer.
@end defun
@defun next-overlay-change pos

View File

@ -3080,6 +3080,14 @@ This is to keep the same behavior as Eshell.
* Incompatible Lisp Changes in Emacs 28.1
+++
** 'overlays-in' now handles zero-length overlays slightly differently.
Previosly, zero-length overlays at the end of the buffer were included
in the result (if the region queried for stopped at that position).
The same was not the case if the buffer had been narrowed to exclude
the real end of the buffer. This has now been changed, and
zero-length overlays at `point-max' are always included in the results.
---
** 'replace-match' now runs modification hooks slightly later.
The function is documented to leave point after the replacement text,

View File

@ -2995,7 +2995,7 @@ overlays_in (EMACS_INT beg, EMACS_INT end, bool extend,
ptrdiff_t next = ZV;
ptrdiff_t prev = BEGV;
bool inhibit_storing = 0;
bool end_is_Z = end == Z;
bool end_is_Z = end == ZV;
for (struct Lisp_Overlay *tail = current_buffer->overlays_before;
tail; tail = tail->next)
@ -4268,9 +4268,10 @@ DEFUN ("overlays-in", Foverlays_in, Soverlays_in, 2, 2, 0,
doc: /* Return a list of the overlays that overlap the region BEG ... END.
Overlap means that at least one character is contained within the overlay
and also contained within the specified region.
Empty overlays are included in the result if they are located at BEG,
between BEG and END, or at END provided END denotes the position at the
end of the buffer. */)
end of the accessible part of the buffer. */)
(Lisp_Object beg, Lisp_Object end)
{
ptrdiff_t len, noverlays;

View File

@ -754,7 +754,7 @@ with parameters from the *Messages* buffer modification."
(should-length 2 (overlays-in 1 (point-max)))
(should-length 1 (overlays-in (point-max) (point-max)))
(narrow-to-region 1 50)
(should-length 0 (overlays-in 1 (point-max)))
(should-length 1 (overlays-in 1 (point-max)))
(should-length 1 (overlays-in (point-max) (point-max))))))
@ -1399,4 +1399,25 @@ with parameters from the *Messages* buffer modification."
(should (memq long-overlay (overlays-in 3 3)))
(should (memq zero-overlay (overlays-in 3 3))))))
(ert-deftest test-remove-overlays ()
(with-temp-buffer
(insert "foo")
(make-overlay (point) (point))
(should (= (length (overlays-in (point-min) (point-max))) 1))
(remove-overlays)
(should (= (length (overlays-in (point-min) (point-max))) 0)))
(with-temp-buffer
(insert "foo")
(goto-char 2)
(make-overlay (point) (point))
;; We only count zero-length overlays at the end of the buffer.
(should (= (length (overlays-in 1 2)) 0))
(narrow-to-region 1 2)
;; We've now narrowed, so the zero-length overlay is at the end of
;; the (accessible part of the) buffer.
(should (= (length (overlays-in 1 2)) 1))
(remove-overlays)
(should (= (length (overlays-in (point-min) (point-max))) 0))))
;;; buffer-tests.el ends here