読者です 読者をやめる 読者になる 読者になる

tmuxでborderがまともに表示できない件

tmuxでTERMをscreenにして使うと、ncursesなどで使われるborderが"qqqqqqqq"の様になってしまう。
これは環境変数NCURSES_NO_UTF8_ACSを0に設定すると直る。
NCURSES_NO_UTF8_ACSの詳細はncursesのmanを参照。

tmuxで環境変数を設定するには以下のように書く。

set-environment -g NCURSES_NO_UTF8_ACS 0

さらに、tmux 1.4からは上記の設定してもborderが正常に表示できない場合がある。
理由はborderにvt100のline drawing charactersではなく、Unicodeの罫線を使うようになったから。

https://bitbucket.org/edogawaconan/tmux/changeset/2661dc9f9551

Unicodeの罫線は日本語のフォントだと全角なのでborderがずれてしまう。
そのため、パッチを書いてvt100のline drawing charactersを使う仕様に戻した。

diff -ur tmux-1.4.orig/tty-acs.c tmux-1.4/tty-acs.c
--- tmux-1.4.orig/tty-acs.c	2010-09-19 00:43:53.000000000 +0900
+++ tmux-1.4/tty-acs.c	2011-05-21 16:26:44.263937939 +0900
@@ -81,7 +81,7 @@
 	struct tty_acs_entry *entry;
 
 	/* If not a UTF-8 terminal, use the ACS set. */
-	if (!(tty->flags & TTY_UTF8)) {
+	if (1) {
 		if (tty->term->acs[ch][0] == '\0')
 			return (NULL);
 		return (&tty->term->acs[ch][0]);
diff -ur tmux-1.4.orig/tty.c tmux-1.4/tty.c
--- tmux-1.4.orig/tty.c	2010-12-07 06:57:56.000000000 +0900
+++ tmux-1.4/tty.c	2011-05-21 16:23:06.310937851 +0900
@@ -47,7 +47,7 @@
 	    const struct grid_cell *, const struct grid_utf8 *);
 
 #define tty_use_acs(tty) \
-	(tty_term_has(tty->term, TTYC_ACSC) && !((tty)->flags & TTY_UTF8))
+	(tty_term_has(tty->term, TTYC_ACSC))
 
 void
 tty_init(struct tty *tty, int fd, char *term)