From: Jim Date: 2003-01-31T19:17:31+09:00 Subject: Ncurses refresh problem Hello, I am porting to Ruby a small calendar browser I made using C and ncurses. I can't seem to figure out why my newwin won't refresh until after a key is pressed. After hours of reading ncurses man pages, I am stumped. I've included the essential code below. And feel free to comment/correct my brute-force approach towards a more Ruby-ish style. Thanks. #!/usr/bin/env ruby require "ncurses" class Calendar attr_reader :month, :year, :day @@MONTHNAMES = [nil] + %w(January February March April May June July August September October November December) def initialize(time = Time.new(), y = 0, x = 0) @win = Ncurses.newwin(9, 22, y, x) # @win = Ncurses.subwin(Ncurses.stdscr, 9, 22, 0, 0) @border = true @month = time.month @day = time.mday @year = time.year end def leap_year?( year ) ( year % 4 == 0 ) && (( year % 100 != 0 ) || (year % 400 == 0)) end def days_in_month return 29 if @month == 2 && leap_year?( @year ) return [31, 28, 31, 30,31, 30, 31, 31, 30, 31, 30, 31][@month - 1] end def draw @win.clear() @win.border( *([0]*8) ) if @border == true Ncurses.mvwprintw(@win, 0, 4, " %s %d ", @@MONTHNAMES[@month], @year) Ncurses.mvwprintw(@win, 1, 1, "Su Mo Tu We Th Fr Sa") first = Time.local(@year, @month, 1).wday + 1 y = 2 (1..days_in_month()).each { |day| x = (day + first - 2) % 7 y += 1 if (x == 0 && day != 1) x = x * 3 + 1 Ncurses.mvwprintw(@win, y, x, "%2d", day) } @win.refresh end end if $0 == __FILE__ begin Ncurses.initscr Ncurses.noecho Ncurses.curs_set(0) cal = Calendar.new cal.draw while Ncurses.getch != ?q cal.draw end ensure Ncurses.echo Ncurses.endwin end end --