From c238bc9b4976fb8343093f1942190f7731923e05 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 3 Jan 2006 01:29:55 +0000 Subject: [PATCH] *** empty log message *** --- src/perl/digital-clock | 15 ++++++++++++--- src/rxvtperl.xs | 8 ++++---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/perl/digital-clock b/src/perl/digital-clock index 20a6e528..413951ee 100644 --- a/src/perl/digital-clock +++ b/src/perl/digital-clock @@ -5,6 +5,7 @@ sub on_init { my ($self) = @_; + # force a refresh every second $self->{digital_clock_refresh} = urxvt::timer ->new ->start (urxvt::NOW) @@ -16,23 +17,31 @@ sub on_init { () } +# 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}); () } diff --git a/src/rxvtperl.xs b/src/rxvtperl.xs index 1fdab62d..a6d18c3f 100644 --- a/src/rxvtperl.xs +++ b/src/rxvtperl.xs @@ -473,10 +473,10 @@ rxvt_term::ROW_t (int row_number, SV *new_text = 0, int start_col = 0) int len = wcslen (wstr); - if (start_col + len > THIS->ncol) + if (!IN_RANGE_INC (start_col, 0, THIS->ncol - len)) { free (wstr); - croak ("new_text extends beyond right margin"); + croak ("new_text extends beyond horizontal margins"); } for (int col = start_col; col < start_col + len; col++) @@ -517,8 +517,8 @@ rxvt_term::ROW_r (int row_number, SV *new_rend = 0, int start_col = 0) AV *av = (AV *)SvRV (new_rend); int len = av_len (av) + 1; - if (start_col + len > THIS->ncol) - croak ("new_rend array extends beyond right margin"); + if (!IN_RANGE_INC (start_col, 0, THIS->ncol - len)) + croak ("new_rend array extends beyond horizontal margins"); for (int col = start_col; col < start_col + len; col++) { -- 2.34.1