Ruby 1.9 curses bkgd

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