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