Skip to content
Permalink
Branch: master
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
73 lines (64 sloc) 1.95 KB
use strict;
use warnings;
use Irssi 20171006;
use Irssi::UI;
our $VERSION = '1.0'; # 7775fccf37d60a5
our %IRSSI = (
authors => 'Nei',
contact => 'Nei @ anti@conference.jabber.teamidiot.de',
url => "http://anti.teamidiot.de/",
name => 'savecmdhist',
description => 'Saves the commands you typed in the input prompt to a history file, so that they persist across /upgrade and restart.',
license => 'ISC',
);
# Usage
# =====
# Put the script in autorun if you want the history to be loaded on
# start.
my $histfile = Irssi::get_irssi_dir()."/cmdhistory";
sub loadcmdhist {
my %R = ("n" => "\n", "\\" => "\\", ";" => ";");
my $fh;
unless (open $fh, '<', $histfile) {
warn "Could not open history file ($histfile) for readin: $!\n"
if -e $histfile;
return;
}
my @hist;
while (defined(my $line = <$fh>)) {
chomp $line;
if ($line =~ /^: (\d*):(\d*):(.*?) :;(.*)$/) {
push @hist, +{
time => $1,
window => length $2 ? $2 : undef,
history => length $3 ? $3 : undef,
};
$hist[-1]{text} = $4 =~ s/\\(\\|;|n)/$R{$1}/gmsr;
}
}
my $he1 = @{[Irssi::UI::Window::get_history_entries(undef)]};
Irssi::UI::Window::load_history_entries(undef, @hist) if @hist && $he1 <= 1;
}
sub savecmdhist {
my %R = ("\n" => "\\n", "\\" => "\\\\", " :;" => " :\\;");
my $old_umask =
umask 0077;
my $fh;
unless (open $fh, '>', $histfile) {
umask $old_umask;
warn "Could not open history file ($histfile) for writing: $!\n";
return;
}
umask $old_umask;
no warnings 'uninitialized';
for my $hist (Irssi::UI::Window::get_history_entries(undef)) {
my $text = $hist->{text} =~ s/(\n|\\| :;)/$R{$1}/gmsr;
print $fh ": $hist->{time}:$hist->{window}:$hist->{history} :;$text\n";
}
close $fh;
}
Irssi::signal_add 'gui exit' => sub {
savecmdhist() if Irssi::settings_get_bool('settings_autosave');
};
Irssi::signal_add 'command save' => 'savecmdhist';
loadcmdhist();
You can’t perform that action at this time.