aboutsummaryrefslogtreecommitdiffstats
path: root/vim-mode/vim_mode.pl
diff options
context:
space:
mode:
authorTom Feist <shabble@metavore.org>2010-10-26 21:05:10 +0000
committerTom Feist <shabble@metavore.org>2010-10-26 21:05:10 +0000
commit52411c42ef00c586bce4f961b54efc38d2d60e52 (patch)
tree112c3de9507e280ba0e75ef0ab7f92e6426d771f /vim-mode/vim_mode.pl
parentMerge remote branch 'origin/dev' (diff)
downloadirssi-scripts-52411c42ef00c586bce4f961b54efc38d2d60e52.tar.gz
irssi-scripts-52411c42ef00c586bce4f961b54efc38d2d60e52.zip
implement :servernext/prev and :itemnext/prev for switching between servers and
window items.
Diffstat (limited to 'vim-mode/vim_mode.pl')
-rw-r--r--vim-mode/vim_mode.pl85
1 files changed, 85 insertions, 0 deletions
diff --git a/vim-mode/vim_mode.pl b/vim-mode/vim_mode.pl
index d61db3d..71b30b1 100644
--- a/vim-mode/vim_mode.pl
+++ b/vim-mode/vim_mode.pl
@@ -470,6 +470,23 @@ my $commands_ex
type => C_EX },
set => { char => ':set', func => \&ex_set,
type => C_EX },
+ itemnext => { char => ':itemnext', func => \&ex_item_next,
+ type => C_EX },
+ inext => { char => ':itemnext', func => \&ex_item_next,
+ type => C_EX },
+ itemprev => { char => ':itemprev', func => \&ex_item_prev,
+ type => C_EX },
+ iprev => { char => ':itemprev', func => \&ex_item_prev,
+ type => C_EX },
+ servernext => { char => ':servernext', func => \&ex_server_next,
+ type => C_EX },
+ snext => { char => ':servernext', func => \&ex_server_next,
+ type => C_EX },
+ serverprev => { char => ':serverprev', func => \&ex_server_prev,
+ type => C_EX },
+ sprev => { char => ':serverprev', func => \&ex_server_prev,
+ type => C_EX },
+
};
# MAPPINGS
@@ -1501,6 +1518,7 @@ sub cmd_undo {
}
return (undef, undef);
}
+
sub cmd_redo {
print "Redo!" if DEBUG;
@@ -1639,6 +1657,7 @@ sub ex_bdelete {
}
Irssi::command('window close');
}
+
sub ex_buffer {
my ($arg_str, $count) = @_;
@@ -1683,6 +1702,72 @@ sub ex_buffer {
}
}
+sub ex_item_next {
+ my ($arg_str, $count) = @_;
+ my $win = Irssi::active_win;
+ $count = 1 unless defined $count;
+
+ $win->item_next for (1..$count);
+}
+
+sub ex_item_prev {
+ my ($arg_str, $count) = @_;
+ my $win = Irssi::active_win;
+ $count = 1 unless defined $count;
+
+ $win->item_prev for (1..$count);
+}
+
+sub ex_server_next {
+ my ($arg_str, $count) = @_;
+
+ my @server_ids = map { $_->{tag} . '/' . $_->{nick} } Irssi::servers;
+ my $server = Irssi::active_server;
+ my $current_id = $server->{tag} . '/' . $server->{nick};
+ my $next = 0;
+ my $server_count = scalar @server_ids;
+ for my $i (0..$server_count - 1) {
+ my $s_id = $server_ids[$i];
+ if (defined($s_id) and ($s_id eq $current_id)) {
+ print "Found match at $i" if DEBUG;
+ $next = ($i + 1) % $server_count;
+ last;
+ }
+ }
+
+ my $next_server = $server_ids[$next];
+ $next_server =~ s|^([^/]+)/.*$|$1|;
+
+ print "Changing to server: $next: $next_server" if DEBUG;
+ Irssi::command("window server $next_server");
+}
+
+sub ex_server_prev {
+ my ($arg_str, $count) = @_;
+
+ my @server_ids = map { $_->{tag} . '/' . $_->{nick} } Irssi::servers;
+ my $server = Irssi::active_server;
+ my $current_id = $server->{tag} . '/' . $server->{nick};
+ my $prev = 0;
+ my $server_count = scalar @server_ids;
+
+ for my $i (0..$server_count - 1) {
+ my $s_id = $server_ids[$i];
+ if (defined($s_id) and ($s_id eq $current_id)) {
+ print "Found match at $i" if DEBUG;
+ $prev = ($i - 1) % $server_count;
+ last;
+ }
+ }
+
+ my $prev_server = $server_ids[$prev];
+ $prev_server =~ s|^([^/]+)/.*$|$1|;
+
+ print "Changing to server: $prev: $prev_server" if DEBUG;
+ Irssi::command("window server $prev_server");
+
+}
+
sub ex_registers {
my ($arg_str, $count) = @_;