emacs-diffs
[Top][All Lists]
Advanced

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

emacs-28 b5afbed: Backward compatibility option for 'nobreak-char-displa


From: Eli Zaretskii
Subject: emacs-28 b5afbed: Backward compatibility option for 'nobreak-char-display'
Date: Tue, 5 Oct 2021 10:13:58 -0400 (EDT)

branch: emacs-28
commit b5afbedc908e97cc5094a336cc275390d618e82e
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>

    Backward compatibility option for 'nobreak-char-display'
    
    * src/xdisp.c (syms_of_xdisp) <nobreak-char-ascii-display>: New
    variable.
    (get_next_display_element): If 'nobreak-char-ascii-display' is
    non-nil, display non-ASCII space and hyphen characters as their
    ASCII equivalents.  (Bug#50983)
    
    * etc/NEWS:
    * etc/PROBLEMS: Mention 'nobreak-char-ascii-display'.
---
 etc/NEWS     | 19 ++++++++++++++++++-
 etc/PROBLEMS |  4 ++++
 src/xdisp.c  | 26 ++++++++++++++++++++++++--
 3 files changed, 46 insertions(+), 3 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 0d44092..2274588 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -828,7 +828,24 @@ buffers.  This can be controlled by customizing the user 
option
 *** 'nobreak-char-display' now also affects all non-ASCII space characters.
 Previously, this was limited only to 'NO-BREAK SPACE' and hyphen
 characters.  Now it also covers the rest of the non-ASCII Unicode
-space characters.
+space characters.  Also, unlike in previous versions of Emacs, the
+non-ASCII characters are displayed as themselves when
+'nobreak-char-display' is t, i.e. they are not replaced on display
+with the ASCII space and hyphen characters.
+
+---
+*** New backward compatibility variable 'nobreak-char-ascii-display'.
+This variable is nil by default, and non-ASCII space and hyphen
+characters are displayed as themselves, even if 'nobreak-char-display'
+is non-nil.  If 'nobreak-char-ascii-display' is set to a non-nil
+value, the non-ASCII space and hyphen characters are instead displayed
+as their ASCII counterparts: spaces and ASCII hyphen (a.k.a. "dash")
+characters.  This provides backward compatibility feature for the
+change described above, where the non-ASCII characters are no longer
+replaced with their ASCII counterparts when 'nobreak-char-display' is
+t.  You may need this on text-mode terminals that produce messed up
+display when non-ASCII spaces and hyphens are written to the display.
+(This variable is only effective when 'nobreak-char-display' is t.)
 
 +++
 *** Improved support for terminal emulators that encode the Meta flag.
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index f3c0c4b..f396dc3 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -1995,6 +1995,10 @@ a regular ASCII dash character '-':
   (aset standard-display-table
         #xAD (vector (make-glyph-code ?- 'escape-glyph)))
 
+Another workaround is to set 'nobreak-char-ascii-display' to a non-nil
+value, which will cause any non-ASCII space and hyphen characters to
+be displayed as their ASCII counterparts, with a special face.
+
 Kitty also differs from many other character terminals in how it
 handles character compositions.  As one example, Emoji sequences that
 begin with a non-Emoji character and end in U+FE0F VARIATION SELECTOR
diff --git a/src/xdisp.c b/src/xdisp.c
index b777d1b..9ddf0dd 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -7668,7 +7668,8 @@ get_next_display_element (struct it *it)
                  /* Merge `nobreak-space' into the current face.  */
                  face_id = merge_faces (it->w, Qnobreak_space, 0,
                                         it->face_id);
-                 XSETINT (it->ctl_chars[0], it->c);
+                 XSETINT (it->ctl_chars[0],
+                          nobreak_char_ascii_display ? ' ' : it->c);
                  ctl_len = 1;
                  goto display_control;
                }
@@ -7681,7 +7682,8 @@ get_next_display_element (struct it *it)
                  /* Merge `nobreak-space' into the current face.  */
                  face_id = merge_faces (it->w, Qnobreak_hyphen, 0,
                                         it->face_id);
-                 XSETINT (it->ctl_chars[0], it->c);
+                 XSETINT (it->ctl_chars[0],
+                          nobreak_char_ascii_display ? '-' : it->c);
                  ctl_len = 1;
                  goto display_control;
                }
@@ -35034,6 +35036,26 @@ glyph followed by an ordinary space or hyphen.
 A value of nil means no special handling of these characters.  */);
   Vnobreak_char_display = Qt;
 
+  DEFVAR_BOOL ("nobreak-char-ascii-display", nobreak_char_ascii_display,
+    doc: /* Control display of non-ASCII space and hyphen chars.
+If the value of this variable is nil, the default, Emacs displays
+non-ASCII chars which have the same appearance as an ASCII space
+or hyphen as themselves, with the `nobreak-space' or `nobreak-hyphen'
+face, respectively.
+
+If the value is t, these characters are displayed as their ASCII
+counterparts: whitespace characters as ASCII space, hyphen characters
+as ASCII hyphen (a.k.a. \"dash\"), using the `nobreak-space' or
+the `nobreak-hyphen' face.
+
+This variable has effect only if `nobreak-char-display' is t;
+otherwise it is ignored.
+
+All of the non-ASCII characters in the Unicode horizontal whitespace
+character class, as well as U+00AD (soft hyphen), U+2010 (hyphen), and
+U+2011 (non-breaking hyphen) are affected.  */);
+  nobreak_char_ascii_display = false;
+
   DEFVAR_LISP ("void-text-area-pointer", Vvoid_text_area_pointer,
     doc: /* The pointer shape to show in void text areas.
 A value of nil means to show the text pointer.  Other options are



reply via email to

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