1 1.1 christos #!/usr/local/bin/perl -w 2 1.1 christos # Id: infosrch,v 1.2 2004/04/11 17:56:47 karl Exp 3 1.1 christos # infosrch does a regex search on an info manual. 4 1.1 christos # By Harry Putnam <reader (at] newsguy.com>. 5 1.1 christos 6 1.1 christos ($myscript = $0) =~ s:^.*/::; 7 1.1 christos $six = ''; 8 1.1 christos 9 1.1 christos if($ARGV[0] eq "help"){ 10 1.1 christos &usage; 11 1.1 christos exit; 12 1.1 christos } 13 1.1 christos if($ARGV[0] eq "-e"){ 14 1.1 christos shift; 15 1.1 christos $six = "true"; 16 1.1 christos } 17 1.1 christos if(!$ARGV[1]){ 18 1.1 christos &usage; 19 1.1 christos exit; 20 1.1 christos } 21 1.1 christos 22 1.1 christos $target = shift; 23 1.1 christos $regex = shift; 24 1.1 christos 25 1.1 christos $shell_proc = "info --output - --subnodes 2>/dev/null $target"; 26 1.1 christos 27 1.1 christos open(SHELL_PROC," $shell_proc|"); 28 1.1 christos while(<SHELL_PROC>){ 29 1.1 christos chomp; 30 1.1 christos push @lines,$_; 31 1.1 christos } 32 1.1 christos close(SHELL_PROC); 33 1.1 christos $cnt = 0; 34 1.1 christos for(@lines){ 35 1.1 christos if(/$regex/ && !$six){ 36 1.1 christos print "$target\n $lines[($cnt-1)]\n<$cnt> $lines[$cnt]\n $lines[($cnt+1)]\n"; 37 1.1 christos print "-- \n"; 38 1.1 christos }elsif(/$regex/ && $six){ 39 1.1 christos print "$target\n"; 40 1.1 christos if($lines[($cnt-6)]){ 41 1.1 christos print " $lines[($cnt-6)]\n"; 42 1.1 christos } 43 1.1 christos if($lines[($cnt-5)]){ 44 1.1 christos print " $lines[($cnt-5)]\n"; 45 1.1 christos } 46 1.1 christos if($lines[($cnt-4)]){ 47 1.1 christos print " $lines[($cnt-4)]\n"; 48 1.1 christos } 49 1.1 christos if($lines[($cnt-3)]){ 50 1.1 christos print " $lines[($cnt-3)]\n"; 51 1.1 christos } 52 1.1 christos if($lines[($cnt-2)]){ 53 1.1 christos print " $lines[($cnt-2)]\n"; 54 1.1 christos } 55 1.1 christos if($lines[($cnt-1)]){ 56 1.1 christos print " $lines[($cnt-1)]\n"; 57 1.1 christos } 58 1.1 christos if($lines[$cnt]){ 59 1.1 christos print "$cnt $lines[$cnt]\n"; 60 1.1 christos } 61 1.1 christos if($lines[($cnt+1)]){ 62 1.1 christos print " $lines[($cnt+1)]\n"; 63 1.1 christos } 64 1.1 christos if($lines[($cnt+2)]){ 65 1.1 christos print " $lines[($cnt+2)]\n"; 66 1.1 christos } 67 1.1 christos if($lines[($cnt+3)]){ 68 1.1 christos print " $lines[($cnt+3)]\n"; 69 1.1 christos } 70 1.1 christos if($lines[($cnt+4)]){ 71 1.1 christos print " $lines[($cnt+4)]\n"; 72 1.1 christos } 73 1.1 christos if($lines[($cnt+5)]){ 74 1.1 christos print " $lines[($cnt+5)]\n"; 75 1.1 christos } 76 1.1 christos if($lines[($cnt+6)]){ 77 1.1 christos print " $lines[($cnt+6)]\n"; 78 1.1 christos } 79 1.1 christos print "-- \n"; 80 1.1 christos } 81 1.1 christos $cnt++; 82 1.1 christos } 83 1.1 christos 84 1.1 christos sub usage { 85 1.1 christos print <<EOM; 86 1.1 christos 87 1.1 christos Purpose: Extract full text from info node and search it by regex 88 1.1 christos Usage: $myscript [-e] TARGET REGEX 89 1.1 christos 90 1.1 christos Where TARGET is an info node such as `emacs', `bash' etc, and 91 1.1 christos REGEX is what you want to find in it. 92 1.1 christos 93 1.1 christos The -e flag is not required but if used then 6 lines preceding and six 94 1.1 christos lines following any hits will be printed. The default (with no -e flag) 95 1.1 christos is to print one line before and after. 96 1.1 christos 97 1.1 christos The output has the line number prepended to the line containing the 98 1.1 christos actual regex. 99 1.1 christos 100 1.1 christos Info command used: 101 1.1 christos info --output - --subnodes 2>/dev/null TARGET 102 1.1 christos 103 1.1 christos EOM 104 1.1 christos } 105