diff options
| author | Tom Feist <shabble@metavore.org> | 2012-02-02 12:36:44 +0000 | 
|---|---|---|
| committer | Tom Feist <shabble@metavore.org> | 2012-02-02 12:36:44 +0000 | 
| commit | 9dfb6b89bd055f2710996092983c0fcc3a80f788 (patch) | |
| tree | e40eb205e6def4f1caa8e97451ce80b50252b2ac | |
| parent | vim_mode: change vim_mode_esc_buf_timeout setting to be of type TIME. Default (diff) | |
| download | irssi-scripts-9dfb6b89bd055f2710996092983c0fcc3a80f788.tar.gz irssi-scripts-9dfb6b89bd055f2710996092983c0fcc3a80f788.zip | |
added grep.pl to fixery prior to adding some in-app help.
Diffstat (limited to '')
| -rw-r--r-- | fixery/grep.pl | 82 | 
1 files changed, 82 insertions, 0 deletions
| diff --git a/fixery/grep.pl b/fixery/grep.pl new file mode 100644 index 0000000..0215bca --- /dev/null +++ b/fixery/grep.pl @@ -0,0 +1,82 @@ +# /GREP [-i] [-w] [-v] [-F] <perl-regexp> <command to run> +# +# -i: match case insensitive +# -w: only print matches that form whole words +# -v: Invert the sense of matching, to print non-matching lines. +# -F: match as a fixed string, not a regexp +# +# if you want /FGREP, do: /alias FGREP GREP -F + +use Irssi; +use strict; +use Text::ParseWords; +use vars qw($VERSION %IRSSI); +$VERSION = "2.1"; +%IRSSI = ( +	authors	    => "Timo \'cras\' Sirainen, Wouter Coekaerts", +	contact	    => "tss\@iki.fi, wouter\@coekaerts.be", +	name        => "grep", +	description => "/GREP [-i] [-w] [-v] [-F] <perl-regexp> <command to run>", +	license     => "Public Domain", +	url         => "http://wouter.coekaerts.be/irssi/", +	changed	    => "2008-01-13" +); + +my ($match, $v); + +sub sig_text { +	my ($dest, $text, $stripped_text) = @_; +	Irssi::signal_stop() if (($stripped_text =~ /$match/) == $v); +} + +sub cmd_grep { +	my ($data,$server,$item) = @_; +	my ($option,$cmd,$i,$w,$F); +	$v = 0; +	$F = 0; + +	# split the arguments, keep quotes +	my (@args)  = "ewords(' ', 1, $data); + +	# search for options +	while ($args[0] =~ /^-/) { +		$option = shift(@args); +		if ($option eq '-i') {$i = 1;} +		elsif ($option eq '-v') {$v = 1;} +		elsif ($option eq '-w') {$w = 1;} +		elsif ($option eq '-F') {$F = 1;} +		else { +			Irssi::print("Unknown option: $option",MSGLEVEL_CLIENTERROR); +			return; +		} +	} + +	# match = first argument, but remove quotes +	($match) = "ewords(' ', 0, shift(@args)); +	# cmd = the rest (with quotes) +	$cmd = join(' ',@args); + +	# check if the regexp is valid +	eval("'' =~ /$match/"); +	if($@) { # there was an error +		chomp $@; +		Irssi::print($@,MSGLEVEL_CLIENTERROR); +		return; +	} + +	if ($F) { +		$match =~ s/(\(|\)|\[|\]|\{|\}|\\|\*|\.|\?|\|)/\\$1/g; +	} +	if ($w) { +		$match = '\b' . $match . '\b'; +	} +	if ($i) { +		$match = '(?i)' . $match; +	} + +	Irssi::signal_add_first('print text', 'sig_text'); +	Irssi::signal_emit('send command', $cmd, $server, $item); +	Irssi::signal_remove('print text', 'sig_text'); +} + +Irssi::command_bind('grep', 'cmd_grep'); | 
