119304Speter=head1 NAME 219304Speter 319304SpeterVI - VI module within perl embedded nvi 419304Speter 519304Speter=head1 SYNOPSIS 619304Speter 719304Speter sub wc { 819304Speter my $words; 919304Speter $i = $VI::StartLine; 1019304Speter while ($i <= $VI::StopLine) { 1119304Speter $_ = VI::GetLine($VI::ScreenId, $i++); 1219304Speter $words+=split; 1319304Speter } 1419304Speter VI::Msg($VI::ScreenId,"$words words"); 1519304Speter } 1619304Speter 1719304Speter=head1 DESCRIPTION 1819304Speter 1919304SpeterThis pseudo module is available to perl programs run from within nvi and 2019304Speterprovides access to the files being edited and some internal data. 2119304Speter 2219304SpeterBeware that you should not use this module from within a C<perldo> or 2319304Speterfrom within an C<END> block or a C<DESTROY> method. 2419304Speter 2519304Speter=head2 Variables 2619304Speter 2719304SpeterThese are set by nvi before starting each perl command. 2819304Speter 2919304Speter=over 8 3019304Speter 3119304Speter=item * $ScreenId 3219304Speter 3319304SpeterScreen id of the current screen. 3419304Speter 3519304Speter=item * $StartLine 3619304Speter 3719304SpeterLine number of the first line of the selected range or of the file if no 3819304Speterrange was specified. 3919304Speter 4019304Speter=item * $StopLine 4119304Speter 4219304SpeterLine number of the last line of the selected range or of the file if no 4319304Speterrange was specified. 4419304Speter 4519304Speter=back 4619304Speter 4719304Speter=head2 Functions 4819304Speter 4919304Speter=over 8 5019304Speter 5119304Speter=item * AppendLine 5219304Speter 5319304Speter VI::AppendLine(screenId,lineNumber,text); 5419304Speter 5519304SpeterAppend the string text after the line in lineNumber. 5619304Speter 5719304Speter=item * DelLine 5819304Speter 5919304Speter VI::DelLine(screenId,lineNum); 6019304Speter 6119304SpeterDelete lineNum. 6219304Speter 6319304Speter=item * EndScreen 6419304Speter 6519304SpeterVI::EndScreen(screenId); 6619304Speter 6719304SpeterEnd a screen. 6819304Speter 6919304Speter=item * FindScreen 7019304Speter 7119304Speter VI::FindScreen(file); 7219304Speter 7319304SpeterReturn the screen id associated with file name. 7419304Speter 7519304Speter=item * GetCursor 7619304Speter 7719304Speter ($line, $column) = VI::GetCursor(screenId); 7819304Speter 7919304SpeterReturn the current cursor position as a list with two elements. 8019304Speter 8119304Speter=item * GetLine 8219304Speter 8319304Speter VI::GetLine(screenId,lineNumber); 8419304Speter 8519304SpeterReturn lineNumber. 8619304Speter 8719304Speter=item * GetMark 8819304Speter 8919304Speter ($line, $column) = VI::GetMark(screenId,mark); 9019304Speter 9119304SpeterReturn the mark's cursor position as a list with two elements. 9219304Speter 9319304Speter=item * GetOpt 9419304Speter 9519304Speter VI::GetOpt(screenId,option); 9619304Speter 9719304SpeterReturn the value of an option. 9819304Speter 9919304Speter=item * InsertLine 10019304Speter 10119304Speter VI::InsertLine(screenId,lineNumber,text); 10219304Speter 10319304SpeterInsert the string text before the line in lineNumber. 10419304Speter 10519304Speter=item * LastLine 10619304Speter 10719304Speter VI::LastLine(screenId); 10819304Speter 10919304SpeterReturn the last line in the screen. 11019304Speter 11119304Speter=item * MapKey 11219304Speter 11319304Speter VI::MapKey(screenId,key,perlproc); 11419304Speter 11519304SpeterAssociate a key with a perl procedure. 11619304Speter 11719304Speter=item * Msg 11819304Speter 11919304Speter VI::Msg(screenId,text); 12019304Speter 12119304SpeterSet the message line to text. 12219304Speter 12319304Speter=item * NewScreen 12419304Speter 12519304Speter VI::NewScreen(screenId); 12619304Speter VI::NewScreen(screenId,file); 12719304Speter 12819304SpeterCreate a new screen. If a filename is specified then the screen is 12919304Speteropened with that file. 13019304Speter 13119304Speter=item * Run 13219304Speter 13319304Speter VI::Run(screenId,cmd); 13419304Speter 13519304SpeterRun the ex command cmd. 13619304Speter 13719304Speter=item * SetCursor 13819304Speter 13919304Speter VI::SetCursor(screenId,line,column); 14019304Speter 14119304SpeterSet the cursor to the line and column numbers supplied. 14219304Speter 14319304Speter=item * SetLine 14419304Speter 14519304Speter VI::SetLine(screenId,lineNumber,text); 14619304Speter 14719304SpeterSet lineNumber to the text supplied. 14819304Speter 14919304Speter=item * SetMark 15019304Speter 15119304Speter VI::SetMark(screenId,mark,line,column); 15219304Speter 15319304SpeterSet the mark to the line and column numbers supplied. 15419304Speter 15519304Speter=item * SetOpt 15619304Speter 15719304Speter VI::SetOpt(screenId,command); 15819304Speter 15919304SpeterSet an option. 16019304Speter 16119304Speter=item * SwitchScreen 16219304Speter 16319304Speter VI::SwitchScreen(screenId,screenId); 16419304Speter 16519304SpeterChange the current focus to screen. 16619304Speter 16719304Speter=item * UnmapKey 16819304Speter 16919304Speter VI::UnmmapKey(screenId,key); 17019304Speter 17119304SpeterUnmap a key. 17219304Speter 17319304Speter=item * Warn 17419304Speter 17519304SpeterThis is the default warning handler. 17619304SpeterIt adds any warnings to the error string. 17719304Speter 17819304Speter=back 17919304Speter 18019304Speter=head1 EXAMPLES 18119304Speter 18219304Speter sub showmarks { 18319304Speter my ($mark, $all); 18419304Speter for $mark ('a' .. 'z') { 18519304Speter eval {VI::GetMark($VI::ScreenId, $mark)}; 18619304Speter $all .= $mark unless ($@); 18719304Speter } 18819304Speter VI::Msg($VI::ScreenId,"Set marks: $all"); 18919304Speter } 19019304Speter 19119304Speter sub forall { 19219304Speter my ($code) = shift; 19319304Speter my ($i) = $VI::StartLine-1; 19419304Speter while (++$i <= $VI::StopLine) { 19519304Speter $_ = VI::GetLine($VI::ScreenId, $i); 19619304Speter VI::SetLine($VI::ScreenId, $i, $_) if(&$code); 19719304Speter } 19819304Speter } 19919304Speter 20019304SpeterNow you can do 20119304Speter 20219304Speter :perl forall sub{s/perlre/substitution/} 20319304Speter 20419304SpeterAlthough you'll probably use 20519304Speter 20619304Speter :perldo s/perlre/substitution/ 20719304Speter 20819304Speterinstead. 20919304Speter 21019304SpeterSee L<perlre> for perl regular expressions. 21119304Speter 21219304Speter=head1 SEE ALSO 21319304Speter 21419304SpeterL<nviperl> 21519304Speter 21619304Speter=head1 AUTHOR 21719304Speter 21819304SpeterSven Verdoolaege <skimo@dns.ufsia.ac.be> 219