summary refs log tree commit diff
path: root/contrib/mthr
blob: 2a325393f1f14523f3030ed08f6a76c3c155a4d2 (plain) (blame)
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
39
40
41
42
43
44
45
46
#!/bin/sh
# mthr [-a|-s|-p] MSGS... - select thread/subthread/parent of messages

mode=1
case "$1" in
	-a) mode=1; shift;;
	-s) mode=2; shift;;
	-p) mode=3; shift;;
esac

mseq : | awk -v mode=$mode '
BEGIN { split("", parents) }
NR != FNR { exit }
{
	match($0, "^ *")
	ind = RLENGTH
}
mode==1 && ind==0 {
	if (sel)
		for (i in thread)
			print thread[i]
	split("", thread)
	sel = 0
}
mode==1 { thread[length(thread)+1] = $0 }
mode==2 && ind <= dep { sel = 0 }
{
	for (i in ARGV)
		if (substr($0, ind+1) == ARGV[i]) {
			sel = 1
			dep = ind
		}
}
mode==2 && sel { print }
mode==3 && sel {
	if (ind>0)
		print parents[ind-1]
	sel = 0
}
mode==3 {parents[ind] = $0 }
END {
	if (mode==1 && sel)
		for (i in thread)
			print thread[i]
}
' - $(mseq $@)