--- rxvt-unicode/src/perl/digital-clock 2006/01/03 01:15:00 1.1 +++ rxvt-unicode/src/perl/digital-clock 2006/01/03 01:29:55 1.4 @@ -5,34 +5,43 @@ sub on_init { my ($self) = @_; + # force a refresh every second $self->{digital_clock_refresh} = urxvt::timer ->new ->start (urxvt::NOW) ->cb (sub { - $self->{timer}->start ($self->{timer}->at + 1); + $self->{digital_clock_refresh}->start ($self->{digital_clock_refresh}->at + 1); $self->want_refresh; }); () } +# before refreshing: replace upper right with the clock display sub on_refresh_begin { my ($self) = @_; my $time = sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2, 1, 0]; my $xpos = $self->ncol - length $time; - $self->{digital_clock_rend} = $self->ROW_r (0, [(0x00020000 + urxvt::DEFAULT_RSTYLE) x length $time], $xpos); + $xpos >= 0 + or return; + + $self->{digital_clock_rend} = $self->ROW_r (0, [(urxvt::DEFAULT_RSTYLE) x length $time], $xpos); $self->{digital_clock_text} = $self->ROW_t (0, $time, $xpos); () } +# after refreshing: restore previous screen contents sub on_refresh_end { my ($self) = @_; - $self->ROW_r (0, $self->{digital_clock_rend}); - $self->ROW_t (0, $self->{digital_clock_text}); + exists $self->{digital_clock_text} + or return; + + $self->ROW_r (0, delete $self->{digital_clock_rend}); + $self->ROW_t (0, delete $self->{digital_clock_text}); () }