aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/faces.el
diff options
context:
space:
mode:
authorEli Zaretskii2017-07-08 10:49:36 +0300
committerEli Zaretskii2017-07-08 10:49:36 +0300
commit5df239fc6ffbbb16ea6e5546fbec1508bf2cb4b7 (patch)
tree9b1b8baff1c3ca9c9c560460b34a7951723f621c /lisp/faces.el
parentb8ead34f5df92b771520f4d090ff6cde49ca5705 (diff)
parent13786d5e7d0aa0a37d7f81d1a1b82eddd3472796 (diff)
downloademacs-5df239fc6ffbbb16ea6e5546fbec1508bf2cb4b7.tar.gz
emacs-5df239fc6ffbbb16ea6e5546fbec1508bf2cb4b7.zip
Support display of line numbers natively
This merges branch 'line-numbers'. * src/buffer.c (disable_line_numbers_overlay_at_eob): New function. * src/lisp.h (disable_line_numbers_overlay_at_eob): Add prototype. * src/dispextern.h (struct it): New members pt_lnum, lnum, lnum_bytepos, lnum_width, and lnum_pixel_width. * src/indent.c (line_number_display_width): New function, refactored from line-number width calculations in vertical-motion. (Fvertical_motion): Call line_number_display_width when the width of line-number display is needed. (Fline_number_display_width): New defun. (syms_of_indent): Defsubr it. * src/indent.c (Fvertical_motion): Help C-n/C-p estimate correctly the width used up by line numbers by looking near the window-start point. If window-start is outside of the accessible portion, temporarily widen the buffer. * src/term.c (produce_glyphs): Adjust tab stops for the horizontal space taken by the line-number display. * src/xdisp.c (display_count_lines_logically) (display_count_lines_visually, maybe_produce_line_number) (should_produce_line_number, row_text_area_empty): New functions. (try_window_reusing_current_matrix): Don't use this method when display-line-numbers is in effect. (try_window_id, try_cursor_movement): Disable these optimizations when the line-number-current-line face is different from line-number face and for relative line numbers. (try_window_id, redisplay_window, try_cursor_movement): For visual line-number display, disable the same redisplay optimizations as for relative. (x_produce_glyphs): Adjust tab stops for the horizontal space taken by the line-number display. (hscroll_window_tree): Adjust hscroll calculations to line-number display. (DISP_INFINITY): Renamed from INFINITY to avoid clashes with math.h; all users changed. (set_cursor_from_row): Fix calculation of cursor X coordinate in R2L rows with display-produced glyphs at the beginning. (display_line): Use should_produce_line_number to determine whether a line number should be produced for each glyph row, and maybe_produce_line_number to produce line numbers. Don't display line numbers in the minibuffer and in tooltip frames. Call row_text_area_empty to verify that a glyph row's text area is devoid of any glyphs that came from a buffer or a string. This fixes a bug with empty-lines indication disappearing when line numbers or line-prefix are displayed. (syms_of_xdisp) <display-line-numbers, display-line-numbers-widen> <display-line-number-width>: New buffer-local variables. <display-line-numbers-current-absolute>: New variable. * lisp/cus-start.el (standard): Provide customization forms for display-line-numbers and its sub-features. * lisp/faces.el (line-number, line-number-current-line): New faces. * lisp/frame.el: Add display-line-numbers, display-line-numbers-widen, display-line-numbers-current-absolute, and display-line-number-width to the list of variables that should trigger redisplay of the current buffer. * lisp/menu-bar.el (menu-bar-showhide-menu): Add menu-bar item to turn display-line-numbers on and off. (toggle-display-line-numbers): New function. * lisp/simple.el (last--line-number-width): New internal variable. (line-move-visual): Use it to adjust temporary-goal-column when line-number display changes its width. * doc/emacs/basic.texi (Position Info): Add cross-reference to "Display Custom", for line-number display. * doc/emacs/custom.texi (Init Rebinding): * doc/emacs/modes.texi (Minor Modes): Remove references to linum-mode. * doc/emacs/display.texi (Display Custom): Describe the line-number display. * doc/lispref/display.texi (Size of Displayed Text): Document line-number-display-width. * etc/NEWS: Document display-line-numbers and its customizations.
Diffstat (limited to 'lisp/faces.el')
-rw-r--r--lisp/faces.el27
1 files changed, 27 insertions, 0 deletions
diff --git a/lisp/faces.el b/lisp/faces.el
index 9a8a1344caf..c3693d16631 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -2465,6 +2465,33 @@ If you set `term-file-prefix' to nil, this function does nothing."
2465 :version "21.1" 2465 :version "21.1"
2466 :group 'basic-faces) 2466 :group 'basic-faces)
2467 2467
2468;; Definition stolen from linum.el.
2469(defface line-number
2470 '((t :inherit (shadow default)))
2471 "Face for displaying line numbers.
2472This face is used when `display-line-numbers' is non-nil.
2473
2474If you customize the font of this face, make sure it is a
2475monospaced font, otherwise line numbers will not line up,
2476and text lines might move horizontally as you move through
2477the buffer."
2478 :version "26.1"
2479 :group 'basic-faces)
2480
2481(defface line-number-current-line
2482 '((t :inherit line-number))
2483 "Face for displaying the current line number.
2484This face is used when `display-line-numbers' is non-nil.
2485
2486If you customize the font of this face, make sure it is a
2487monospaced font, otherwise line numbers will not line up,
2488and text lines might move horizontally as you move through
2489the buffer. Similarly, making this face's font different
2490from that of the `line-number' face could produce such
2491unwanted effects."
2492 :version "26.1"
2493 :group 'basic-faces)
2494
2468(defface escape-glyph 2495(defface escape-glyph
2469 '((((background dark)) :foreground "cyan") 2496 '((((background dark)) :foreground "cyan")
2470 ;; See the comment in minibuffer-prompt for 2497 ;; See the comment in minibuffer-prompt for