summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJimmy Aguilar Mena <spacibba@aol.com>2019-03-19 00:03:12 +0100
committerJimmy Aguilar Mena <spacibba@aol.com>2019-05-03 23:34:29 +0200
commit4eae844beccf04d1d09e67ba12dac2423e924af1 (patch)
treeeb7320a60a7f1c7649ee97a91e98f6264d1d293a
parent942f68a539bc516ef578be108a9c967722f0175e (diff)
downloademacs-4eae844beccf04d1d09e67ba12dac2423e924af1.tar.gz
Display-fill-column-indicator NEWS info.
*etc/NEWS: Added information about the fill-column-indicator mode. *lisp/faces.el: Added a face for the display fill column indicator.
-rw-r--r--etc/NEWS45
-rw-r--r--lisp/display-fill-column-indicator.el2
-rw-r--r--lisp/faces.el2
-rw-r--r--src/xdisp.c63
4 files changed, 92 insertions, 20 deletions
diff --git a/etc/NEWS b/etc/NEWS
index 9e3559d27eb..e2eed9b4192 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -340,6 +340,51 @@ longer.
** Multicolor fonts such as "Noto Color Emoji" can be displayed on
Emacs configured with Cairo drawing and linked with cairo >= 1.16.0.
+---
+** Emacs now optionally displays a fill column indicator.
+
+The fill column indicator is a usefull functionality specially in
+prog-mode to indicate the position of a specific column. This is
+similar to what 'fill-column-indicator' package provides, but much
+faster and compatible with show-trailing-whitespace.
+
+Customize the buffer-local variables 'display-fill-column-indicator'
+and 'display-fill-column-indicator-character' to activate the
+indicator.
+
+Alternatively you can use the modes
+'display-fill-column-indicator-mode' or the global
+'global-display-fill-column-indicator-mode' which enables it locally
+and globally respectively and also chooses the character to use if no
+one is set.
+
+The indicators is not displayed at all in minibuffer windows and
+in tooltips, as it is not useful there.
+
+There are 2 new buffer local variables and 1 face to customize this
+mode:
+
+*** 'display-fill-column-indicator-column' is the column where the
+ indicator should be set. It can take positive numerical values for
+ the column or the special value t. Any other value disables the
+ indicator. The default value is t.
+
+ When the value is t it means that the variable 'fill-column' will
+ be used.
+
+*** 'display-fill-column-indicator-char' is the character used for the
+ indicator. This character can be any valid char including unicode
+ ones if the user's font supports them.
+
+ When the mode is enabled throw the functions
+ 'display-fill-column-indicator-mode' and
+ 'global-display-fill-column-indicator-mode', they check if there
+ is a value non-nil for this variable, otherwise the initialization
+ tries to set it to U+2502 or '|'.
+
+*** 'fill-column-face' is the face used to display the indicator it
+ inherits it default values from shadow and the default faces.
+
* Editing Changes in Emacs 27.1
diff --git a/lisp/display-fill-column-indicator.el b/lisp/display-fill-column-indicator.el
index 6e0990839e6..7c1df531df1 100644
--- a/lisp/display-fill-column-indicator.el
+++ b/lisp/display-fill-column-indicator.el
@@ -55,8 +55,6 @@ character for the line setting `display-fill-column-indicator-character'."
(if display-fill-column-indicator-mode
(progn
(setq display-fill-column-indicator t)
- (unless display-fill-column-indicator-column
- (setq display-fill-column-indicator-column fill-column))
(unless display-fill-column-indicator-character
(if (char-displayable-p ?\u2502)
(setq display-fill-column-indicator-character ?\u2502)
diff --git a/lisp/faces.el b/lisp/faces.el
index 67d963e3496..121cf7ef1d2 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -2502,7 +2502,7 @@ unwanted effects."
;; Definition stolen from display-line-numbers.
(defface fill-column-face
- '((t :inherit (shadow default) :height 1.0))
+ '((t :inherit (shadow default)))
"Face for displaying fill column indicator line.
This face is used when `display-fill-column-indicator-mode' is
non-nil.
diff --git a/src/xdisp.c b/src/xdisp.c
index f1609664277..c6f8133a838 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -20164,17 +20164,26 @@ append_space_for_newline (struct it *it, bool default_face_p)
same place than the line */
if (!NILP (Vdisplay_fill_column_indicator)
&& (it->w->pseudo_window_p == 0)
- && FIXNATP (Vdisplay_fill_column_indicator_column)
+ && (!NILP (Vdisplay_fill_column_indicator_column))
&& FIXNATP (Vdisplay_fill_column_indicator_character))
{
+ int fill_column_indicator_column = -1;
+
+ if (EQ (Vdisplay_fill_column_indicator_column, Qt)
+ && FIXNATP (BVAR (current_buffer, fill_column)))
+ fill_column_indicator_column =
+ XFIXNAT (BVAR (current_buffer, fill_column));
+ else if (FIXNATP (Vdisplay_fill_column_indicator_column))
+ fill_column_indicator_column =
+ XFIXNAT (Vdisplay_fill_column_indicator_column);
+
struct font *font =
default_face->font ? default_face->font : FRAME_FONT (it->f);
const int char_width =
font->average_width ? font->average_width : font->space_width;
- const int fill_column =
- XFIXNAT (Vdisplay_fill_column_indicator_column);
+
const int column_x =
- char_width * fill_column + it->lnum_pixel_width;
+ char_width * fill_column_indicator_column + it->lnum_pixel_width;
if (it->current_x == column_x)
{
@@ -20416,18 +20425,26 @@ extend_face_to_end_of_line (struct it *it)
active */
if (!NILP (Vdisplay_fill_column_indicator)
&& (it->w->pseudo_window_p == 0)
- && FIXNATP (Vdisplay_fill_column_indicator_column)
+ && (!NILP (Vdisplay_fill_column_indicator_column))
&& FIXNATP (Vdisplay_fill_column_indicator_character))
{
+ int fill_column_indicator_column = -1;
+
+ if (EQ (Vdisplay_fill_column_indicator_column, Qt)
+ && FIXNATP (BVAR (current_buffer, fill_column)))
+ fill_column_indicator_column =
+ XFIXNAT (BVAR (current_buffer, fill_column));
+ else if (FIXNATP (Vdisplay_fill_column_indicator_column))
+ fill_column_indicator_column =
+ XFIXNAT (Vdisplay_fill_column_indicator_column);
+
struct font *font =
default_face->font ? default_face->font : FRAME_FONT (f);
const int char_width =
font->average_width ? font->average_width : font->space_width;
- const int fill_column =
- XFIXNAT (Vdisplay_fill_column_indicator_column);
-
- const int column_x = char_width * fill_column + it->lnum_pixel_width;
+ const int column_x = char_width * fill_column_indicator_column +
+ it->lnum_pixel_width;
if ((it->current_x <= column_x)
&& (column_x <= it->last_visible_x))
@@ -20606,14 +20623,23 @@ extend_face_to_end_of_line (struct it *it)
it->face_id = face->id;
/* Display fill-column-line if mode is active */
- if (!NILP (Vdisplay_fill_column_indicator))
+ if (!NILP (Vdisplay_fill_column_indicator)
+ && (!NILP (Vdisplay_fill_column_indicator_column))
+ && FIXNATP (Vdisplay_fill_column_indicator_character))
{
- const int fill_column_indicator_line =
- XFIXNAT (Vdisplay_fill_column_indicator_column)
- + it->lnum_pixel_width;
+ int fill_column_indicator_column = -1;
+
+ if (EQ (Vdisplay_fill_column_indicator_column, Qt)
+ && FIXNATP (BVAR (current_buffer, fill_column)))
+ fill_column_indicator_column =
+ XFIXNAT (BVAR (current_buffer, fill_column));
+ else if (FIXNATP (Vdisplay_fill_column_indicator_column))
+ fill_column_indicator_column =
+ XFIXNAT (Vdisplay_fill_column_indicator_column);
+
do
{
- if (it->current_x == fill_column_indicator_line)
+ if (it->current_x == fill_column_indicator_column)
{
const int saved_face = it->face_id;
it->face_id =
@@ -33382,9 +33408,12 @@ either `relative' or `visual'. */);
Fmake_variable_buffer_local (Qdisplay_fill_column_indicator);
DEFVAR_LISP ("display-fill-column-indicator-column", Vdisplay_fill_column_indicator_column,
- doc: /* Column to draw the indicator when `display-fill-column-indicator' is non-nil.
-The default value is the variable `fill-column' if not other value is given. */);
- Vdisplay_fill_column_indicator_column = Qnil;
+ doc: /* Column to draw the fill column indicator when
+`display-fill-column-indicator' is non-nil. The default value is t
+which means that the indicator will use the `fill-column' variable. If
+a numeric value is set, the indicator will be drawn in that column
+independently of the `fill-column' value. */);
+ Vdisplay_fill_column_indicator_column = Qt;
DEFSYM (Qdisplay_fill_column_indicator_column, "display-fill-column-indicator-column");
Fmake_variable_buffer_local (Qdisplay_fill_column_indicator_column);