diff options
| author | Eli Zaretskii | 2017-06-25 20:53:05 +0300 |
|---|---|---|
| committer | Eli Zaretskii | 2017-06-25 20:53:05 +0300 |
| commit | 5d1025e7162db46b3c8d7c19facd8f9b9eff6f49 (patch) | |
| tree | 24040876a17ba2296b57b318e239c5436b273d1f | |
| parent | 540669cda984f64964d7baeb7369d3eea424a34c (diff) | |
| download | emacs-5d1025e7162db46b3c8d7c19facd8f9b9eff6f49.tar.gz emacs-5d1025e7162db46b3c8d7c19facd8f9b9eff6f49.zip | |
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.
| -rw-r--r-- | src/buffer.c | 27 | ||||
| -rw-r--r-- | src/lisp.h | 1 | ||||
| -rw-r--r-- | src/xdisp.c | 13 |
3 files changed, 37 insertions, 4 deletions
diff --git a/src/buffer.c b/src/buffer.c index 80dbd3318dc..780e4d7a7d6 100644 --- a/src/buffer.c +++ b/src/buffer.c | |||
| @@ -3054,6 +3054,33 @@ mouse_face_overlay_overlaps (Lisp_Object overlay) | |||
| 3054 | return i < n; | 3054 | return i < n; |
| 3055 | } | 3055 | } |
| 3056 | 3056 | ||
| 3057 | /* Return the value of the 'display-line-numbers-disable' property at | ||
| 3058 | EOB, if there's an overlay at ZV with a non-nil value of that property. */ | ||
| 3059 | Lisp_Object | ||
| 3060 | disable_line_numbers_overlay_at_eob (void) | ||
| 3061 | { | ||
| 3062 | ptrdiff_t n, i, size; | ||
| 3063 | Lisp_Object *v, tem = Qnil; | ||
| 3064 | Lisp_Object vbuf[10]; | ||
| 3065 | USE_SAFE_ALLOCA; | ||
| 3066 | |||
| 3067 | size = ARRAYELTS (vbuf); | ||
| 3068 | v = vbuf; | ||
| 3069 | n = overlays_in (ZV, ZV, 0, &v, &size, NULL, NULL); | ||
| 3070 | if (n > size) | ||
| 3071 | { | ||
| 3072 | SAFE_NALLOCA (v, 1, n); | ||
| 3073 | overlays_in (ZV, ZV, 0, &v, &n, NULL, NULL); | ||
| 3074 | } | ||
| 3075 | |||
| 3076 | for (i = 0; i < n; ++i) | ||
| 3077 | if ((tem = Foverlay_get (v[i], Qdisplay_line_numbers_disable), | ||
| 3078 | !NILP (tem))) | ||
| 3079 | break; | ||
| 3080 | |||
| 3081 | SAFE_FREE (); | ||
| 3082 | return tem; | ||
| 3083 | } | ||
| 3057 | 3084 | ||
| 3058 | 3085 | ||
| 3059 | /* Fast function to just test if we're at an overlay boundary. */ | 3086 | /* Fast function to just test if we're at an overlay boundary. */ |
diff --git a/src/lisp.h b/src/lisp.h index ff8dde2b825..f5cb6c75706 100644 --- a/src/lisp.h +++ b/src/lisp.h | |||
| @@ -3965,6 +3965,7 @@ extern void syms_of_editfns (void); | |||
| 3965 | 3965 | ||
| 3966 | /* Defined in buffer.c. */ | 3966 | /* Defined in buffer.c. */ |
| 3967 | extern bool mouse_face_overlay_overlaps (Lisp_Object); | 3967 | extern bool mouse_face_overlay_overlaps (Lisp_Object); |
| 3968 | extern Lisp_Object disable_line_numbers_overlay_at_eob (void); | ||
| 3968 | extern _Noreturn void nsberror (Lisp_Object); | 3969 | extern _Noreturn void nsberror (Lisp_Object); |
| 3969 | extern void adjust_overlays_for_insert (ptrdiff_t, ptrdiff_t); | 3970 | extern void adjust_overlays_for_insert (ptrdiff_t, ptrdiff_t); |
| 3970 | extern void adjust_overlays_for_delete (ptrdiff_t, ptrdiff_t); | 3971 | extern void adjust_overlays_for_delete (ptrdiff_t, ptrdiff_t); |
diff --git a/src/xdisp.c b/src/xdisp.c index c318a6954c4..7649b16e974 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -20948,10 +20948,15 @@ should_produce_line_number (struct it *it) | |||
| 20948 | #endif | 20948 | #endif |
| 20949 | 20949 | ||
| 20950 | /* If the character at current position has a non-nil special | 20950 | /* If the character at current position has a non-nil special |
| 20951 | property, disable line numbers for this row. */ | 20951 | property, disable line numbers for this row. For ZV, we need to |
| 20952 | Lisp_Object val = Fget_char_property (make_number (IT_CHARPOS (*it)), | 20952 | use a special algorithm that only supports empty overlays at that |
| 20953 | Qdisplay_line_numbers_disable, | 20953 | point, because get-char-property always returns nil for ZV. */ |
| 20954 | it->window); | 20954 | Lisp_Object val = Qnil; |
| 20955 | if (IT_CHARPOS (*it) >= ZV) | ||
| 20956 | val = disable_line_numbers_overlay_at_eob (); | ||
| 20957 | else | ||
| 20958 | val = Fget_char_property (make_number (IT_CHARPOS (*it)), | ||
| 20959 | Qdisplay_line_numbers_disable, it->window); | ||
| 20955 | return NILP (val) ? true : false; | 20960 | return NILP (val) ? true : false; |
| 20956 | } | 20961 | } |
| 20957 | 20962 | ||