emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] fill_column_indicator 491e145 07/10: display-fill-column-i


From: Jimmy Aguilar Mena
Subject: [Emacs-diffs] fill_column_indicator 491e145 07/10: display-fill-column-indicator interface corrections
Date: Sun, 5 May 2019 10:29:14 -0400 (EDT)

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

    display-fill-column-indicator interface corrections
    
    *lisp/display-fill-column-indicator.el: Fixed character selection for
    the indicator based in the current faces. Extended condition to set
    display-fill-column-indicator-character in graphical displays.
    
    *src/xdisp.c: Fixed some long lines.
---
 lisp/cus-start.el                     |  5 +++
 lisp/display-fill-column-indicator.el | 18 +++++-----
 src/xdisp.c                           | 62 ++++++++++++++++++++---------------
 3 files changed, 51 insertions(+), 34 deletions(-)

diff --git a/lisp/cus-start.el b/lisp/cus-start.el
index 3f58eac..b935776 100644
--- a/lisp/cus-start.el
+++ b/lisp/cus-start.el
@@ -649,6 +649,11 @@ since it could result in memory overflow and make Emacs 
crash."
                                          :value nil))
                                  "26.1")
 
+             (display-fill-column-indicator display-fill-column-indicator
+                                 (choice
+                                  (const :tag "Off (nil)" :value nil)
+                                  (const :tag "On (t)" :value t))
+                                  "27.1")
              (display-fill-column-indicator-column 
display-fill-column-indicator
                                  integer "27.1")
              (display-fill-column-indicator-character 
display-fill-column-indicator
diff --git a/lisp/display-fill-column-indicator.el 
b/lisp/display-fill-column-indicator.el
index 7c1df53..f6b7352 100644
--- a/lisp/display-fill-column-indicator.el
+++ b/lisp/display-fill-column-indicator.el
@@ -24,10 +24,9 @@
 
 ;; Provides a minor mode interface for `display-fill-column-indicator'.
 ;;
-;; Toggle display of line numbers with M-x
-;; display-fill-column-indicator-mode.  To enable line numbering in
-;; all buffers, use M-x global-display-fill-column-indicator-mode.  To
-;; change the default line column
+;; Toggle display of the column indicator with M-x
+;; display-fill-column-indicator-mode.  To enable the indicator in
+;; all buffers, use M-x global-display-fill-column-indicator-mode.
 
 
 ;; NOTE: Customization variables for
@@ -38,7 +37,7 @@
 ;;; Code:
 
 (defgroup display-fill-column-indicator nil
-  "Display line numbers in the buffer."
+  "Display a fill column indicator in th buffer."
   :group 'convenience
   :group 'display)
 
@@ -48,15 +47,18 @@
   "Toggle display fill column indicator.
 This uses `display-fill-column-indicator' internally.
 
-To change the position of the line displayed by default,
+To change the position of the column displayed by default,
 customize `display-fill-column-indicator-column' you can change the
-character for the line setting `display-fill-column-indicator-character'."
+character for the indicator setting `display-fill-column-indicator-character'."
   :lighter nil
   (if display-fill-column-indicator-mode
       (progn
         (setq display-fill-column-indicator t)
         (unless display-fill-column-indicator-character
-          (if (char-displayable-p ?\u2502)
+          (if (and (char-displayable-p ?\u2502)
+                   (or (not (display-graphic-p))
+                       (eq (aref (query-font (car (internal-char-font nil 
?\u2502))) 0)
+                           (face-font 'default))))
               (setq display-fill-column-indicator-character ?\u2502)
             (setq display-fill-column-indicator-character ?|))))
     (setq display-fill-column-indicator nil)))
diff --git a/src/xdisp.c b/src/xdisp.c
index 25ef98b..31bb83c 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -20183,19 +20183,23 @@ append_space_for_newline (struct it *it, bool 
default_face_p)
                   XFIXNAT (Vdisplay_fill_column_indicator_column);
 
               struct font *font =
-                default_face->font ? default_face->font : FRAME_FONT (it->f);
+                default_face->font ?
+                  default_face->font : FRAME_FONT (it->f);
               const int char_width =
-                font->average_width ? font->average_width : font->space_width;
+                font->average_width ?
+                  font->average_width : font->space_width;
 
               const int column_x =
-                char_width * fill_column_indicator_column + 
it->lnum_pixel_width;
+                char_width * fill_column_indicator_column +
+                  it->lnum_pixel_width;
 
               if (it->current_x == column_x)
                 {
                   it->c = it->char_to_display =
                     XFIXNAT (Vdisplay_fill_column_indicator_character);
                   it->face_id =
-                    merge_faces (it->w, Qfill_column_face, 0, DEFAULT_FACE_ID);
+                    merge_faces (it->w, Qfill_column_face,
+                                 0, DEFAULT_FACE_ID);
                   face = FACE_FROM_ID(it->f, it->face_id);
                   goto produce_glyphs;
                 }
@@ -20444,10 +20448,12 @@ extend_face_to_end_of_line (struct it *it)
              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;
+               font->average_width ?
+                 font->average_width : font->space_width;
 
-             const int column_x = char_width * fill_column_indicator_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))
@@ -20459,39 +20465,43 @@ extend_face_to_end_of_line (struct it *it)
                  const bool saved_box_start = it->start_of_box_run_p;
                  Lisp_Object save_object = it->object;
 
-                 /* The stretch width needs to considet the latter added glyph 
*/
-                 const int stretch_width = column_x - it->current_x - 
char_width;
+                 /* The stretch width needs to considet the latter
+                    added glyph */
+                 const int stretch_width =
+                   column_x - it->current_x - char_width;
 
                  memset (&it->position, 0, sizeof it->position);
                  it->avoid_cursor_p = true;
                  it->object = Qnil;
 
-                 /* Only generate a stretch glysph if there is distance between
-                    current_x and and the indicator position */
+                 /* Only generate a stretch glysph if there is distance
+                    between current_x and and the indicator position */
                  if (stretch_width > 0)
-               {
-                 int stretch_ascent = (((it->ascent + it->descent)
-                                    * FONT_BASE (font)) / FONT_HEIGHT (font));
-                     append_stretch_glyph (it, Qnil, stretch_width,
-                                        it->ascent + it->descent, 
stretch_ascent);
-               }
-
-                 /* Generate the glysph indicator only if 
append_space_for_newline
-                    didn't already. */
+                   {
+                     int stretch_ascent = (((it->ascent + it->descent)
+                                            * FONT_BASE (font)) / FONT_HEIGHT 
(font));
+                     append_stretch_glyph (it, Qnil, stretch_width,
+                                           it->ascent + it->descent,
+                                           stretch_ascent);
+                   }
+
+                 /* Generate the glysph indicator only if
+                    append_space_for_newline didn't already. */
                  if (it->current_x < column_x)
                    {
-                 it->char_to_display =
+                     it->char_to_display =
                        XFIXNAT (Vdisplay_fill_column_indicator_character);
                      it->face_id =
-                       merge_faces (it->w, Qfill_column_face, 0, 
DEFAULT_FACE_ID);
+                       merge_faces (it->w, Qfill_column_face,
+                                    0, DEFAULT_FACE_ID);
                      PRODUCE_GLYPHS (it);
                    }
 
                  /* Restore the face after the indicator was generated */
                  it->face_id = saved_face_id;
 
-                 /* If there is space after the indicator generate an extra
-                    empty glysph to restore the face. */
+                 /* If there is space after the indicator generate an
+                    extra empty glysph to restore the face. */
                  it->char_to_display = ' ';
                  PRODUCE_GLYPHS (it);
 
@@ -20630,8 +20640,8 @@ extend_face_to_end_of_line (struct it *it)
        {
          int fill_column_indicator_column = -1;
 
-         /* Vdisplay_fill_column_indicator_column accepts the special value t
-            to use the default fill-column variable.  */
+         /* Vdisplay_fill_column_indicator_column accepts the special
+            value t to use the default fill-column variable.  */
          if (EQ (Vdisplay_fill_column_indicator_column, Qt)
              && FIXNATP (BVAR (current_buffer, fill_column)))
            fill_column_indicator_column =



reply via email to

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