summaryrefslogtreecommitdiffstats
path: root/scripts/complete_at.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/complete_at.pl')
-rw-r--r--scripts/complete_at.pl40
1 files changed, 40 insertions, 0 deletions
diff --git a/scripts/complete_at.pl b/scripts/complete_at.pl
new file mode 100644
index 0000000..597e81e
--- /dev/null
+++ b/scripts/complete_at.pl
@@ -0,0 +1,40 @@
+use strict;
+use warnings;
+
+our $VERSION = '0.2'; # 49f841075725906
+our %IRSSI = (
+ authors => 'Nei',
+ contact => 'Nei @ anti@conference.jabber.teamidiot.de',
+ url => "http://anti.teamidiot.de/",
+ name => 'complete_at',
+ description => 'Complete nicks after @ (twitter-style)',
+ license => 'ISC',
+ );
+
+# Usage
+# =====
+# write @ and type on the Tab key to complete nicks
+
+{ package Irssi::Nick }
+
+my $complete_char = '@';
+
+sub complete_at {
+ my ($cl, $win, $word, $start, $ws) = @_;
+ if ($cl && !@$cl
+ && $win && $win->{active}
+ && $win->{active}->isa('Irssi::Channel')) {
+ if ((my $pos = rindex $word, $complete_char) > -1) {
+ my ($pre, $post) = ((substr $word, 0, $pos), (substr $word, $pos + 1));
+ my $pre2 = length $start ? "$start $pre" : $pre;
+ my $pre3 = length $pre2 ? "$pre2$complete_char" : "";
+ Irssi::signal_emit('complete word', $cl, $win, $post, $pre3, $ws);
+ unless (@$cl) {
+ push @$cl, grep { /^\Q$post/i } map { $_->{nick} } $win->{active}->nicks();
+ }
+ map { $_ = "$pre$complete_char$_" } @$cl;
+ }
+ }
+}
+
+Irssi::signal_add_last('complete word' => 'complete_at');