summaryrefslogtreecommitdiffstats
path: root/src/perl/example-refresh-hooks
diff options
context:
space:
mode:
Diffstat (limited to 'src/perl/example-refresh-hooks')
-rw-r--r--src/perl/example-refresh-hooks57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/perl/example-refresh-hooks b/src/perl/example-refresh-hooks
new file mode 100644
index 0000000..97d8d71
--- /dev/null
+++ b/src/perl/example-refresh-hooks
@@ -0,0 +1,57 @@
+#! perl
+
+=head1 NAME
+
+example-refresh-hooks - example of how to use refresh hooks
+
+=head1 DESCRIPTION
+
+Displays a very simple digital clock in the upper right corner of the
+window. Illustrates overwriting the refresh callbacks to create your own
+overlays or changes.
+
+=cut
+
+sub on_init {
+ my ($self) = @_;
+
+ # force a refresh every second
+ $self->{digital_clock_refresh} = urxvt::timer
+ ->new
+ ->start (1 + int urxvt::NOW)
+ ->interval (1)
+ ->cb (sub { $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;
+
+ $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) = @_;
+
+ 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});
+
+ ()
+}
+
+