summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJimmy Aguilar Mena <spacibba@aol.com>2019-04-05 12:37:59 +0200
committerJimmy Aguilar Mena <spacibba@aol.com>2019-05-03 23:34:29 +0200
commit765cf65d689b3e356a20fa2085eaf38db09698b8 (patch)
tree14969944f8b0fb50de76afb8f0b87a53a935fdbf
parent0750b6337a5f57eec49934893e64b8d8fc93bd9d (diff)
downloademacs-765cf65d689b3e356a20fa2085eaf38db09698b8.tar.gz
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.
-rw-r--r--lisp/cus-start.el5
-rw-r--r--lisp/display-fill-column-indicator.el18
-rw-r--r--src/xdisp.c62
3 files changed, 51 insertions, 34 deletions
diff --git a/lisp/cus-start.el b/lisp/cus-start.el
index 3f58eac63bc..b935776a2df 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 7c1df531df1..f6b7352c21b 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 25ef98b49cf..31bb83c4181 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 =