]> git.eshelyaron.com Git - emacs.git/commitdiff
Set alternate faces for some line numbers (bug#27734)
authorJuanma Barranquero <lekktu@gmail.com>
Sun, 6 Oct 2019 18:53:18 +0000 (20:53 +0200)
committerJuanma Barranquero <lekktu@gmail.com>
Sun, 6 Oct 2019 18:53:18 +0000 (20:53 +0200)
* lisp/faces.el (line-number-major-tick, line-number-minor-tick):
New faces.
* lisp/cus-start.el (display-line-numbers-major-tick)
(display-line-numbers-minor-tick): Add customization info.
* lisp/frame.el: Add `display-line-numbers-major-tick' and
`display-line-numbers-minor-tick' to list of variables which
should trigger redisplay of the current buffer.

* src/xdisp.c (syms_of_xdisp) <display-line-numbers-major-tick>
<display-line-numbers-major-tick>: Defvar new options.
(syms_of_xdisp) <line-number-major-tick, line-number-minor-tick>:
Defsym new faces.
(maybe_produce_line_number): Use new faces for line numbers
that are multiple of `display-line-numbers-major-tick' and
`display-line-numbers-minor-tick'.

* etc/NEWS (value): Announce new feature.
* doc/emacs/display.texi (Display Custom): Describe it.  Wording by
Robert Pluim <rpluim@gmail.com>

doc/emacs/display.texi
etc/NEWS
lisp/cus-start.el
lisp/faces.el
lisp/frame.el
src/xdisp.c

index 84363d0f0d27697d68d533ceedfd3d0be847a2b9..406feb8c127320d7fda8abec04a7695ab4c9df77 100644 (file)
@@ -1871,7 +1871,12 @@ The line numbers are displayed in a special face @code{line-number}.
 The current line number is displayed in a different face,
 @code{line-number-current-line}, so you can make the current line's
 number have a distinct appearance, which will help locating the line
-showing point.
+showing point. Additional faces @code{line-number-major-tick} and
+@code{line-number-minor-tick} can be used to highlight the line numbers
+of lines which are a multiple of certain numbers.  Customize
+@code{display-line-numbers-major-tick} and
+@code{display-line-numbers-minor-tick} respectively to set those
+numbers.
 
 @vindex visible-bell
   If the variable @code{visible-bell} is non-@code{nil}, Emacs attempts
index beb15776ef6632cfd1706adb812e970f13912ac1..4a3230026864191c2f5a6e43c545c45af0b21df0 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -558,6 +558,13 @@ network connection information (in addition to the host name).
 *** When called interactively with a prefix arg 'C-u', 'desktop-read'
 now prompts the user for the directory containing the desktop file.
 
++++
+** display-line-numbers-mode
+*** New faces 'line-number-major-tick' and 'line-number-minor-tick',
+and customizable variables 'display-line-numbers-major-tick' and
+'display-line-numbers-minor-tick' can be used to highlight the line
+numbers of lines multiple of certain numbers.
+
 +++
 ** winner
 *** A new variable, 'winner-boring-buffers-regexp', has been added.
index e61c1954a1faa32476cb7e496c5e1fecd7d16e86..89a96a9f51cea04d55a317b17eb3c04ab0cf2777 100644 (file)
@@ -655,6 +655,20 @@ since it could result in memory overflow and make Emacs crash."
                (const :tag "Count lines from beginning of narrowed region"
                       :value nil))
               "26.1")
