home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / vile-src.zip / vile-8.1 / perl / tailf.pl < prev    next >
Text File  |  1998-04-20  |  808b  |  43 lines

  1. use FileHandle;
  2.  
  3. sub tailf {
  4.     my ($fname) = @_;
  5.     my $vbuf;
  6.     my $fh = new FileHandle;
  7.  
  8.     open $fh, "tail -f $fname |"    or die "Can't open $fname";
  9.  
  10.     $vbuf = Vile::Buffer->new();
  11.     Vile->current_buffer($vbuf);
  12.     $vbuf->buffername($fname);
  13.  
  14.     Vile::watchfd(
  15.     fileno($fh),
  16.     'read',
  17.     sub { 
  18.         my $buf = ' ' x 4096;
  19.         my @olddot = $vbuf->dot;
  20.         my $lastlnum;
  21.  
  22.         # Fetch data from input stream
  23.         sysread $fh, $buf, 4096;
  24.  
  25.         # Set Position to end of buffer and retrieve this line number
  26.         $lastlnum = $vbuf->dot('$$');
  27.  
  28.         # Write data to the editor's buffer
  29.         print $vbuf $buf;
  30.  
  31.         # Reset old position of dot if not near end of buffer
  32.         if ($olddot[0] < $lastlnum - 1) {
  33.         $vbuf->dot(@olddot);
  34.         }
  35.  
  36.         # Update the screen
  37.         Vile::update();
  38.     }
  39.     );
  40. }
  41.  
  42. 1;
  43.