diff options
| -rw-r--r-- | scripts/nm.pl | 35 | 
1 files changed, 33 insertions, 2 deletions
| diff --git a/scripts/nm.pl b/scripts/nm.pl index b9b2955..b26ab74 100644 --- a/scripts/nm.pl +++ b/scripts/nm.pl @@ -27,6 +27,7 @@ $VERSION="0.3.10";  # thanks to And1 <and1@meinungsverstaerker.de> for a small patch  # thanks to berber@tzi.de for the save/load patch  # thanks to Dennis Heimbert <dennis.heimbert@gmail.com> for a bug report/patch +# thanks to Roy Sigurd Karlsbakk <roy@karlsbakk.net> for an autosave patch  #  #########  # USAGE @@ -84,7 +85,10 @@ my $help = "  /set neat_allow_shrinking <ON|OFF>      * ON  : shrink padding when longest nick disappears      * OFF : do not shrink, only allow growing -  + +/set neat_autosave <number> +    * number : autosave after <number> seconds, defaults to 60. Set to 0 to +               disable.  ";  # @@ -94,6 +98,9 @@ my $help = "  #  # Changelog  # +# Version 0.3.11 +#  - added autosave, idea from Roy Sigurd Karlsbakk +#  # Version 0.3.10  #  - fix losing of saved color when changing nick shares more than one channel  #    with you @@ -179,7 +186,8 @@ my $help = "  ###  ################ -my ($longestNick, %saved_colors, @colors, $alignment, $sign, %commands); +my ($longestNick, %saved_colors, @colors, $alignment, $sign, %commands,); +my ($pending_save);  my $colorize = -1; @@ -248,6 +256,19 @@ sub findLongestNick {  	reformat();  } +sub delayed_save +{ +	# skip if we have already a save pending. we don't reset the timeout +	# here, else you could end up with changes never being automatically +	# saved if they happen more often than <neat_autosave> seconds +	return if $pending_save; + +	return unless Irssi::settings_get_int('neat_autosave'); + +	Irssi::timeout_add_once(Irssi::settings_get_int('neat_autosave') * 1000, +		\&save_colors, undef); +} +  # a new nick was created  sub sig_newNick  { @@ -263,6 +284,7 @@ sub sig_newNick  	return if (exists($saved_colors{$nick->{nick}}));  	$saved_colors{$nick->{nick}} = "%".nick_to_color($nick->{nick}); +	delayed_save();  }  # something changed @@ -278,6 +300,7 @@ sub sig_changeNick  	# we need to update the saved colorors hash independent of nick lenght  	$saved_colors{$nick->{nick}} = $saved_colors{$old_nick};  	delete $saved_colors{$old_nick}; +	delayed_save();  	my $new = length($nick->{nick}); @@ -383,6 +406,7 @@ sub assert_colors() {  			next if (exists($saved_colors{$_->{nick}}));  			$saved_colors{$_->{nick}} = "%".nick_to_color($_->{nick}); +			delayed_save();  		}  	}  } @@ -415,6 +439,10 @@ sub save_colors() {  	print FID $_.":".$saved_colors{$_}."\n" foreach (keys(%saved_colors));  	close(FID); + +	# clear possible pending save. +	Irssi::timeout_remove($pending_save) if $pending_save; +	$pending_save = undef;  }  # log a line to a window item @@ -499,6 +527,7 @@ sub cmd_neatcolor_reset() {  	}  	$saved_colors{$nick} = "%".nick_to_color($nick); +	delayed_save();  	neat_log($witem, "Reset color for ".$saved_colors{$nick}.$nick);  } @@ -539,6 +568,7 @@ sub cmd_neatcolor_set() {  	}  	$saved_colors{$nick} = "%".$color; +	delayed_save();  	neat_log($witem, "Set color for $saved_colors{$nick}$nick");  } @@ -641,6 +671,7 @@ Irssi::settings_add_bool('misc', 'neat_colorize', 1);  Irssi::settings_add_str('misc', 'neat_colors', 'rRgGyYbBmMcC');  Irssi::settings_add_str('misc', 'neat_ignorechars', '');  Irssi::settings_add_bool('misc', 'neat_allow_shrinking', 1); +Irssi::settings_add_int('misc', 'neat_autosave', 60);  Irssi::command_bind('neatcolor', 'cmd_neatcolor'); | 
