]> git.99rst.org Git - irssi-scripts.irssi.org.git/commitdiff
[jump] new script to navigate to the previously active windows
authorAilin Nemui <redacted>
Wed, 7 Nov 2018 11:19:46 +0000 (12:19 +0100)
committerAilin Nemui <redacted>
Wed, 7 Nov 2018 11:19:46 +0000 (12:19 +0100)
scripts/jump.pl [new file with mode: 0644]

diff --git a/scripts/jump.pl b/scripts/jump.pl
new file mode 100644 (file)
index 0000000..2926b6b
--- /dev/null
@@ -0,0 +1,63 @@
+use strict;
+use warnings;
+use Irssi;
+
+our $VERSION = '1.1'; # 48b3e25efb559bd
+our %IRSSI = (
+    authors     => 'Nei',
+    contact     => 'Nei @ anti@conference.jabber.teamidiot.de',
+    url         => "http://anti.teamidiot.de/",
+    name        => 'jump',
+    description => 'Adds a command to navigate to the previously active windows and an optional shortcut to go back when you try to switch to the current window. Think /window last²',
+    license     => 'ISC',
+   );
+
+
+# Usage
+# =====
+# The best way in my opinion is to make some key bindings for cycling
+# through your windows in recently used order:
+#
+# /bind meta-> command window nexth
+# /bind meta-< command window prevh
+#
+#
+# If you want to to go to the last window when you try to switch to
+# the current window with some Alt+# key, turn this setting on:
+#
+# /set change_window_jump ON/OFF
+#
+
+our ($i, $j, $v, $w) = (-1, -1, 'w', 'v');
+
+sub num_list {
+    join ',', map { $_->{refnum} } @_
+}
+
+sub window_last_history {
+    my ($index, $last) = @_;
+    my @windows = Irssi::windows;
+    my $current = num_list(@windows);
+    $$index = 0 unless $current eq $$last;
+    $windows[++$$index % @windows]->set_active;
+    $$last = num_list(Irssi::windows);
+}
+
+sub sig_key_change_window {
+    if (Irssi::settings_get_bool('change_window_jump')
+       && $_[0] eq Irssi::active_win->{refnum}) {
+       Irssi::signal_stop;
+       Irssi::command("window prevh");
+    }
+}
+
+sub cmd_window_nexth { window_last_history(\$j, \$v); }
+sub cmd_window_prevh { window_last_history(\$i, \$w); }
+
+Irssi::settings_add_bool('jump', 'change_window_jump', 0);
+
+Irssi::command_bind( "window nexth" => "cmd_window_nexth" );
+Irssi::command_bind( "window prevh" => "cmd_window_prevh" );
+
+Irssi::signal_register({ "key " => [qw[string ulongptr Irssi::UI::Keyinfo]] });
+Irssi::signal_add_first( "key change_window" => "sig_key_change_window" );
git clone https://git.99rst.org/PROJECT