/usr/share/vile/perl/Help.pm is in vile-common 9.8l-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 | # Help.pm (version 0.1) - Provides Vile commands for viewing specific
# sections of the Vile help file.
#
# Copyright (C) 2001 J. Chris Coppick
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
package Help;
use strict;
=head1 NAME
Help - section-level help-commands for Vile
=head1 SYNOPSIS
:perl "use Help"
:help
:help-<section heading>
=head1 DESCRIPTION
The Help package parses the Vile help file (normally displayed
within Vile using B<:help> or similar commands) and generates
a whole cornucopia of Vile commands that jump to specific sections of the
help file. For instance, the command B<:help-color-basics> opens
the Vile help buffer and jumps to the "Color basics" section.
=head1 INSTALLATION
[Note: Help.pm may already be installed for you as part of your
Vile installation.]
Install Help.pm somewhere in perl's @INC path. Depending on your
Vile installation, I</usr/local/share/vile/perl> might be a good place.
Add B<perl "use Help"> to your I<.vilerc> file.
As a bonus, if you do not like Vile's default behavior of splitting
the current window when displaying the help file, you can set
the variable B<%help-fullscreen> before you load the Help package.
For example:
setv %help-fullscreen true
perl "use Help"
If B<%help-fullscreen> is set, then all the new section-related help
commands, and the original B<:h> and B<:help> commands, display help
text in a full-sized window. The default B<:list-help>, B<:show-help>, and
help-related key bindings retain their original behavior.
=head1 USAGE
=over 4
=item help
=item h
=item list-help
=item show-help
Display the Vile help buffer, at either the beginning
or the last-view point in the help text. This is the default
behavior for these commands. The B<h> and B<help> commands
are affected by the B<%help-fullscreen> variable. The B<list-help>
and B<show-help> commands are not affected in any way by the
Help package.
=item help-<section heading>
Display the Vile help buffer, with the specific section heading positioned
at the top of the window. [Note: This does not provide a new help
buffer, but rather a view into the default help buffer. I.e. you can
still scroll to view other help sections.]
Section headings are determined dynamically when the Help package is
loaded, using arbitrary criteria defined by the author based on a
common-sense appraisal of the current formatting convention used
in the Vile help text. Due to technical considerations, section-heading
text may be modified somewhat to allow for its use as a Vile command
name. For example, the help section "Sample .vilerc" translates into
the Vile command B<help-sample-vilerc>. (Note the use of lower-case
letters only and the removal of the '.'.)
Naturally, remembering every possible section heading would be a sad
waste of neuron-firing patterns, but you get to use auto-completion on
the B<help-...> commands, which is really the whole point. For example:
:help-<TAB><TAB>
effectively displays a complete "table of contents" for the Vile help text
(notwithstanding the state of the I<popup-choices> mode, of course).
=back
=head1 BUGS
I grow carnivorous plants. Bugs are not really an issue for me...
=head1 SEE ALSO
vile(1)
=head1 CREDITS
All the Vile documentation contributors...
=head1 AUTHOR
S<J. Chris Coppick, 2001 (last updated: Oct. 10, 2001)>
=cut
use Vile;
use Vile::Manual;
require Vile::Exporter;
use IO::File;
# use warnings;
sub import {
Vile::Exporter::import(@_);
_setup();
}
sub _setup {
my $fullscreen = Vile::get('%help-fullscreen');
_addHelpCommands();
if ( $fullscreen ne 'ERROR' ) {
eval <<EOD;
Vile::register \"h\",
sub {
Vile::command \"list-help\";
Vile::command \"delete-other-windows\";
Vile::update;
}
EOD
eval <<EOD;
Vile::register \"help\",
sub {
Vile::command \"list-help\";
Vile::command \"delete-other-windows\";
Vile::update;
}
EOD
}
return 0;
}
sub _addHelpCommands {
my ( $startdir, $helpfile, $cmd, $section, $fh, $lastpos );
$startdir = Vile::get('$startup-path');
$helpfile = Vile::get('$helpfile');
$fh = new IO::File "$startdir/$helpfile", "r";
if ( !defined($fh) ) {
print "Help: couldn't open $startdir/$helpfile";
return 0;
}
while ( defined( $_ = <$fh> ) ) {
if (/^([[:upper:][:digit:]].*$)/) {
$section = $1;
next if (/^Copyright/);
next if (/^Credits/);
$lastpos = $fh->getpos;
last if ( !defined( $_ = <$fh> ) );
if (/^-+[-\s]*$/) {
$section =~ s/\s*\(.*\)$//;
$cmd = "help-" . $section;
$section = quotemeta($section);
$cmd =~ tr/ [A-Z]/-[a-z]/;
$cmd =~ s/\"//g;
$cmd =~ s/\:$//;
$cmd =~ s/\.//g;
eval <<EOD;
Vile::register \"$cmd\",
sub {
Vile::command \"help\";
Vile::command \"search-forward \'^$section\'\";
Vile::command \"position-window t\";
Vile::update;
}
EOD
}
else {
$fh->setpos($lastpos);
}
}
}
undef $fh;
return 0;
}
1;
|