*** empty log message ***
authorroot <root>
Tue, 3 Jan 2006 01:29:55 +0000 (01:29 +0000)
committerroot <root>
Tue, 3 Jan 2006 01:29:55 +0000 (01:29 +0000)
src/perl/digital-clock
src/rxvtperl.xs

index 20a6e528b30e91387027733e86662bb691c6aa11..413951ee5fb043baf71ca6d64cb76202ac3b45bd 100644 (file)
@@ -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});
 
    ()
 }
index 1fdab62de7025912aa3aff86d256a59f3133719e..a6d18c3f41ffedb94ca4476de7c564d26326b09c 100644 (file)
@@ -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++)
               {