From 87250c3abe7eb9ca2334941735fe1e313cdf69d4 Mon Sep 17 00:00:00 2001 From: mh Date: Thu, 21 Jan 2016 16:50:00 +0100 Subject: mh_hold_mode.pl v1.03 Emulation of ircII per-window hold_mode changes: now using 'key send_line' instead of 'gui key pressed' added /help fixed '/hold_mode toggle', it didnt do anything before code cleanup added changed field to irssi header changed url--- scripts/mh_hold_mode.pl | 166 +++++++++++++++++++++++++----------------------- 1 file changed, 87 insertions(+), 79 deletions(-) (limited to 'scripts') diff --git a/scripts/mh_hold_mode.pl b/scripts/mh_hold_mode.pl index b6d64fd..03f6719 100644 --- a/scripts/mh_hold_mode.pl +++ b/scripts/mh_hold_mode.pl @@ -1,6 +1,6 @@ ############################################################################## # -# mh_hold_mode.pl v1.02 (20151210) +# mh_hold_mode.pl v1.03 (20151226) # # Copyright (c) 2007, 2015 Michael Hansen # @@ -22,11 +22,6 @@ # # Emulation of ircII per-window hold_mode # -# known issues: -# -# in the github version of irssi this script will not accept the -# keypad enter key -# # upgrading from v0.xx to v1.xx: # # the statusbar item have changed name from mh_more to mh_sbmore, you @@ -69,8 +64,15 @@ # (i hope i didn't forget anything :-) # # history: +# v1.03 (20151226) +# now using 'key send_line' instead of 'gui key pressed' +# added /help +# fixed '/hold_mode toggle', it didnt do anything before +# code cleanup +# added changed field to irssi header +# changed url # v1.02 (20151210) -# now accepts both 10 and 13 as keycode for enter, required to work in upcomming irssi +# now accepts both 10 and 13 as keycode for enter, required to work in upcoming irssi # v1.01 (20151204) # nicer (imho) mh_sbmore # v1.00 (20151201) @@ -96,7 +98,7 @@ use strict; use Irssi 20100403; use Irssi::TextUI; -our $VERSION = '1.02'; +our $VERSION = '1.03'; our %IRSSI = ( 'name' => 'mh_hold_mode', @@ -104,7 +106,8 @@ our %IRSSI = 'license' => 'BSD', 'authors' => 'Michael Hansen', 'contact' => 'mh on IRCnet #help', - 'url' => 'https://github.com/mh-source/irssi-scripts', + 'url' => 'http://scripts.irssi.org / https://github.com/mh-source/irssi-scripts', + 'changed' => 'Sat Dec 26 11:50:57 CET 2015', ); ############################################################################## @@ -113,12 +116,9 @@ our %IRSSI = # ############################################################################## -our $KEYCODE_ENTER1 = 10; -our $KEYCODE_ENTER2 = 13; - our %config; $config{'DEFAULT'}{'hold_mode'} = 0; # default: 0 -$config{'DEFAULT'}{'scroll_always'} = 0; # default: 1 +$config{'DEFAULT'}{'scroll_always'} = 1; # default: 1 our $lastcommand = ''; our $more = 0; @@ -156,39 +156,37 @@ sub config_window_get { my ($windowrec) = @_; - if (!$windowrec) + if ($windowrec) { - return(undef); - } + my $windowid = $windowrec->{'_irssi'}; - my $windowid = $windowrec->{'_irssi'}; - - if (!exists($config{'WINDOW'}{$windowid})) - { - for my $setting (keys(%{$config{'DEFAULT'}})) + if (!exists($config{'WINDOW'}{$windowid})) { - $config{'WINDOW'}{$windowid}{$setting} = $config{'DEFAULT'}{$setting}; + for my $setting (keys(%{$config{'DEFAULT'}})) + { + $config{'WINDOW'}{$windowid}{$setting} = $config{'DEFAULT'}{$setting}; + } } + + return(\%{$config{'WINDOW'}{$windowid}}); } - return(\%{$config{'WINDOW'}{$windowid}}); + return(undef); } sub config_window_del { my ($windowrec) = @_; - if (!$windowrec) + if ($windowrec) { - return(undef); - } - - my $windowid = $windowrec->{'_irssi'}; + my $windowid = $windowrec->{'_irssi'}; - if (exists($config{'WINDOW'}{$windowid})) - { - delete($config{'WINDOW'}{$windowid}); - return(1); + if (exists($config{'WINDOW'}{$windowid})) + { + delete($config{'WINDOW'}{$windowid}); + return(1); + } } return(undef); @@ -198,14 +196,12 @@ sub window_bookmark_compare { my ($bookmark1, $bookmark2) = @_; - if (!$bookmark1 or !$bookmark2) + if ($bookmark1 and $bookmark2) { - return(0); - } - - if ($bookmark1->{'_irssi'} == $bookmark2->{'_irssi'}) - { - return(1); + if ($bookmark1->{'_irssi'} == $bookmark2->{'_irssi'}) + { + return(1); + } } return(0); @@ -215,26 +211,24 @@ sub window_refresh { my $windowrec = Irssi::active_win(); - if ($windowrec->view()->{'empty_linecount'}) + if (not $windowrec->view()->{'empty_linecount'}) { - return; - } - - my $bookmark = $windowrec->view()->get_bookmark('mh_hold_mode'); - - if (not $bookmark) - { - $windowrec->view()->set_bookmark('mh_hold_mode', $windowrec->view()->{'startline'}); - $bookmark = $windowrec->view()->get_bookmark('mh_hold_mode'); + my $bookmark = $windowrec->view()->get_bookmark('mh_hold_mode'); if (not $bookmark) { - return; + $windowrec->view()->set_bookmark('mh_hold_mode', $windowrec->view()->{'startline'}); + $bookmark = $windowrec->view()->get_bookmark('mh_hold_mode'); + + if (not $bookmark) + { + return(0); + } } - } - $windowrec->view()->scroll_line($bookmark); - statusbar_more_redraw(); + $windowrec->view()->scroll_line($bookmark); + statusbar_more_redraw(); + } } sub window_scroll @@ -273,35 +267,23 @@ sub statusbar_more_redraw # ############################################################################## -sub signal_gui_key_pressed_first +sub signal_key_send_line_first { - my ($keycode) = @_; + $lastcommand = Irssi::parse_special('$L'); + my $windowrec = Irssi::active_win(); - if (($keycode == $KEYCODE_ENTER1) or ($keycode == $KEYCODE_ENTER2)) + if (($lastcommand eq '' or config_window_get($windowrec)->{'scroll_always'}) and $more) { - $lastcommand = Irssi::parse_special('$L'); - my $windowrec = Irssi::active_win(); - - if (($lastcommand eq '' or config_window_get($windowrec)->{'scroll_always'}) and $more) - { - window_scroll(); - } + window_scroll(); } } -sub signal_gui_key_pressed_last +sub signal_key_send_line_last { - my ($keycode) = @_; + my $windowrec = Irssi::active_win(); - if (($keycode == $KEYCODE_ENTER1) or ($keycode == $KEYCODE_ENTER2)) + if (config_window_get($windowrec)->{'hold_mode'}) { - my $windowrec = Irssi::active_win(); - - if (not config_window_get($windowrec)->{'hold_mode'}) - { - return; - } - if ($windowrec->view()->{'bottom'}) { $windowrec->view()->set_bookmark_bottom('mh_hold_mode'); @@ -362,10 +344,16 @@ sub command_hold_mode if ($data ne '') { - if ($data =~ m/^toggle$/i) { - $data = (($window->{'hold_mode'}) ? 'off' : 'on' ); + if (not $window->{'hold_mode'}) + { + $window->{'hold_mode'} = 1; + + } else { + + $window->{'hold_mode'} = 0; + } } elsif ($data =~ m/^on$/i) { @@ -419,6 +407,25 @@ sub command_hold_mode } } +sub command_help +{ + my ($data, $server, $windowitem) = @_; + + $data = lc(trim_space($data)); + + if ($data =~ m/^hold_mode$/i) + { + Irssi::print('', Irssi::MSGLEVEL_CLIENTCRAP); + Irssi::print('HOLD_MODE %|[on|off|toggle|flush]', Irssi::MSGLEVEL_CLIENTCRAP); + Irssi::print('HOLD_MODE %|scroll_always [on|off|toggle]', Irssi::MSGLEVEL_CLIENTCRAP); + Irssi::print('', Irssi::MSGLEVEL_CLIENTCRAP); + Irssi::print('%|Show/enable/disable/toggle/flush status of window hold_mode or show/enable/disable/toggle the scroll_always setting.', Irssi::MSGLEVEL_CLIENTCRAP); + Irssi::print('', Irssi::MSGLEVEL_CLIENTCRAP); + + Irssi::signal_stop(); + } +} + ############################################################################## # # statusbar item handlers @@ -472,12 +479,13 @@ Irssi::timeout_add(1000, 'statusbar_more_redraw', undef); Irssi::command('^REDRAW'); -Irssi::signal_add_first('gui key pressed', 'signal_gui_key_pressed_first'); -Irssi::signal_add_last('gui key pressed', 'signal_gui_key_pressed_last'); -Irssi::signal_add_last('window changed', 'signal_window_changed_last'); -Irssi::signal_add_last('print text', 'signal_print_text_last'); +Irssi::signal_add_first('key send_line', 'signal_key_send_line_first'); +Irssi::signal_add_last('key send_line', 'signal_key_send_line_last'); +Irssi::signal_add_last('window changed', 'signal_window_changed_last'); +Irssi::signal_add_last('print text', 'signal_print_text_last'); Irssi::command_bind('hold_mode', 'command_hold_mode', 'mh_hold_mode'); +Irssi::command_bind('help', 'command_help'); 1; -- cgit v1.2.3