emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] fill_column_indicator ce1d748 2/9: Display-fill-column-ind


From: Jimmy Aguilar Mena
Subject: [Emacs-diffs] fill_column_indicator ce1d748 2/9: Display-fill-column-indicator NEWS and t value for column value
Date: Tue, 9 Apr 2019 09:02:45 -0400 (EDT)

branch: fill_column_indicator
commit ce1d7482852288b3bfa404f7478e39093dc7aa37
Author: Jimmy Aguilar Mena <address@hidden>
Commit: Jimmy Aguilar Mena <address@hidden>

    Display-fill-column-indicator NEWS and t value for column value
---
 etc/NEWS                              | 44 ++++++++++++++++++++++++
 lisp/display-fill-column-indicator.el |  2 --
 lisp/faces.el                         |  2 +-
 src/xdisp.c                           | 63 +++++++++++++++++++++++++----------
 4 files changed, 91 insertions(+), 20 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 620d88c..55ae145 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -303,6 +303,50 @@ and directory-local variables.
 'with-connection-local-profiles'.  No argument 'profiles' needed any
 longer.
 
+** 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 6e09908..7c1df53 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 67d963e..121cf7e 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 7316b52..2f69303 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -20144,17 +20144,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)
                 {
@@ -20396,18 +20405,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))
@@ -20586,14 +20603,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 =
@@ -33357,9 +33383,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);
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]