aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Feist <shabble@metavore.org>2011-12-02 11:54:39 +0000
committerTom Feist <shabble@metavore.org>2011-12-02 11:54:39 +0000
commit9e930a95dff7c3878185e48c54ce51d9cd1feb4e (patch)
treeb52fcb92d2a5535c6e20c366eace22dfe12942bd
parentAnother flagrant abuse of version control because I'm too lazy to stash. (diff)
parentAdd trackbar with extra goto command, as I couldn't get in touch with (diff)
downloadirssi-scripts-9e930a95dff7c3878185e48c54ce51d9cd1feb4e.tar.gz
irssi-scripts-9e930a95dff7c3878185e48c54ce51d9cd1feb4e.zip
Merge remote-tracking branch 'origin/master'
-rw-r--r--bnotify/bnotify.pl136
-rw-r--r--fixery/README.md4
-rw-r--r--fixery/trackbar.pl200
3 files changed, 340 insertions, 0 deletions
diff --git a/bnotify/bnotify.pl b/bnotify/bnotify.pl
new file mode 100644
index 0000000..eaff6f8
--- /dev/null
+++ b/bnotify/bnotify.pl
@@ -0,0 +1,136 @@
+# todo: grap topic changes
+
+use strict;
+use vars qw($VERSION %IRSSI);
+
+use Irssi;
+$VERSION = '0.0.1';
+%IRSSI = (
+ authors => 'richo',
+ contact => 'richo@psych0tik.net',
+ name => 'bnotify',
+ description => 'Write notifications based on who\'s talking to you, also handle some window management and tmux alerts',
+ url => 'http://natalya.psych0tik.net/~richo/bnotify',
+ license => 'GNU General Public License',
+ changed => '$Date: 2011-06-21 21:51:30 +1000 (Tue, 21 Jun 2011) $'
+);
+# Originally based on fnotify.pl 0.0.3 by Thorsten Leemhuis
+# fedora@leemhuis.info
+# 'http://www.leemhuis.info/files/fnotify/',
+#
+#--------------------------------------------------------------------
+# In parts based on knotify.pl 0.1.1 by Hugo Haas
+# http://larve.net/people/hugo/2005/01/knotify.pl
+# which is based on osd.pl 0.3.3 by Jeroen Coekaerts, Koenraad Heijlen
+# http://www.irssi.org/scripts/scripts/osd.pl
+#
+# Other parts based on notify.pl from Luke Macken
+# http://fedora.feedjack.org/user/918/
+#
+#--------------------------------------------------------------------
+
+# TODO
+# Add settings for which networks to beep on
+
+my @alert_nets = ();
+sub bnotify_init {
+ Irssi::settings_add_str('bnotify', 'bnotify_alert_nets', '');
+ @alert_nets = split(/ /, Irssi::settings_get_str('bnotify_alert_nets'));
+}
+
+#--------------------------------------------------------------------
+# Private message parsing
+#--------------------------------------------------------------------
+# TODO
+# Test to see if the privmsg went to a status window, and is from bitlbee in
+# which case send it to it's own window
+
+sub priv_msg {
+ my ($server,$msg,$nick,$address,$target) = @_;
+ # Does this expose issues if someone includes regexp chars in their server
+ # tag?
+ if (grep(/^$server->{tag}$/, @alert_nets)) {
+ Irssi::command('beep');
+ }
+ filewrite($server->{tag}.":".$nick." private");
+ #Irssi::settings_set_str('autocreate_query_level', 'DCCMSGS MSGS');
+}
+
+#--------------------------------------------------------------------
+# Private msg windowing
+#--------------------------------------------------------------------
+
+sub priv_msg_winhook {
+ my ($server,$msg,$nick,$address,$target) = @_;
+ if (grep($server->{tag}, @alert_nets)) {
+ Irssi::settings_set_str('autocreate_query_level', 'DCCMSGS MSGS');
+ }
+}
+
+#--------------------------------------------------------------------
+# Printing hilight's
+#--------------------------------------------------------------------
+
+sub hilight {
+ my ($dest, $text, $stripped) = @_;
+ if ($dest->{level} & MSGLEVEL_HILIGHT) {
+ filewrite($dest->{server}->{tag}.":".$dest->{target}. " " .$stripped );
+ }
+}
+
+#--------------------------------------------------------------------
+# Handle Arguments
+#--------------------------------------------------------------------
+
+sub cmd_add {
+ my $net = shift;
+ if (not grep($net, @alert_nets)) {
+ push @alert_nets, $net;
+ Irssi::active_win->print("Added $net to alert networks.");
+ } else {
+ Irssi::active_win->print("$net already configured to alert.");
+ }
+}
+
+sub cmd_del {
+ my $net = shift;
+ my @valid;
+ my $idx = 0;
+ while ($idx <= $#alert_nets) {
+ if (lc($alert_nets[$idx]) eq lc($net)) {
+ push @valid, $alert_nets[$idx];
+ }
+ $idx++;
+ }
+ if ($#alert_nets != $#valid) {
+ Irssi::active_win->print("Removed $net from alert networks.");
+ } else {
+ Irssi::active_win->print("$net didn't exist in alert networks.");
+ }
+ @alert_nets = @valid;
+}
+
+#--------------------------------------------------------------------
+# The actual printing
+#--------------------------------------------------------------------
+
+sub filewrite {
+ my ($text) = @_;
+ open(FILE, '>' .Irssi::get_irssi_dir() . '/fnotify');
+ print FILE $text . "\n";
+ close (FILE);
+}
+
+#--------------------------------------------------------------------
+# Irssi::signal_add_last / Irssi::command_bind
+#--------------------------------------------------------------------
+
+Irssi::signal_add_first("message private", "priv_msg_winhook");
+Irssi::signal_add_last("message private", "priv_msg");
+Irssi::signal_add_last("print text", "hilight");
+
+Irssi::command_bind('bnotify add', \&cmd_add);
+Irssi::command_bind('bnotify del', \&cmd_del);
+bnotify_init();
+
+#- end
diff --git a/fixery/README.md b/fixery/README.md
index a429748..c0e48df 100644
--- a/fixery/README.md
+++ b/fixery/README.md
@@ -17,3 +17,7 @@ When there are some here, this will be a shiney exciting list:
* **TODO** Add proper settings support
* **TODO**
+
+* `trackbar` - Shows a trackbar with where you last read up to in a buffer
+
+ * **TODO** Verify this works with other settings for irssi time output
diff --git a/fixery/trackbar.pl b/fixery/trackbar.pl
new file mode 100644
index 0000000..22d82aa
--- /dev/null
+++ b/fixery/trackbar.pl
@@ -0,0 +1,200 @@
+# trackbar.pl
+#
+# This little script will do just one thing: it will draw a line each time you
+# switch away from a window. This way, you always know just upto where you've
+# been reading that window :) It also removes the previous drawn line, so you
+# don't see double lines.
+#
+# Usage:
+#
+# The script works right out of the box, but if you want you can change
+# the working by /set'ing the following variables:
+#
+# trackbar_string The characters to repeat to draw the bar
+# trackbar_style The style for the bar, %r is red for example
+# See formats.txt that came with irssi
+#
+# /mark is a command that will redraw the line at the bottom. However! This
+# requires irssi version after 20021228. otherwise you'll get the error
+# redraw: unknown command, and your screen is all goofed up :)
+#
+# /upgrade & buf.pl notice: This version tries to remove the trackbars before
+# the upgrade is done, so buf.pl does not restore them, as they are not removeable
+# afterwards by trackbar. Unfortiounatly, to make this work, trackbar and buf.pl
+# need to be loaded in a specific order. Please experiment to see which order works
+# for you (strangely, it differs from configuration to configuration, something I will
+# try to fix in a next version)
+#
+# Authors:
+# - Main maintainer & author: Peter 'kinlo' Leurs
+# - Many thanks to Timo 'cras' Sirainen for placing me on my way
+# - on-upgrade-remove-line patch by Uwe Dudenhoeffer
+#
+# Version history:
+# 1.4: - Changed our's by my's so the irssi script header is valid
+# - Removed utf-8 support. In theory, the script should work w/o any
+# problems for utf-8, just set trackbar_string to a valid utf-8 character
+# and everything *should* work. However, this script is being plagued by
+# irssi internal bugs. The function Irssi::settings_get_str does NOT handle
+# unicode strings properly, hence you will notice problems when setting the bar
+# to a unicode char. For changing your bar to utf-8 symbols, read the line sub.
+# 1.3: - Upgrade now removes the trackbars.
+# - Some code cleanups, other defaults
+# - /mark sets the line to the bottom
+# 1.2: - Support for utf-8
+# - How the bar looks can now be configured with trackbar_string
+# and trackbar_style
+# 1.1: - Fixed bug when closing window
+# 1.0: - Initial release
+#
+#
+# Call for help!
+#
+# There is a trackbar version 2.0 that properly handles resizes and immediate config change
+# activation. However, there is/are some bug(s) in irssi's main buffer/window code that causes
+# irssi to 'forget' lines, which is ofcourse completly unaccepteable. I haven't found the time
+# nor do I know the irssi's internals enough to find and fix this bug, if you want to help, please
+# contact me, I'll give you a copy of the 2.0 version that will immediatly show you the problems.
+#
+# Known bugs:
+# - if you /clear a window, it will be uncleared when returning to the window
+# - UTF-8 characters in the trackbar_string doesnt work. This is an irssi bug.
+# - if you resize your irssi (in xterm or so) the bar is not resized
+# - changing the trackbar style is only visible after returning to a window
+# however, changing style/resize takes in effect after you left the window.
+#
+# Whishlist/todo:
+# - instead of drawing a line, just invert timestamp or something,
+# to save a line (but I don't think this is possible with current irssi)
+# - some pageup keybinding possibility, to scroll up upto the trackbar
+# - <@coekie> kinlo: if i switch to another window, in another split window, i
+# want the trackbar to go down in the previouswindow in that splitwindow :)
+# - < bob_2> anyway to clear the line once the window is read?
+# - < elho> kinlo: wishlist item: a string that gets prepended to the repeating pattern
+# - < elho> an option to still have the timestamp in front of the bar
+# - < elho> oh and an option to not draw it in the status window :P
+#
+# BTW: when you have feature requests, mailing a patch that works is the fastest way
+# to get it added :p
+
+use strict;
+use POSIX qw(strftime);
+use 5.6.1;
+use Irssi;
+use Irssi::TextUI;
+
+my $VERSION = "1.4";
+
+my %IRSSI = (
+ authors => "Peter 'kinlo' Leurs",
+ contact => "peter\@pfoe.be",
+ name => "trackbar",
+ description => "Shows a bar where you've last read a window",
+ license => "GPLv2",
+ url => "http://www.pfoe.be/~peter/trackbar/",
+ changed => "Thu Feb 20 16:18:08 2003",
+);
+
+my %config;
+
+Irssi::settings_add_str('trackbar', 'trackbar_string' => '-');
+$config{'trackbar_string'} = Irssi::settings_get_str('trackbar_string');
+
+Irssi::settings_add_str('trackbar', 'trackbar_style' => '%K');
+$config{'trackbar_style'} = Irssi::settings_get_str('trackbar_style');
+
+Irssi::signal_add(
+ 'setup changed' => sub {
+ $config{'trackbar_string'} = Irssi::settings_get_str('trackbar_string');
+ $config{'trackbar_style'} = Irssi::settings_get_str('trackbar_style');
+ if ($config{'trackbar_style'} =~ /(?<!%)[^%]|%%|%$/) {
+ Irssi::print(
+ "trackbar: %RWarning!%n 'trackbar_style' seems to contain "
+ . "printable characters. Only use format codes (read "
+ . "formats.txt).", MSGLEVEL_CLIENTERROR);
+ }
+ }
+);
+
+Irssi::signal_add(
+ 'window changed' => sub {
+ my (undef, $oldwindow) = @_;
+
+ if ($oldwindow) {
+ my $line = $oldwindow->view()->get_bookmark('trackbar');
+ $oldwindow->view()->remove_line($line) if defined $line;
+ $oldwindow->print(line($oldwindow->{'width'}), MSGLEVEL_NEVER);
+ $oldwindow->view()->set_bookmark_bottom('trackbar');
+ }
+ }
+);
+
+sub line {
+ my $width = shift;
+ my $string = $config{'trackbar_string'};
+ $string = '-' unless defined $string;
+
+ # There is a bug in irssi's utf-8 handling on config file settings, as you
+ # can reproduce/see yourself by the following code sniplet:
+ #
+ # my $quake = pack 'U*', 8364; # EUR symbol
+ # Irssi::settings_add_str 'temp', 'temp_foo' => $quake;
+ # Irssi::print length $quake;
+ # # prints 1
+ # Irssi::print length Irssi::settings_get_str 'temp_foo';
+ # # prints 3
+ #
+ #
+ # Trackbar used to have a workaround, but on recent versions of perl/irssi
+ # it does no longer work. Therefore, if you want your trackbar to contain
+ # unicode characters, uncomment the line below for a nice full line, or set
+ # the string to whatever char you want.
+
+ # $string = pack('U*', 0x2500);
+
+
+ my $length = length $string;
+
+ if ($length == 0) {
+ $string = '-';
+ $length = 1;
+ }
+
+ my $times = $width / $length;
+ $times = int(1 + $times) if $times != int($times);
+ $string =~ s/%/%%/g;
+ return $config{'trackbar_style'} . substr($string x $times, 0, $width);
+}
+
+# Remove trackbars on upgrade - but this doesn't really work if the scripts are not loaded in the correct order... watch out!
+
+Irssi::signal_add_first( 'session save' => sub {
+ for my $window (Irssi::windows) {
+ next unless defined $window;
+ my $line = $window->view()->get_bookmark('trackbar');
+ $window->view()->remove_line($line) if defined $line;
+ }
+ }
+);
+
+sub cmd_mark {
+ my $window = Irssi::active_win();
+# return unless defined $window;
+ my $line = $window->view()->get_bookmark('trackbar');
+ $window->view()->remove_line($line) if defined $line;
+ $window->print(line($window->{'width'}), MSGLEVEL_NEVER);
+ $window->view()->set_bookmark_bottom('trackbar');
+ Irssi::command("redraw");
+}
+
+sub cmd_goto {
+ my $window = Irssi::active_win();
+ my $line = $window->view()->get_bookmark('trackbar');
+ # FIXME? does this work properly if they use a different date format?
+ my $time = strftime("%H:%M", localtime($line->{info}->{time}));
+ Irssi::command("GOTO $time");
+}
+
+
+Irssi::command_bind('mark', 'cmd_mark');
+Irssi::command_bind('gototb', 'cmd_goto');