aboutsummaryrefslogblamecommitdiffstats
path: root/feature-tests/bindings.pl
blob: 006eaf115e7eae8cff7f781c4684590cd28eec04 (plain) (tree)












































































                                                                                               
use strict;
use warnings;


use Irssi;
use Irssi::Irc;
use Irssi::TextUI;

use Data::Dumper;


our $VERSION = '0.1';
our %IRSSI = (
              authors     => 'shabble',
              contact     => 'shabble+irssi@metavore.org',
              name        => '',
              description => '',
              licence     => q(GNU GPLv2 or later),

             );

# code taken from adv_windowlist

my $keymap;

init();

sub init {
    update_keymap();
    Irssi::command_bind('showbinds', 'cmd_showbinds');
}

sub cmd_showbinds {
    my ($args, @rest) = @_;

    my $win = Irssi::active_win();
    $win->print("Change window bindings:", Irssi::MSGLEVEL_CLIENTCRAP);
    for my $w (sort keys %$keymap) {
        my $x = $keymap->{$w};
        $win->print("$w ==> $x", Irssi::MSGLEVEL_CLIENTCRAP);
    }
    $win->print("Done showing window bindings:", Irssi::MSGLEVEL_CLIENTCRAP);

}
sub get_keymap {
	my ($text_dest, $str, $str_stripped) = @_;

	if ($text_dest->{level} == Irssi::MSGLEVEL_CLIENTCRAP and $text_dest->{target} eq '') {
        if (not defined($text_dest->{'server'})) {
            if ($str_stripped =~ m/((?:meta-)+)(.)\s+change_window (\d+)/) {
                my ($level, $key, $window) = ($1, $2, $3);
                #my $numlevel = ($level =~ y/-//) - 1;
                my $kk = $level . $key;
                $keymap->{$kk} = $window;
            }
            Irssi::signal_stop();
        }
    }
}

sub update_keymap {
	$keymap = {};
	Irssi::signal_remove('command bind' => 'watch_keymap');
	Irssi::signal_add_first('print text' => 'get_keymap');
	Irssi::command('bind'); # stolen from grep
	Irssi::signal_remove('print text' => 'get_keymap');
	Irssi::signal_add('command bind' => 'watch_keymap');
	#Irssi::timeout_add_once(100, 'eventChanged', undef);
}

# watch keymap changes
sub watch_keymap {
	Irssi::timeout_add_once(1000, 'update_keymap', undef);
}