+             (display-line-numbers-major-tick
+              display-line-numbers
+              (choice
+               (const :tag "No line" 0)
+               (integer :tag "Multiples of"
+                        :value 10))
+              "27.1")
+             (display-line-numbers-minor-tick
+              display-line-numbers
+              (choice
+               (const :tag "No line" 0)
+               (integer :tag "Multiples of"
+                        :value 5))
+              "27.1")
 
              (display-fill-column-indicator
               display-fill-column-indicator
index 9c5ffe1e5906e5b434227b1e73eb09b38340f34f..58b6349ccfd614c8d43f6de51d8b60dce03a067b 100644 (file)
@@ -2390,6 +2390,40 @@ unwanted effects."
   :group 'basic-faces
   :group 'display-line-numbers)
 
+(defface line-number-major-tick
+  '((t :inherit line-number))
+  "Face for highlighting \"major ticks\" (as in a ruler).
+When `display-line-numbers-major-tick' is positive, highlight
+the line numbers of lines which are a multiple of its value.
+This face is used when `display-line-numbers' is non-nil.
+
+If you customize the font of this face, make sure it is a
+monospaced font, otherwise line numbers will not line up,
+and text lines might move horizontally as you move through
+the buffer.  Similarly, making this face's font different
+from that of the `line-number' face could produce such
+unwanted effects."
+  :version "27.1"
+  :group 'basic-faces
+  :group 'display-line-numbers)
+
+(defface line-number-minor-tick
+  '((t :inherit line-number))
+  "Face for highlighting \"minor ticks\" (as in a ruler).
+When `display-line-numbers-minor-tick' is positive, highlight
+the line numbers of lines which are a multiple of its value.
+This face is used when `display-line-numbers' is non-nil.
+
+If you customize the font of this face, make sure it is a
+monospaced font, otherwise line numbers will not line up,
+and text lines might move horizontally as you move through
+the buffer.  Similarly, making this face's font different
+from that of the `line-number' face could produce such
+unwanted effects."
+  :version "27.1"
+  :group 'basic-faces
+  :group 'display-line-numbers)
+
 ;; Definition stolen from display-line-numbers.
 (defface fill-column-indicator
   '((t :inherit shadow :weight normal :slant normal
index 0c68fc378b9c5155e8dd2cb898cb8886fdedf3e1..51b3b621ff434686dc918f6984fd448f28135f90 100644 (file)
@@ -2724,6 +2724,8 @@ See also `toggle-frame-maximized'."
         display-line-numbers-width
         display-line-numbers-current-absolute
         display-line-numbers-widen
+        display-line-numbers-major-tick
+        display-line-numbers-minor-tick
         display-fill-column-indicator
         display-fill-column-indicator-column
         display-fill-column-indicator-character
index 8aa38c8034c6341072860a9377ad4e29e4a33204..1f3a8136f8b237ae1ce23b6152dbcb229bca9362 100644 (file)
@@ -22664,6 +22664,14 @@ maybe_produce_line_number (struct it *it)
             empty lines beyond EOB.  */
          && it->what != IT_EOB)
        tem_it.face_id = current_lnum_face_id;
+      else if (display_line_numbers_major_tick > 0
+              && (lnum_to_display % display_line_numbers_major_tick == 0))
+       tem_it.face_id = merge_faces (it->w, Qline_number_major_tick,
+                                     0, DEFAULT_FACE_ID);
+      else if (display_line_numbers_minor_tick > 0
+              && (lnum_to_display % display_line_numbers_minor_tick == 0))
+       tem_it.face_id = merge_faces (it->w, Qline_number_minor_tick,
+                                     0, DEFAULT_FACE_ID);
       else
        tem_it.face_id = lnum_face_id;
       if (beyond_zv
@@ -34125,6 +34133,8 @@ be let-bound around code that needs to disable messages temporarily. */);
   /* Names of the faces used to display line numbers.  */
   DEFSYM (Qline_number, "line-number");
   DEFSYM (Qline_number_current_line, "line-number-current-line");
+  DEFSYM (Qline_number_major_tick, "line-number-major-tick");
+  DEFSYM (Qline_number_minor_tick, "line-number-minor-tick");
   /* Name of a text property which disables line-number display.  */
   DEFSYM (Qdisplay_line_numbers_disable, "display-line-numbers-disable");
 
@@ -34760,6 +34770,20 @@ if the font in fill-column-indicator face does not support Unicode characters.
   DEFSYM (Qdisplay_fill_column_indicator_character, "display-fill-column-indicator-character");
   Fmake_variable_buffer_local (Qdisplay_fill_column_indicator_character);
 
+  DEFVAR_INT ("display-line-numbers-major-tick", display_line_numbers_major_tick,
+    doc: /* If an integer N > 0, highlight line number of every Nth line.
+The line number is shown with the `line-number-major-tick' face.
+Otherwise, no special highlighting is done every Nth line.
+Note that major ticks take precedence over minor ticks.  */);
+  display_line_numbers_major_tick = 0;
+
+  DEFVAR_INT ("display-line-numbers-minor-tick", display_line_numbers_minor_tick,
+    doc: /* If an integer N > 0, highlight line number of every Nth line.
+The line number is shown with the `line-number-minor-tick' face.
+Otherwise, no special highlighting is done every Nth line.
+Note that major ticks take precedence over minor ticks.  */);
+  display_line_numbers_minor_tick = 0;
+
   DEFVAR_BOOL ("inhibit-eval-during-redisplay", inhibit_eval_during_redisplay,
     doc: /* Non-nil means don't eval Lisp during redisplay.  */);
   inhibit_eval_during_redisplay = false;