aboutsummaryrefslogtreecommitdiffstats
path: root/etc
diff options
context:
space:
mode:
authorEli Zaretskii2017-07-08 10:49:36 +0300
committerEli Zaretskii2017-07-08 10:49:36 +0300
commit5df239fc6ffbbb16ea6e5546fbec1508bf2cb4b7 (patch)
tree9b1b8baff1c3ca9c9c560460b34a7951723f621c /etc
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 'etc')
-rw-r--r--etc/NEWS52
1 files changed, 51 insertions, 1 deletions
diff --git a/etc/NEWS b/etc/NEWS
index 13805ce0da7..15c3009ae10 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -405,10 +405,60 @@ display of raw bytes from octal to hex.
405** You can now provide explicit field numbers in format specifiers. 405** You can now provide explicit field numbers in format specifiers.
406For example, '(format "%2$s %1$s" "X" "Y")' produces "Y X". 406For example, '(format "%2$s %1$s" "X" "Y")' produces "Y X".
407 407
408+++
409** 'comment-indent-function' values may now return a cons to specify a 408** 'comment-indent-function' values may now return a cons to specify a
410range of indentation. 409range of indentation.
411 410
411+++
412** Emacs now supports optional display of line numbers in the buffer.
413This is similar to what linum-mode provides, but much faster and
414doesn't usurp the display margin for the line numbers. Customize the
415buffer-local variable 'display-line-numbers' to activate this optional
416display. If set to t, Emacs will display the number of each line
417before the line. If set to 'relative', Emacs will display the line
418number relative to the line showing point, with that line's number
419displayed as absolute. If set to 'visual', Emacs will display a
420relative number for every screen line, i.e. it will count screen lines
421rather than buffer lines. The default is nil, which doesn't display
422the line numbers.
423
424In 'relative' and 'visual' modes, the variable
425'display-line-numbers-current-absolute' controls what number is
426displayed for the line showing point. By default, this variable's
427value is t, which means display the absolute line number for the line
428showing point. Customizing this variable to a nil value will cause
429Emacs to show zero instead, which preserves horizontal space of the
430window in large buffers.
431
432Line numbers are not displayed at all in minibuffer windows and in
433tooltips, as they are not useful there.
434
435The new face 'line-number' is used to display the line numbers. The
436new face 'line-number-current-line' can be customized to display the
437current line's number differently from all the other line numbers; by
438default these two faces are identical.
439
440You can also customize the new variable 'display-line-number-width' to
441specify a fixed minimal with of the area allocated to line-number
442display. The default is nil, meaning that Emacs will dynamically
443calculate the area width, enlarging or shrinking it as needed.
444Setting it to a non-negative integer specifies that as the minimal
445width; selecting a value that is large enough to display all line
446numbers in a buffer will then keep the line-number display area of
447constant width at all times, if that is desired.
448
449Lisp programs can disable line-number display for a particular screen
450line by putting the 'display-line-numbers-disable' text property or
451overlay property on the first character of that screen line. This is
452intended for add-on packages that need a finer control of the display.
453
454Lisp programs that need to know how much screen estate is used up for
455line-number display in a window can use the new function
456'line-number-display-width'.
457
458Linum mode and all similar packages are henceforth becoming obsolete.
459Users and developers are encouraged to switch to this new feature
460instead.
461
412 462
413* Editing Changes in Emacs 26.1 463* Editing Changes in Emacs 26.1
414 464