📄 keymap.cgi
字号:
#!/usr/local/bin/perl$QUERY = $ENV{'QUERY_STRING'};$KEYMAP = "$ENV{'HOME'}/.w3m/keymap";if ($QUERY) { # &write_keymap($QUERY); print <<EOF;Content-Type: text/htmlw3m-control: DELETE_PREVBUFw3m-control: BACKEOF exit;}&init_func();@key = ();@func = ();@data = ();open(KEYMAP, $KEYMAP);while (<KEYMAP>) { s/^keymap\s+// || next; (($k, $_) = &getQWord($_)) || next; (($f, $_) = &getWord($_)) || next; $FUNC_EXIST{$f} || next; ($d, $_) = &getQWord($_); push(@key, $k); push(@func, $f); push(@data, $d);}close(KEYMAP);$N = @key;print <<EOF;Content-Type: text/html<head><title>Keymap Setting</title></head><h1>Keymap Setting</h1><form action="file:///\$LIB/keymap.cgi"><table><tr><td> Key<td> Command<td> Argument<tr><td><input name=k_$N size=6><td><select name=f_$N>EOF&print_func();print <<EOF;</select><td><input name=d_$N><td><input type=submit name=ok value=Ok><tr><td colspan=4><hr>EOF$i = 0;while(@key) { $k = &Q(shift @key); $f = shift @func; $d = &Q(shift @data); print <<EOF;<tr><td><input type=hidden name=k_$i value=\"$k\"> $k<td><select name=f_$i>EOF &print_func($f); print <<EOF;</select><td><input name=d_$i value=\"$d\"><td><input type=checkbox name=del_$i>DeleteEOF $i++;}print <<EOF;</table></form>EOFsub write_keymap { local($query) = @_; @key = (); @func = (); @data = (); for $q (split('&', $query)) { ($_, $d) = split('=', $q); if (s/^k_//) { $key[$_] = $d; } elsif (s/^f_//) { $func[$_] = $d; } elsif (s/^d_//) { $data[$_] = $d; } elsif (s/^del_//) { $del[$_] = 1; } } open(KEYMAP, "> ${KEYMAP}") || next; while(@key) { $k = &UQ(shift @key); $f = shift @func; $d = &UQ(shift @data); ($f =~ /^\w/) || next; (shift @del) && next; print KEYMAP "keymap\t$k\t$f"; if ($d ne '') { if ($d =~ /[\"\'\\\s]/) { $d =~ s/([\"\\])/\\$1/g; print KEYMAP "\t\t\"$d\""; } else { $d =~ s/([\"\\])/\\$1/g; print KEYMAP "\t\t$d"; } } print KEYMAP "\n"; } close(KEYMAP);}sub UQ { local($_) = @_; s/\+/ /g; s/%([\da-f][\da-f])/pack('c', hex($1))/egi; return $_;}sub Q { local($_) = @_; s/\&/\&/g; s/\</\</g; s/\>/\>/g; s/\"/\"/g; return $_;}sub getQWord { local($_) = @_; local($x) = ''; s/^\s+//; while($_ ne '') { if (s/^\'(([^\'\\]|\\.)*)\'// || s/^\"(([^\"\\]|\\.)*)\"// || s/^([^\'\"\\\s]+)// || s/^\\(.)//) { $x .= $1; } else { last; } } return ($x, $_);}sub getWord { local($_) = @_; s/^\s+//; s/^(\S+)// || return (); return ($1, $_);}sub print_func { local($f) = @_; for(@FUNC_LIST) { if ($f eq $_) { print "<option selected>$_\n"; } else { print "<option>$_\n"; } }}sub init_func { @FUNC_LIST = (); %FUNC_EXIST = (); while(<DATA>) { chop; push(@FUNC_LIST, $_); $FUNC_EXIST{$_} = 1; }}__END__- - - - - - - ABORTADD_BOOKMARKBACKBEGINBOOKMARKCENTER_HCENTER_VCOOKIEDELETE_PREVBUFDICT_WORDDICT_WORD_ATDOWNDOWNLOADEDITEDIT_SCREENENDESCBMAPESCMAPEXEC_SHELLEXITEXTERNEXTERN_LINKFRAMEGOTOGOTO_LINEGOTO_LINKHELPHISTORYINFOINIT_MAILCAPINTERRUPTLEFTLINE_BEGINLINE_ENDLINE_INFOLINK_BEGINLINK_ENDLOADMAIN_MENUMARKMARK_MIDMARK_URLMENUMOUSEMOUSE_TOGGLEMOVE_DOWNMOVE_LEFTMOVE_RIGHTMOVE_UP NEXT_LINKNEXT_MARKNEXT_PAGENEXT_WORDNOTHINGNULLOPTIONSPCMAPPEEKPEEK_LINKPIPE_SHELLPREV_LINKPREV_MARKPREV_PAGEPREV_WORDPRINTQUITREAD_SHELLREDRAWREG_MARKRELOADRIGHTSAVESAVE_IMAGESAVE_LINKSAVE_SCREENSEARCHSEARCH_BACKSEARCH_FORESEARCH_NEXTSEARCH_PREVSELECTSHELLSHIFT_LEFTSHIFT_RIGHTSOURCESUSPENDUPVIEWVIEW_BOOKMARKVIEW_IMAGEWHEREIS WRAP_TOGGLE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -