[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] scratch/line-numbers 5d1025e: Allow to disable display of
From: |
Eli Zaretskii |
Subject: |
[Emacs-diffs] scratch/line-numbers 5d1025e: Allow to disable display of line numbers beyond EOB |
Date: |
Sun, 25 Jun 2017 13:54:39 -0400 (EDT) |
branch: scratch/line-numbers
commit 5d1025e7162db46b3c8d7c19facd8f9b9eff6f49
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>
Allow to disable display of line numbers beyond EOB
* src/buffer.c (disable_line_numbers_overlay_at_eob): New
function.
* src/lisp.h (disable_line_numbers_overlay_at_eob): Add prototype.
* src/xdisp.c (should_produce_line_number): When at ZV, call
disable_line_numbers_overlay_at_eob to determine whether line
numbers should be displayed beyond ZV.
---
src/buffer.c | 27 +++++++++++++++++++++++++++
src/lisp.h | 1 +
src/xdisp.c | 13 +++++++++----
3 files changed, 37 insertions(+), 4 deletions(-)
diff --git a/src/buffer.c b/src/buffer.c
index 80dbd33..780e4d7 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -3054,6 +3054,33 @@ mouse_face_overlay_overlaps (Lisp_Object overlay)
return i < n;
}
+/* Return the value of the 'display-line-numbers-disable' property at
+ EOB, if there's an overlay at ZV with a non-nil value of that property. */
+Lisp_Object
+disable_line_numbers_overlay_at_eob (void)
+{
+ ptrdiff_t n, i, size;
+ Lisp_Object *v, tem = Qnil;
+ Lisp_Object vbuf[10];
+ USE_SAFE_ALLOCA;
+
+ size = ARRAYELTS (vbuf);
+ v = vbuf;
+ n = overlays_in (ZV, ZV, 0, &v, &size, NULL, NULL);
+ if (n > size)
+ {
+ SAFE_NALLOCA (v, 1, n);
+ overlays_in (ZV, ZV, 0, &v, &n, NULL, NULL);
+ }
+
+ for (i = 0; i < n; ++i)
+ if ((tem = Foverlay_get (v[i], Qdisplay_line_numbers_disable),
+ !NILP (tem)))
+ break;
+
+ SAFE_FREE ();
+ return tem;
+}
/* Fast function to just test if we're at an overlay boundary. */
diff --git a/src/lisp.h b/src/lisp.h
index ff8dde2..f5cb6c7 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -3965,6 +3965,7 @@ extern void syms_of_editfns (void);
/* Defined in buffer.c. */
extern bool mouse_face_overlay_overlaps (Lisp_Object);
+extern Lisp_Object disable_line_numbers_overlay_at_eob (void);
extern _Noreturn void nsberror (Lisp_Object);
extern void adjust_overlays_for_insert (ptrdiff_t, ptrdiff_t);
extern void adjust_overlays_for_delete (ptrdiff_t, ptrdiff_t);
diff --git a/src/xdisp.c b/src/xdisp.c
index c318a69..7649b16 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -20948,10 +20948,15 @@ should_produce_line_number (struct it *it)
#endif
/* If the character at current position has a non-nil special
- property, disable line numbers for this row. */
- Lisp_Object val = Fget_char_property (make_number (IT_CHARPOS (*it)),
- Qdisplay_line_numbers_disable,
- it->window);
+ property, disable line numbers for this row. For ZV, we need to
+ use a special algorithm that only supports empty overlays at that
+ point, because get-char-property always returns nil for ZV. */
+ Lisp_Object val = Qnil;
+ if (IT_CHARPOS (*it) >= ZV)
+ val = disable_line_numbers_overlay_at_eob ();
+ else
+ val = Fget_char_property (make_number (IT_CHARPOS (*it)),
+ Qdisplay_line_numbers_disable, it->window);
return NILP (val) ? true : false;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] scratch/line-numbers 5d1025e: Allow to disable display of line numbers beyond EOB,
Eli Zaretskii <=