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()で全部色変わりますか。