]> git.99rst.org Git - irssi-scripts.irssi.org.git/commitdiff
add url.pl
authorJean-Yves Lefort <redacted>
Thu, 21 Nov 2002 05:04:52 +0000 (06:04 +0100)
committerbw1 <redacted>
Sat, 10 Sep 2022 09:49:55 +0000 (11:49 +0200)
scripts/url.pl [new file with mode: 0644]

diff --git a/scripts/url.pl b/scripts/url.pl
new file mode 100644 (file)
index 0000000..a9b6b46
--- /dev/null
@@ -0,0 +1,329 @@
+# $Id: url.pl,v 1.52 2002/11/21 06:04:52 jylefort Exp $
+
+use Irssi 20020121.2020 ();
+$VERSION = "0.54";
+%IRSSI = (
+         authors     => 'Jean-Yves Lefort',
+         contact     => 'jylefort\@brutele.be, decadix on IRCNet',
+         name        => 'url',
+         description => 'An URL grabber for Irssi',
+         license     => 'BSD',
+         url         => 'http://void.adminz.be/',
+         changed     => '$Date: 2002/11/21 06:04:52 $ ',
+);
+
+# description:
+#
+#      url.pl grabs URLs in messages and allows you to open them on the fly,
+#      or to write them in a HTML file and open that file.
+#
+# /set's:
+#
+#      url_grab_level
+#
+#              message levels to take in consideration
+#              example: PUBLICS ACTIONS
+#
+#      url_redundant
+#
+#              whether to grab same URLs multiple times or not
+#              example: ON
+#
+#      url_verbose_grab
+#
+#              whether to grab verbosely or not
+#              example: OFF
+#
+#      url_hilight
+#
+#              whether to hilight the URLs in the text or not
+#              example: OFF
+#
+#      url_index_color
+#
+#              hilight index color (mirc color string)
+#
+#      url_color
+#
+#              hilight URL color (mirc color string)
+#
+#      browse_command
+#
+#              a command used to open URLs
+#              %u will be replaced by the URL
+#              example: galeon %u &
+#
+#      url_file
+#
+#              where to write the URL list
+#              example: ~/.irssi-urls.html
+#
+# commands
+#
+#      /URL [-clear|<number>]
+#
+#              -clear will clear the URL list.
+#
+#              <number> will open the specified URL.
+#
+#              If no arguments are specified, a HTML file containing all
+#              grabbed URLs will be written and opened.
+#
+# changes:
+#
+#      2002-11-21      release 0.54
+#                      * added a DTD to the generated HTML file, suggested
+#                        by Hugo Haas <hugo@larve.net>
+#
+#      2002-11-19      release 0.53
+#                      * eh yes, once again a better regexp by
+#                        Hugo Haas <hugo@larve.net>
+#
+#      2002-11-06      release 0.52
+#                      * yet another regexp correction, again by
+#                        Hugo Haas <hugo@larve.net>
+#
+#      2002-10-23      release 0.51
+#                      * URI regexp corrected by Hugo Haas <hugo@larve.net>
+#
+#      2002-09-26      release 0.50
+#                      * entirely rewritten; the previous template bloatness
+#                        has been dropped to get back to a simpler concept
+#
+#      2002-07-04      release 0.47
+#                      * signal_add's uses a reference instead of a string
+#
+#      2002-03-11      release 0.46
+#                      * fixed an oblivion in the documentation
+#
+#      2002-02-14      release 0.45
+#                      * replaced theme capability by /set url_color,
+#                        fixing a bug in the URL hilighting
+#
+#      2002-02-09      release 0.44
+#                      * 0.43 didn't grabbed anything: fixed
+#
+#      2002-02-09      release 0.43
+#                      * url_hilight was _still_ causing an infinite loop
+#                        under certain conditions: fixed
+#                      * URLs found at the start of a message were
+#                        hilighted wrongly: fixed
+#
+#      2002-02-09      release 0.42
+#                      * if url_hilight was enabled, an infinite loop was
+#                        caused while printing the hilighted message: fixed
+#
+#      2002-02-08      release 0.41
+#                      * safer percent substitutions
+#                      * improved URL regexp
+#
+#      2002-02-08      release 0.40
+#                      * added /URL -create command
+#                      * added url_hilight setting
+#
+#      2002-02-01      release 0.34
+#                      * more precise URL regexp
+#
+#      2002-02-01      release 0.33
+#                      * added /URL - command
+#                      * added url_redundant setting
+#
+#      2002-02-01      release 0.32
+#                      * some little improvements made in the URL regexp
+#
+#      2002-01-31      release 0.31
+#                      * oops, '<@idiot> I am really stupid' was grabbed coz
+#                        the '@' mode char trigerred the email regexp
+#
+#      2002-01-31      release 0.30
+#                      * major update: not HTML-oriented anymore; can generate
+#                        any type of text file by the use of template files
+#
+#      2002-01-28      release 0.23
+#                      * changes in url_item and url_item_timestamp_format
+#                        settings will now be seen immediately
+#                      * "Added item #n in URL list" is now printed after
+#                        the grabbed message
+#
+#      2002-01-28      release 0.22
+#                      * messages are now saved as they were printed in irssi
+#                      * removed %n format of url_item
+#
+#      2002-01-27      release 0.21
+#                      * uses builtin expand
+#
+#      2002-01-27      release 0.20
+#                      * added a %s format to url_item
+#                      * changed the %d format of url_page to %s
+#                      * added url_{page|item}_timestamp_format settings
+#                      * reworked the documentation
+#
+#      2002-01-25      release 0.12
+#                      * added url_verbose_grab_setting
+#      
+#      2002-01-24      release 0.11
+#                      * now handles actions correctly
+#
+#      2002-01-23      initial release
+#
+# todo:
+#
+#      * also hilight redundant URLs
+#      * open URLs with alternate programs
+#      * add a 'url_grab_own_messages' setting
+
+use strict;
+use POSIX qw(strftime);
+
+use constant MSGLEVEL_NO_URL => 0x0400000;
+
+my @items;
+
+# -verbatim- import expand
+sub expand {
+  my ($string, %format) = @_;
+  my ($len, $attn, $repl) = (length $string, 0);
+  
+  $format{'%'} = '%';
+
+  for (my $i = 0; $i < $len; $i++) {
+    my $char = substr $string, $i, 1;
+    if ($attn) {
+      $attn = undef;
+      if (exists($format{$char})) {
+       $repl .= $format{$char};
+      } else {
+       $repl .= '%' . $char;
+      }
+    } elsif ($char eq '%') {
+      $attn = 1;
+    } else {
+      $repl .= $char;
+    }
+  }
+  
+  return $repl;
+}
+# -verbatim- end
+
+sub print_text {
+  my ($textdest, $text, $stripped) = @_;
+  
+  if (! ($textdest->{level} & MSGLEVEL_NO_URL)
+      && (Irssi::level2bits(Irssi::settings_get_str('url_grab_level'))
+         & $textdest->{level})
+      && ($stripped =~ /[a-zA-Z0-9+-.]+:\/\/[^ \t\<\>\"]+/o)) {
+    
+    if (! Irssi::settings_get_bool('url_redundant')) {
+      foreach (@items) { return if ($_->{url} eq $&) }
+    }
+    
+    push @items,
+      {
+       time => time,
+       target => $textdest->{target},
+       pre_url => $`,
+       url => $&,
+       post_url => $'
+      };
+
+    if (Irssi::settings_get_bool('url_hilight')) {
+      my $url_pos = index $text, $&;
+      $textdest->{level} |= MSGLEVEL_NO_URL;
+      Irssi::signal_emit('print text', $textdest,
+                        substr($text, 0, $url_pos) .
+                        Irssi::settings_get_str('url_index_color') . @items . '\ f:' .
+                        Irssi::settings_get_str('url_color') . $& . '\ f' .
+                        substr($text, $url_pos + length $&),
+                        $stripped);
+      Irssi::signal_stop();
+    }
+    
+    Irssi::print('Added item #' . @items . ' to URL list')
+       if Irssi::settings_get_bool('url_verbose_grab');
+  }
+}
+
+sub write_file {
+  my $file = shift;
+
+  open(FILE, ">$file") or return $!;
+
+  print FILE <<'EOF' or return $!;
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>IRC URL list</title>
+  </head>
+  <body>
+    <center>
+      <table border="1" cellpadding="5">
+       <caption>IRC URL list</caption>
+       <tr><th>time<th>target<th>message</tr>
+EOF
+
+  foreach (@items) {
+    my $timestamp = strftime('%c', localtime $_->{time});
+    print FILE "       <tr><td>$timestamp<td>$_->{target}<td>$_->{pre_url}<a href=\"$_->{url}\">$_->{url}</a>$_->{post_url}</tr>\n" or return $!;
+  }
+  
+  print FILE <<'EOF' or return $!;
+      </table>
+    </center>
+    <hr>
+    <center><small>Generated by url.pl</small>
+  </body>
+</html>
+EOF
+
+  close(FILE) or return $!;
+
+  return undef;
+}
+
+sub url {
+  my ($args, $server, $item) = @_;
+  my ($file) = glob Irssi::settings_get_str('url_file');
+  my $command = Irssi::settings_get_str('browse_command');
+
+  if ($args ne '') {
+    if (lc $args eq '-clear') {
+      @items = ();
+      Irssi::print('URL list cleared');
+    } elsif ($args =~ /^[0-9]+$/) {
+      if ($args > 0 && $items[$args - 1]) {
+       system(expand($command, 'u', $items[$args - 1]->{url}));
+      } else {
+       Irssi::print("URL #$args not found");
+      }
+    } else {
+      Irssi::print('Usage: /URL [-clear|<number>]', MSGLEVEL_CLIENTERROR);
+    }
+  } else {
+    if (@items) {
+      my $error;
+      if ($error = write_file($file)) {
+       Irssi::print("Unable to write $file: $error", MSGLEVEL_CLIENTERROR);
+      } else  {
+       system(expand($command, 'u', $file));
+      }
+    } else {
+      Irssi::print('URL list is empty');
+    }
+  }
+}
+
+Irssi::settings_add_str('misc', 'url_grab_level',
+                       'PUBLIC TOPICS ACTIONS MSGS DCCMSGS');
+Irssi::settings_add_bool('lookandfeel', 'url_verbose_grab', undef);
+Irssi::settings_add_bool('lookandfeel', 'url_hilight', 1);
+Irssi::settings_add_str('lookandfeel', 'url_index_color', '\ 308');
+Irssi::settings_add_str('lookandfeel', 'url_color', '\ 312\1f');
+Irssi::settings_add_bool('misc', 'url_redundant', 0);
+Irssi::settings_add_str('misc', 'browse_command',
+                       'galeon-wrapper %u >/dev/null &');
+Irssi::settings_add_str('misc', 'url_file', '~/.irc_url_list.html');
+
+Irssi::signal_add('print text', \&print_text);
+
+Irssi::command_bind('url', \&url);
git clone https://git.99rst.org/PROJECT