]> git.eshelyaron.com Git - emacs.git/commitdiff
Display-fill-column-indicator NEWS info.
authorJimmy Aguilar Mena <spacibba@aol.com>
Mon, 18 Mar 2019 23:03:12 +0000 (00:03 +0100)
committerJimmy Aguilar Mena <spacibba@aol.com>
Sun, 5 May 2019 14:27:37 +0000 (16:27 +0200)
*etc/NEWS: Added information about the fill-column-indicator mode.
*lisp/faces.el: Added a face for the display fill column indicator.

etc/NEWS
lisp/display-fill-column-indicator.el
lisp/faces.el
src/xdisp.c

index 9e3559d27eb9d3cf004f96ce76832aa345041dca..e2eed9b4192120fa142bc7002f2765082865e3c1 100644 (file)
--- 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.
+
 \f
 * Editing Changes in Emacs 27.1
 
index 6e0990839e6bc2e290332d111ceaf40eba1ce1af..7c1df531df1f15f9936039094837f227b725cf3a 100644 (file)
@@ -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)
index 67d963e34965c28da3f8b832961bcf469d496ea9..121cf7ef1d29b66bcee1b4f75e96ad388d6ea043 100644 (file)
@@ -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.
index f16096642771509c28c35c12a0b30957cb3b129f..c6f8133a838e9a0e4182abee82189598a484cc93 100644 (file)
@@ -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);