Add a new face for non-breaking hyphen characters

* doc/emacs/display.texi (Standard Faces): Mention nobreak-hyphen.
(Text Display): Ditto.

* lisp/faces.el (nobreak-hyphen): New face (bug#12048).

* src/xdisp.c (get_next_display_element): Use it instead of
the escape-glyph face.

* src/xdisp.c (syms_of_xdisp): New symbil Qnobreak_hyphen.
This commit is contained in:
Lars Ingebrigtsen 2016-04-28 18:09:10 +02:00
parent 214f85a0a6
commit c3ac2cbf73
4 changed files with 35 additions and 15 deletions

View file

@ -657,6 +657,9 @@ The face for displaying control characters and escape sequences
@item nobreak-space
The face for displaying no-break space characters (@pxref{Text
Display}).
@item nobreak-hyphen
The face for displaying no-break hyphen characters (@pxref{Text
Display}).
@end table
The following faces control the appearance of parts of the Emacs
@ -1481,7 +1484,7 @@ characters. To deal with this problem, Emacs displays such characters
specially: it displays @code{U+00A0} (no-break space) with the
@code{nobreak-space} face, and it displays @code{U+00AD} (soft
hyphen), @code{U+2010} (hyphen), and @code{U+2011} (non-breaking
hyphen) with the @code{escape-glyph} face. To disable this, change
hyphen) with the @code{nobreak-hyphen} face. To disable this, change
the variable @code{nobreak-char-display} to @code{nil}. If you give
this variable a non-@code{nil} and non-@code{t} value, Emacs instead
displays such characters as a highlighted backslash followed by a

View file

@ -56,6 +56,9 @@ affected by this, as SGI stopped supporting IRIX in December 2013.
* Changes in Emacs 25.2
** Non-breaking hypens are now displayed with the `nobreak-hyphen'
face instead of the `escape-glyph' face.
---
** `C-x h' (`mark-whole-buffer') will now avoid marking the prompt
part of minibuffers.

View file

@ -2428,13 +2428,21 @@ If you set `term-file-prefix' to nil, this function does nothing."
:version "22.1")
(defface nobreak-space
'((((class color) (min-colors 88)) :inherit escape-glyph :underline t)
(((class color) (min-colors 8)) :background "magenta")
(t :inverse-video t))
'((((background dark)) :foreground "cyan")
(((type pc)) :foreground "magenta")
(t :foreground "brown"))
"Face for displaying nobreak space."
:group 'basic-faces
:version "22.1")
(defface nobreak-hyphen
'((((background dark)) :foreground "cyan")
(((type pc)) :foreground "magenta")
(t :foreground "brown"))
"Face for displaying nobreak hyphens."
:group 'basic-faces
:version "25.2")
(defgroup mode-line-faces nil
"Faces used in the mode line."
:group 'mode-line

View file

@ -7080,6 +7080,19 @@ get_next_display_element (struct it *it)
goto display_control;
}
/* Handle non-ascii hyphens in the mode where it only
gets highlighting. */
if (nonascii_hyphen_p && EQ (Vnobreak_char_display, Qt))
{
/* Merge `nobreak-space' into the current face. */
face_id = merge_faces (it->f, Qnobreak_hyphen, 0,
it->face_id);
XSETINT (it->ctl_chars[0], '-');
ctl_len = 1;
goto display_control;
}
/* Handle sequences that start with the "escape glyph". */
/* the default escape glyph is \. */
@ -7096,15 +7109,6 @@ get_next_display_element (struct it *it)
? merge_faces (it->f, Qt, lface_id, it->face_id)
: merge_escape_glyph_face (it));
/* Draw non-ASCII hyphen with just highlighting: */
if (nonascii_hyphen_p && EQ (Vnobreak_char_display, Qt))
{
XSETINT (it->ctl_chars[0], '-');
ctl_len = 1;
goto display_control;
}
/* Draw non-ASCII space/hyphen with escape glyph: */
if (nonascii_space_p || nonascii_hyphen_p)
@ -31198,8 +31202,10 @@ They are still logged to the *Messages* buffer. */);
/* Name and number of the face used to highlight escape glyphs. */
DEFSYM (Qescape_glyph, "escape-glyph");
/* Name and number of the face used to highlight non-breaking spaces. */
/* Name and number of the face used to highlight non-breaking
spaces/hyphens. */
DEFSYM (Qnobreak_space, "nobreak-space");
DEFSYM (Qnobreak_hyphen, "nobreak-hyphen");
/* The symbol 'image' which is the car of the lists used to represent
images in Lisp. Also a tool bar style. */
@ -31311,7 +31317,7 @@ The face used for trailing whitespace is `trailing-whitespace'. */);
doc: /* Control highlighting of non-ASCII space and hyphen chars.
If the value is t, Emacs highlights non-ASCII chars which have the
same appearance as an ASCII space or hyphen, using the `nobreak-space'
or `escape-glyph' face respectively.
or `nobreak-hyphen' face respectively.
U+00A0 (no-break space), U+00AD (soft hyphen), U+2010 (hyphen), and
U+2011 (non-breaking hyphen) are affected.