curses の bkgd(3) は Ruby 1.9 で効かないよね?
というか、それ以前にデフォルトの Ruby 1.9 ext/curses
で日本語化ける。この問題は去年
気になっていたが、これは ncursers5 を --enable-widec で入れた状態で、
いちど Ruby の configure&&make を済ませ、終わったところで
ext/curses/Makefile をいじくって -lncurses
となってるところを -lncursesw にして再度 make all install
すればよろし。
で、これで日本語OKになったものの、bkgd()が効かんなあ。
cursesの着色デモ用に作ったこのプログラム、
「何番の色にしますか?」 に答えるとRuby 1.8+curses
では全体がその色に変わるのに、
1.9では真白になって終わり。
cur-color.rb
#!/usr/bin/env ruby
# coding: euc-jp
require 'curses'
include Curses
init_screen
has_colors? or abort("この端末では色が使えません")
cbreak
start_color # 必ずinit_screenのあと、init_pairの前
# init_pair(0, COLOR_BLACK, COLOR_WHITE) # 白のままだね
init_pair(1, COLOR_RED, COLOR_BLACK)
init_pair(2, COLOR_GREEN, COLOR_BLACK)
init_pair(3, COLOR_YELLOW, COLOR_BLACK)
init_pair(4, COLOR_BLUE, COLOR_BLACK)
init_pair(5, COLOR_MAGENTA, COLOR_BLACK)
init_pair(6, COLOR_CYAN, COLOR_BLACK)
init_pair(7, COLOR_WHITE, COLOR_BLACK)
init_pair(8, COLOR_BLACK, COLOR_WHITE)
init_pair(9, COLOR_BLUE, COLOR_YELLOW)
nc = 9
init_pair(warn=10, COLOR_RED, COLOR_WHITE)
# 以上定義した色番号nは color_pair(n) で利用する
begin
clear
setpos(0, 0)
1.upto(nc) do |i|
addstr("#{i}: ")
attron(color_pair(i)) do
addstr("こんにちは ")
attron(A_BOLD) do
addstr("太こんにちは ")
end
attron(A_REVERSE) do
addstr("逆こんにちは ")
end
attron(A_REVERSE|A_BOLD) do
addstr("逆太こんにちは ")
end
end
addstr("\n")
end
refresh
addstr("標準色を変えてみます.\n")
while true
addstr("何番の色にしますか?: ")
choice = getch.chr.to_i
break if choice > 0 && choice <= nc
attron(color_pair(warn)) do addstr("\n1〜#{nc}の範囲にしてね。\n") end
end
bkgd(color_pair(choice)) # 標準の前景・背景色を設定
addstr("\n")
refresh
sleep 2
ensure
close_screen
end
みなさんとこではbkgd()で全部色変わりますか。