2 # $Id: w3mhelp.cgi.in,v 1.29 2007/05/29 11:50:24 inu Exp $
4 if ( $^O =~ /^(ms)?(dos|win(32|nt)?)/i ) {
9 $datarootdir = "@datarootdir@";
10 $helpdir = "@HELP_DIR@";
12 $helpdir = &cygwin_pathconv($helpdir);
14 unshift(@INC, $helpdir);
15 @docdirs = split(" ", "@DOCDIRS@");
17 require "w3mhelp-funcname.pl";
18 require "w3mhelp-funcdesc.en.pl";
20 $charset = 'US-ASCII';
29 $RC_DIR =~ s/^~/$ENV{'HOME'}/;
31 $RC_DIR = &cygwin_pathconv("$RC_DIR");
33 $keymap = "$RC_DIR/keymap";
34 $version = '*unknown*';
35 if (defined($ENV{'QUERY_STRING'})) {
36 print "QUERY_STRING=$ENV{'QUERY_STRING'}\n";
37 if ($ENV{'QUERY_STRING'} =~ /(^|&)version=([^&]*)/) {
39 $version =~ s/\+|%([0-9A-Fa-f][0-9A-Fa-f])/$& eq '+' ? ' ' : pack('C', hex($1))/ge;
40 $version =~ s/w3m\///;
42 if ($ENV{'QUERY_STRING'} =~ /(^|&)lang=([^&]*)/) {
44 $tlang =~ s/\+|%([0-9A-Fa-f][0-9A-Fa-f])/$& eq '+' ? ' ' : pack('C', hex($1))/ge;
45 $tlang =~ tr/A-Z/a-z/;
46 if ($tlang !~ /^[a-z][a-z]$/) {
49 # print "tlang=$tlang\n";
50 eval {require "w3mhelp-funcdesc.$tlang.pl";};
51 if (defined(%funcdesc)) {
59 while (($key, $fname) = each %f) {
60 $key = &norm_key($key);
61 $keyfunc{$key} = $fname;
65 open(KEYMAP, "< $keymap") || die "cannot open keymap: $keymap, $!";
66 &load_keymap(*KEYMAP, $func);
70 local (%funckeydesc, $key, $fname, $desc);
72 %funcname = (%funcname, %buf_funcname, %lineedit_funcname, %menu_funcname);
74 %funcdesc = (%funcdesc, %buf_funcdesc, %lineedit_funcdesc, %menu_funcdesc);
75 while (($fname, $desc) = each %funcdesc) {
76 $funckeydesc{$funcname{$fname}} = "$fname\n$desc\n";
79 while (($key, $fname) = each %keyfunc) {
80 $keydata{$key} && next;
81 $funckeydesc{$funcname{$fname}} .= "$key,";
83 while (($key, $fname) = each %buf_keyfunc) {
84 $funckeydesc{$funcname{$fname}} .= "$key,";
86 while (($key, $fname) = each %lineedit_keyfunc) {
87 $funckeydesc{$funcname{$fname}} .= "$key,";
89 while (($key, $fname) = each %menu_keyfunc) {
90 $funckeydesc{$funcname{$fname}} .= "$key,";
94 Content-Type: text/html; charset=$charset
98 <TITLE>w3m help page</TITLE>
103 <A HREF="http://w3m.sourceforge.net/">w3m</A>
104 (WWW-wo-Miru) Version $version by
105 <A HREF="mailto:aito\@fw.ipsj.or.jp">A.ITO</A> ********<BR>
106 ***** Key assign table *****
111 $q_version = $version;
112 $q_version =~ s/[^A-Za-z0-9_\$\.\-]/sprintf('%%%02X', ord($&))/ge;
113 $script = "<A HREF=\"$ENV{'SCRIPT_NAME'}?version=$q_version&lang=";
115 # doc:en_English doc-jp:ja_Japanese
116 for $otherlang (@docdirs) {
117 local(@d) = split(/[:_]/, $otherlang);
119 if ($d[1] ne $lang) {
120 $d[1] =~ s/[^A-Za-z0-9_\$\.\-]/sprintf('%%%02X', ord($&))/ge;
121 print $script, $d[1], "\">$d[2] version</A>\n";
125 $keymap =~ s/[<>&]/$htmlesc{$&}/ge;
126 $head = "Show keymap file";
127 if (defined($title{$head})) {
128 $head = $title{$head};
129 $head =~ s/[<>&]/$htmlesc{$&}/ge;
131 print "<P><A HREF=\"$keymap\">$head</A>\n";
133 &show_keymap("Page/Cursor motion",
134 split(" ", "pgFore pgBack movR movL movD movU
135 movR1 movL1 movD1 movU1 ldown1 lup1
136 shiftl shiftr col1L col1R linbeg linend ctrCsrH ctrCsrV
137 goLine goLineF goLineL movRW movLW
138 topA lastA nextA prevA movlistMn
139 nextR nextL nextD nextU nextRD nextLU
142 &show_keymap("Hyperlink operation",
143 split(" ", "followA tabA svA followI svI submitForm
144 curURL peekURL peekIMG pginfo curlno chkURL chkWORD chkNMID
145 rFrame extbrz linkbrz linkLst listMn linkMn accessKey"));
147 &show_keymap("File/Stream operation",
148 split(" ", "goURL gorURL tabURL tabrURL ldfile readsh pipesh
151 &show_keymap("Buffer operation",
152 split(" ", "backBf nextBf prevBf selMn selBuf vwSrc svSrc svBuf
153 editBf editScr reload reshape rdrwSc dispI stopI"));
155 &show_keymap("Tab operation",
156 split(" ", "newT closeT nextT prevT tabMn tabR tabL"));
158 &show_keymap("Bookmark operation",
159 split(" ", "ldBmark adBmark"));
161 &show_keymap("Search",
162 split(" ", "srchfor srchbak srchnxt srchprv isrchfor isrchbak"));
164 &show_keymap("Dictionary look-up",
165 split(" ", "dictword dictwordat"));
167 &show_keymap("Mark operation",
168 split(" ", "_mark nextMk prevMk reMark"));
170 &show_keymap("Miscellany",
171 split(" ", "mainMn ldhelp ldOpt dispVer cooLst ldHist ldDL
173 msgs msToggle wrapToggle execCmd setAlarm setOpt setEnv defKey
174 reinit execsh susp qquitfm quitfm"));
176 &show_keymap_data("User defined keymaps");
178 print "<BR>\n<HR WIDTH=80%>\n";
180 &show_keymap("Buffer selection mode",
181 split(" ", "buffer_next buffer_prev buffer_delete buffer_go"));
183 print "<BR>\n<HR WIDTH=80%>\n";
185 &show_keymap("Line-edit mode",
186 split(" ", "lineedit_forward lineedit_back lineedit_backspace
187 lineedit_delete lineedit_kill_after lineedit_kill_before
188 lineedit_top lineedit_bottom lineedit_prev lineedit_next
189 lineedit_editor lineedit_complete lineedit_accept"));
191 print "<BR>\n<HR WIDTH=80%>\n";
193 &show_keymap("Popup menu",
194 split(" ", "menu_select menu_close menu_cancel menu_down menu_up
195 menu_line_up menu_line_down menu_top menu_last menu_next
196 menu_prev menu_search_fore menu_search_back menu_search_next
197 menu_search_prev menu_suspend"));
213 s/^\s*keymap\s+// || next;
214 s/^(\"(\\\"|[^\"])+\"|\'(\\\'|[^\'])+\'|\S+)\s+(\S+)\s*// || next;
215 ($key, $fname) = ($1, $4);
217 $fname =~ tr/a-z/A-Z/;
218 defined($funcdesc{$fname}) || next;
219 $key =~ s/^["'](.*)["']$/$1/;
220 $key = &norm_key($key);
221 $keyfunc{$key} = $fname;
223 $keydata{$key} = $data;
225 delete $keydata{$key};
233 s/(ESC|SPC|TAB|DEL|UP|DOWN|RIGHT|LEFT)/\U$1/i;
235 s/(^|\s+|-)\^(.)/${1}C-$2/g;
236 s/(^|\s+|-)(C-\[|M-)/${1}ESC-/g;
238 /^ESC-\[A$/ && return "UP";
239 /^ESC-\[B$/ && return "DOWN";
240 /^ESC-\[C$/ && return "RIGHT";
241 /^ESC-\[D$/ && return "LEFT";
243 s/(^|\s+|-)ESC-\[/$1\^\[\[/g;
244 s/(^|\s+|-)ESC-\^(.)/${1}ESC-C-$2/g;
245 s/(^|\s+|-)(ESC-)?C-[iI]/$1${2}TAB/g;
246 s/(^|\s+|-)(ESC-)?C-\?/$1${2}DEL/g;
251 local($head, @list) = @_;
253 local($attr) = " WIDTH=140";
255 if (defined($title{$head})) {
256 $head = $title{$head};
257 $head =~ s/[<>&]/$htmlesc{$&}/ge;
262 <table cellpadding=0>
264 foreach $fid (@list) {
265 local ($name, $desc, $keys) = split("\n", $funckeydesc{$fid}, 3);
267 $keys = '<NOT ASSIGNED>' if ($keys eq '');
268 $keys =~ s/[<>&]/$htmlesc{$&}/ge;
272 $name =~ s/[<>&]/$htmlesc{$&}/ge;
273 $name = " (<b>$name</b>)";
275 $desc =~ s/[<>&]/$htmlesc{$&}/ge;
277 <TR><TD$attr>$keys<TD><NOBR>$desc$name</NOBR>
284 sub show_keymap_data {
285 local($head, @list) = @_;
287 local($attr) = " WIDTH=140";
289 if (defined($title{$head})) {
290 $head = $title{$head};
291 $head =~ s/[<>&]/$htmlesc{$&}/ge;
296 <table cellpadding=0>
298 foreach $keys (sort keys %keydata) {
299 $keys =~ s/[<>&]/$htmlesc{$&}/ge;
300 $name = $keyfunc{$keys};
301 $data = $keydata{$keys};
302 $name =~ s/[<>&]/$htmlesc{$&}/ge;
303 $data =~ s/[<>&]/$htmlesc{$&}/ge;
305 <TR><TD$attr>$keys<TD>$name<TD><NOBR>$data</NOBR>
313 sub cygwin_pathconv {
317 open(CYGPATH, '-|') || exec('cygpath', '-w', $_);