summaryrefslogtreecommitdiff
path: root/rc/bin/g
blob: 3c2cb63c28423d4347c1954eefa763f0097502f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/bin/rc
rfork e
nl='
'
flags=()
recurse=()
files=()
while(! ~ $#* 1 && ~ $1 -* && ! ~ $1 --){
	if(~ $1 '-n')
		recurse=-n1
	if not
		flags=($flags $1);
	shift
}
if(~ $1 --)
	shift

suffixes='\.([bcChlmsy]|asm|awk|cc|cgi|cpp|cs|go|goc|hs|java|lua|lx|mk|ml|mli|ms|myr|pl|py|rc|sh|tex|xy)$'
fullnames='(^|/)mkfile$'
switch($#*){
case 0
	echo 'usage: g [flags] pattern [files]' >[1=2]
	exit usage
case 1
	pattern=$1
	files=`$nl{walk -f $recurse | grep -e $fullnames -e $suffixes >[2]/dev/null}
case *
	pattern=$1
	shift
	for(f in $*){
		if(test -d $f)
			files=($files `$nl{walk -f $recurse -- $* \
				| grep -e $fullnames -e $suffixes >[2]/dev/null})
		if not
			files=($files $f)
	}
}
grep -n $flags -- $pattern $files /dev/null