Home | History | Annotate | Line # | Download | only in util
infosrch revision 1.1.1.1
      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