From: Ailin Nemui Date: Wed, 7 Nov 2018 11:19:46 +0000 (+0100) Subject: [jump] new script to navigate to the previously active windows X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=f0e927345acfb430e782feadbf9d84fe0b8bb105;p=irssi-scripts.irssi.org.git [jump] new script to navigate to the previously active windows --- diff --git a/scripts/jump.pl b/scripts/jump.pl new file mode 100644 index 0000000..2926b6b --- /dev/null +++ b/scripts/jump.pl @@ -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" );