diff -ur emacs23-23.1+1/src/dispextern.h emacs23-23.1+1+tty-italics/src/dispextern.h --- emacs23-23.1+1/src/dispextern.h 2009-06-21 05:38:14.000000000 +0100 +++ emacs23-23.1+1+tty-italics/src/dispextern.h 2009-10-30 13:57:02.000000000 +0000 @@ -1553,6 +1553,7 @@ color of the TTY. */ unsigned tty_bold_p : 1; unsigned tty_dim_p : 1; + unsigned tty_italic_p : 1; unsigned tty_underline_p : 1; unsigned tty_alt_charset_p : 1; unsigned tty_reverse_p : 1; diff -ur emacs23-23.1+1/src/term.c emacs23-23.1+1+tty-italics/src/term.c --- emacs23-23.1+1/src/term.c 2009-06-29 04:34:26.000000000 +0100 +++ emacs23-23.1+1+tty-italics/src/term.c 2009-10-30 14:04:27.000000000 +0000 @@ -1978,6 +1978,9 @@ if (MAY_USE_WITH_COLORS_P (tty, NC_DIM)) OUTPUT1_IF (tty, tty->TS_enter_dim_mode); + if (face->tty_italic_p) // italic always ok with colours, man 5 terminfo + OUTPUT1_IF (tty, tty->TS_enter_italic_mode); + /* Alternate charset and blinking not yet used. */ if (face->tty_alt_charset_p && MAY_USE_WITH_COLORS_P (tty, NC_ALT_CHARSET)) @@ -2032,6 +2035,7 @@ may not turn off alt-char-mode. */ if (face->tty_bold_p || face->tty_dim_p + || face->tty_italic_p || face->tty_reverse_p || face->tty_alt_charset_p || face->tty_blinking_p @@ -2086,6 +2090,9 @@ TTY_CAPABLE_P_TRY (tty, TTY_CAP_DIM, tty->TS_enter_dim_mode, NC_DIM); TTY_CAPABLE_P_TRY (tty, TTY_CAP_BLINK, tty->TS_enter_blink_mode, NC_BLINK); TTY_CAPABLE_P_TRY (tty, TTY_CAP_ALT_CHARSET, tty->TS_enter_alt_charset_mode, NC_ALT_CHARSET); + // italic does not collide with colours (man 5 terminfo) + if ( (caps & TTY_CAP_ITALIC) && !tty->TS_enter_italic_mode ) + return 0; /* We can do it! */ return 1; @@ -3654,6 +3661,7 @@ tty->TS_exit_underline_mode = tgetstr ("ue", address); tty->TS_enter_bold_mode = tgetstr ("md", address); tty->TS_enter_dim_mode = tgetstr ("mh", address); + tty->TS_enter_italic_mode = tgetstr ("ZH", address); tty->TS_enter_blink_mode = tgetstr ("mb", address); tty->TS_enter_reverse_mode = tgetstr ("mr", address); tty->TS_enter_alt_charset_mode = tgetstr ("as", address); diff -ur emacs23-23.1+1/src/termchar.h emacs23-23.1+1+tty-italics/src/termchar.h --- emacs23-23.1+1/src/termchar.h 2009-06-21 05:38:18.000000000 +0100 +++ emacs23-23.1+1+tty-italics/src/termchar.h 2009-10-30 14:00:25.000000000 +0000 @@ -149,6 +149,7 @@ each as vpos and hpos) */ char *TS_enter_bold_mode; /* "md" -- turn on bold (extra bright mode). */ + char *TS_enter_italic_mode; /* "ZH" -- turn on italic mode */ char *TS_enter_dim_mode; /* "mh" -- turn on half-bright mode. */ char *TS_enter_blink_mode; /* "mb" -- enter blinking mode. */ char *TS_enter_reverse_mode; /* "mr" -- enter reverse video mode. */ diff -ur emacs23-23.1+1/src/xfaces.c emacs23-23.1+1+tty-italics/src/xfaces.c --- emacs23-23.1+1/src/xfaces.c 2009-07-28 15:59:30.000000000 +0100 +++ emacs23-23.1+1+tty-italics/src/xfaces.c 2009-10-30 14:13:15.000000000 +0000 @@ -5168,8 +5168,7 @@ || !UNSPECIFIEDP (attrs[LFACE_SWIDTH_INDEX]) || !UNSPECIFIEDP (attrs[LFACE_OVERLINE_INDEX]) || !UNSPECIFIEDP (attrs[LFACE_STRIKE_THROUGH_INDEX]) - || !UNSPECIFIEDP (attrs[LFACE_BOX_INDEX]) - || !UNSPECIFIEDP (attrs[LFACE_SLANT_INDEX])) + || !UNSPECIFIEDP (attrs[LFACE_BOX_INDEX])) return 0; @@ -5220,6 +5219,15 @@ test_caps |= TTY_CAP_INVERSE; } + /* italic */ + val = attrs[LFACE_SLANT_INDEX]; + if( !UNSPECIFIEDP (val) ) + { + if (face_attr_equal_p (val, def_attrs[LFACE_SLANT_INDEX])) + return 0; /* same as default */ + else + test_caps |= TTY_CAP_ITALIC; + } /* Color testing. */ @@ -6155,8 +6163,10 @@ slant = FONT_SLANT_NAME_NUMERIC (attrs[LFACE_SLANT_INDEX]); if (weight > 100) face->tty_bold_p = 1; - if (weight < 100 || slant != 100) + if (weight < 100) face->tty_dim_p = 1; + if(slant != 100) + face->tty_italic_p = 1; if (!NILP (attrs[LFACE_UNDERLINE_INDEX])) face->tty_underline_p = 1; if (!NILP (attrs[LFACE_INVERSE_INDEX]))