[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] emacs/src xdisp.c
From: |
Kenichi Handa |
Subject: |
[Emacs-diffs] emacs/src xdisp.c |
Date: |
Mon, 28 Sep 2009 01:05:02 +0000 |
CVSROOT: /cvsroot/emacs
Module name: emacs
Changes by: Kenichi Handa <handa> 09/09/28 01:05:02
Modified files:
src : xdisp.c
Log message:
Pay attention to
unibyte_display_via_language_environment in handling
Vnobreak_char_display.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/src/xdisp.c?cvsroot=emacs&r1=1.1304&r2=1.1305
Patches:
Index: xdisp.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/xdisp.c,v
retrieving revision 1.1304
retrieving revision 1.1305
diff -u -b -r1.1304 -r1.1305
--- xdisp.c 27 Sep 2009 19:11:13 -0000 1.1304
+++ xdisp.c 28 Sep 2009 01:05:00 -0000 1.1305
@@ -5684,6 +5684,10 @@
{
Lisp_Object dv;
struct charset *unibyte = CHARSET_FROM_ID (charset_unibyte);
+ int nbsp_or_shy = 0; /* 1:NO-BREAK SPACE, 2:SOFT HYPHEN, 0:ELSE */
+#define IS_NBSP (nbsp_or_shy == 1)
+#define IS_SHY (nbsp_or_shy == 2)
+ int decoded = it->c;
if (it->dp
&& (dv = DISP_CHAR_VECTOR (it->dp, it->c),
@@ -5712,6 +5716,18 @@
goto get_next;
}
+ if (unibyte_display_via_language_environment
+ && it->c >= 0x80)
+ decoded = DECODE_CHAR (unibyte, it->c);
+
+ if (it->c >= 0x80 && ! NILP (Vnobreak_char_display))
+ {
+ if (it->multibyte_p)
+ nbsp_or_shy = it->c == 0xA0 ? 1 : it->c == 0xAD ? 2 : 0;
+ else if (unibyte_display_via_language_environment)
+ nbsp_or_shy = decoded == 0xA0 ? 1 : decoded == 0xAD ? 2 : 0;
+ }
+
/* Translate control characters into `\003' or `^C' form.
Control characters coming from a display table entry are
currently not translated because we use IT->dpvec to hold
@@ -5724,21 +5740,19 @@
If it->multibyte_p is zero, eight-bit characters that
don't have corresponding multibyte char code are also
translated to octal form. */
- else if ((it->c < ' '
+ if ((it->c < ' '
? (it->area != TEXT_AREA
/* In mode line, treat \n, \t like other crl chars. */
|| (it->c != '\t'
&& it->glyph_row
&& (it->glyph_row->mode_line_p ||
it->avoid_cursor_p))
|| (it->c != '\n' && it->c != '\t'))
- : (it->multibyte_p
- ? (!CHAR_PRINTABLE_P (it->c)
- || (!NILP (Vnobreak_char_display)
- && (it->c == 0xA0 /* NO-BREAK SPACE */
- || it->c == 0xAD /* SOFT HYPHEN */)))
- : (it->c >= 127
- && (! unibyte_display_via_language_environment
- || (DECODE_CHAR (unibyte, it->c) <= 0xA0))))))
+ : (nbsp_or_shy
+ || (it->multibyte_p
+ ? ! CHAR_PRINTABLE_P (it->c)
+ : (! unibyte_display_via_language_environment
+ ? it->c >= 0x80
+ : (decoded >= 0x80 && decoded < 0xA0))))))
{
/* IT->c is a control character which must be displayed
either as '\003' or as `^C' where the '\\' and '^'
@@ -5794,7 +5808,7 @@
highlighting. */
if (EQ (Vnobreak_char_display, Qt)
- && it->c == 0xA0)
+ && IS_NBSP)
{
/* Merge the no-break-space face into the current face. */
face_id = merge_faces (it->f, Qnobreak_space, 0,
@@ -5844,7 +5858,7 @@
highlighting. */
if (EQ (Vnobreak_char_display, Qt)
- && it->c == 0xAD)
+ && IS_SHY)
{
it->c = '-';
XSETINT (it->ctl_chars[0], '-');
@@ -5855,10 +5869,10 @@
/* Handle non-break space and soft hyphen
with the escape glyph. */
- if (it->c == 0xA0 || it->c == 0xAD)
+ if (nbsp_or_shy)
{
XSETINT (it->ctl_chars[0], escape_glyph);
- it->c = (it->c == 0xA0 ? ' ' : '-');
+ it->c = (IS_NBSP ? ' ' : '-');
XSETINT (it->ctl_chars[1], it->c);
ctl_len = 2;
goto display_control;
- [Emacs-diffs] emacs/src xdisp.c, Stefan Monnier, 2009/09/08
- [Emacs-diffs] emacs/src xdisp.c, Eli Zaretskii, 2009/09/20
- [Emacs-diffs] emacs/src xdisp.c, Eli Zaretskii, 2009/09/20
- [Emacs-diffs] emacs/src xdisp.c, Eli Zaretskii, 2009/09/27
- [Emacs-diffs] emacs/src xdisp.c, Eli Zaretskii, 2009/09/27
- [Emacs-diffs] emacs/src xdisp.c, Eli Zaretskii, 2009/09/27
- [Emacs-diffs] emacs/src xdisp.c,
Kenichi Handa <=
- [Emacs-diffs] emacs/src xdisp.c, Eli Zaretskii, 2009/09/28