Hey, guys.
I'm trying to get italics working under tmux (cvs), especially for
editing html files in vim. I use rxvt-unicode as my main terminal and it
supports italics through its [ANSI escape code][1] (scroll down to SGR
parameters):
] Code Effect
] ----------------
] 3 Italic: on
[1]: http://en.wikipedia.org/wiki/ANSI_escape_code
When italics are requested, tmux, like screen, uses standout mode
instead. Here's a [very informative discussion][2] on this same issue on
screen.
[2]:
http://old.nabble.com/Italic-text-with-screen-inside-urxvt-and-some-termcap-questions-td19616085.html
]] In the screen manual 'Standout' have a '(ANSI: Italicized)' what is
]] that is supposed to mean?
] It means that what Screen uses for standout mode, ANSI (and rxvt) uses
] for italics mode. I don't know why this is the case, but the fact that
] it is means that making screen support italics would be a PITA.
] If we make screen use \033[3m for italics (instead of its current use
] for standout), and \033[7m for standout (ANSI's "negative image"), then
] all pre-existing termcap/terminfo definitions for screen will be wrong,
] and users will have to be especially careful not to use newer versions
] of screen with older termcap/terminfo definitions for screen.
This means tmux and screen will escape things as standout when asked for
italics, which will prompt terminals (urxvt included) to render the text
in reverse video.
To correct this behavior, I added italics to the list of modes supported
by tmux, and redirected the italics attribute to it, instead of
standout (see attached patch; codes can be found in terminfo(5)). With
this change, I can already output actual italics in the status line. On
terminals that do not support italics, the text just shows up as regular
text (which I guess is the expected behavior, from trying lots of other
unsupported modes).
Programs (like vim) requesting italics still get standout, though,
because of screen's terminfo, which lists :so=\E[3m:ZH=\E[7m:, so I
added to vimrc, as a workaround (note I use default-terminal =
screen-256color instead of screen):
if $TERM =~ 'screen-256color'
" WARNING: ^[ must be entered as <c-v><c-[>
set t_so=^[[7m
set t_ZH=^[[3m
endif
A permanent fix would require me to build my own terminfo file for tmux,
but first I wanted to know what you guys think of this kind of solution.
Are there side-effects I didn't think of? How can I improve it? Should I
go ahead and submit a feature request?
diff -Ndur tmux-orig/tmux.h tmux/tmux.h
--- tmux-orig/tmux.h 2011-04-06 19:29:26.000000000 -0300
+++ tmux/tmux.h 2011-04-08 13:36:30.012264728 -0300
@@ -319,6 +319,7 @@
TTYC_SMKX, /* keypad_xmit, ks */
TTYC_SMSO, /* enter_standout_mode, so */
TTYC_SMUL, /* enter_underline_mode, us */
+ TTYC_SITM, /* enter_italics_mode, ZH */
TTYC_VPA, /* row_address, cv */
TTYC_XENL, /* eat_newline_glitch, xn */
};
diff -Ndur tmux-orig/tty.c tmux/tty.c
--- tmux-orig/tty.c 2011-04-06 19:18:05.000000000 -0300
+++ tmux/tty.c 2011-04-08 13:31:16.453699919 -0300
@@ -1218,7 +1218,7 @@
if (changed & GRID_ATTR_DIM)
tty_putcode(tty, TTYC_DIM);
if (changed & GRID_ATTR_ITALICS)
- tty_putcode(tty, TTYC_SMSO);
+ tty_putcode(tty, TTYC_SITM);
if (changed & GRID_ATTR_UNDERSCORE)
tty_putcode(tty, TTYC_SMUL);
if (changed & GRID_ATTR_BLINK)
diff -Ndur tmux-orig/tty-term.c tmux/tty-term.c
--- tmux-orig/tty-term.c 2011-02-15 13:12:28.000000000 -0200
+++ tmux/tty-term.c 2011-04-08 13:30:59.460904566 -0300
@@ -181,6 +181,7 @@
{ TTYC_SMKX, TTYCODE_STRING, "smkx" },
{ TTYC_SMSO, TTYCODE_STRING, "smso" },
{ TTYC_SMUL, TTYCODE_STRING, "smul" },
+ { TTYC_SITM, TTYCODE_STRING, "sitm" },
{ TTYC_VPA, TTYCODE_STRING, "vpa" },
{ TTYC_XENL, TTYCODE_FLAG, "xenl" },
};
------------------------------------------------------------------------------
Xperia(TM) PLAY
It's a major breakthrough. An authentic gaming
smartphone on the nation's most reliable network.
And it wants your games.
http://p.sf.net/sfu/verizon-sfdev
_______________________________________________
tmux-users mailing list
tmux-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-users