host vim sheet page primarily at sheet.shiar.net/vim
authorMischa POSLAWSKY <perl@shiar.org>
Mon, 5 Jan 2009 19:13:46 +0000 (19:13 +0000)
committerMischa POSLAWSKY <perl@shiar.org>
Tue, 6 Jan 2009 22:39:02 +0000 (22:39 +0000)
With the increasing number of other pages, sheet.shiar.nl makes more
sense than the previous vi(m).shiar.net.  The root still redirects to
the vim page for now (until there's enough to offer to support a proper
index).

digraphs.plp
digraphs.vim.plp
index.plp
unicode.plp
vim.plp [new file with mode: 0644]

index cec6406..be33d63 100644 (file)
@@ -118,7 +118,7 @@ print "</table>\n";
 </div>
 
 <p id="footer">
-       <a href="http://vi.shiar.net/digraphs">vi.<strong>shiar.net</strong>/digraphs</a>
+       <a href="http://sheet.shiar.nl/digraphs">sheet.shiar.nl<strong>/digraphs</strong></a>
        <a href="git://dev.shiar.net/vi-cheat"><:= "v$VERSION" :></a>
        created by Shiar •
        <a title="Licensed under the GNU Affero General Public License, version 3"
index d21a5f6..6123fea 100644 (file)
@@ -6,7 +6,7 @@ use open IO => ':utf8';
 our $VERSION = '1.0';
 
 $header{content_type} = 'text/plain; charset=us-ascii';
-print '" vim digraph proposals <http://vi.shiar.net/digraphs>', "\n";
+print '" vim digraph proposals <http://sheet.shiar.nl/digraphs>', "\n";
 PLP_END { print "\n" };
 
 open my $include, '<', 'shiar.inc.txt' or do {
index 4cffec6..789607b 100644 (file)
--- a/index.plp
+++ b/index.plp
@@ -1,266 +1,8 @@
 <:
-use utf8;
-use strict;
-use warnings;
-no  warnings 'qw';  # you know what you doing
-no  warnings 'uninitialized';  # save some useless checks for more legible code
-
-our $VERSION = '1.1';
-
-our $ascii = 0;
-if (exists $get{ascii}) {
-       $ascii = $get{ascii} ne '0';  # manual override
-} elsif (defined $ENV{HTTP_ACCEPT_CHARSET}) {
-       $ascii = 1;
-       for (split q{,}, $ENV{HTTP_ACCEPT_CHARSET}) {
-               $ascii = 0, last if $_ eq '*' or m{utf-?8}i;
-       }
-}
-
-my $charset = $ascii ? 'us-ascii' : 'utf-8';
-my $ctype = "text/html; charset=$charset";
-$header{content_type} = $ctype;
-
-:><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-
-<head>
-<title>vi cheat sheet</title>
-<meta http-equiv="content-type" content="<:= $ctype :>">
-<link rel="stylesheet" type="text/css" media="all" href="base.css">
-<!--[if lte IE 6]><style> .help dl.legend dt {margin:0 0 1px} </style><![endif]-->
-<!--[if lte IE 7]><style> .help dl.legend dd {float:none} </style><![endif]--><:
-       my %styles = map {$_ => $_} qw(dark circus mono terse);
-       our $style = exists $get{style} && $styles{$get{style}} || 'light';
-       printf(qq{\n<link rel="%s" type="text/css" media="all" href="%s" title="%s">},
-               $_ eq $style ? 'stylesheet' : 'alternate stylesheet', "$_.css", $_
-       ) for keys %styles;
-
-       our $showkeys = exists $get{keys} && $get{keys} ne '0';
-       print "\n<style> .no {visibility:hidden} </style>" unless $showkeys;
-       print "\n<style> .no, .alias {opacity:.5} </style>"
-               if $showkeys and $get{keys} eq 'ghost';
-:>
-
-<script><!--
-function setmode(classname) {
-       // set style for each #rows>li>ul>li to display:none unless it matches classname
-       var showclass = classname ? ' '+classname+'(?!\\w)' : '^$';
-       var parentskip = /^keys/;
-       var row = document.getElementById('rows').firstChild;
-       do {
-               if (row.tagName == 'LI' && row.firstChild.tagName == 'UL'
-               && !row.firstChild.className.match(parentskip)) {
-                       var el = row.firstChild.firstChild;
-                       if (el) do {
-                               if (el.tagName == 'LI') {
-                                       el.style.display = el.className.match(showclass) ? 'block' : 'none';
-                               }
-                       } while (el = el.nextSibling);
-               }
-       } while (row = row.nextSibling);
-
-       // update H2 to reflect the first part of a currently active (but hidden) H3
-       var h3s = document.getElementsByTagName('H3');
-       for (var i = 0; i < h3s.length; i++) {
-               if (h3s[i].parentNode.style.display != 'block') continue;
-               document.getElementsByTagName('H2')[0].innerHTML = h3s[i].firstChild.data;
-       }
-} // setmode
-//--></script>
-
+$header{Status}   = '302 Go right ahead';
+$header{Location} = '/vim';
+:><html>
 <body>
-
-<h1>vi/vim cheat sheet</h1>
-
-<h2>normal mode (default)</h2>
-
-<ul id="rows">
-
-<li class="row">
-       <ul class="keys omni">
-       <li class="mo" onclick="setmode()"><b>Esc</b> normal mode
-               <!-- not as static anymore, but never bothered; just see ^[ -->
-       </ul>
-</li>
-
-<:
-our %sign = (
-       arg    => $ascii ? '.' : '·',  # described as 'dot'
-       motion => $ascii ? '|' : '↕',
-       alias  => $ascii ? 'see: ' : '»',
-       up     => $ascii ? 'up'    : '▲',
-       right  => $ascii ? 'right' : '▶',
-       down   => $ascii ? 'down'  : '▼',
-       left   => $ascii ? 'left'  : '◀',
-       sep    => $ascii ? '*'     : '•',
-       _      => exists $get{ascii} && !$ascii ? "\x{200b}" : '<wbr>',
-               # use the correct ZWNJ only when unicode is forced on
-               # default to use unofficial html for best support
-);
-
-my %keys = do 'vim-cmds.inc.pl';
-
-my @casedesc = qw(ctrl shift);
-my @rowdesc = qw(numeric top home bottom);
-my %keyrows = do 'vim-keys.inc.pl';
-
-sub keyunalias {
-       my ($key, %tree) = @_;
-       $key =~ s/(\S*?)(\^?\S)($|\s.*)/$2/;
-       my $mode = $1;
-       return [] unless defined $keys{$mode}{$key};
-       return $keys{$mode}{$key} if ref $keys{$mode}{$key};
-       return if $tree{$key}++;  # endless loop failsafe
-       return keyunalias($keys{$mode}{$key}, %tree);
-}
-
-sub escapeclass {
-       local $_ = shift;
-       s/\^/_c/g;
-       s/\[/_sbo/g;
-       s/\]/_sbc/g;
-       s/^$/_/;
-       return $_;
-}
-
-my %keytrans = qw(
-       ^@ NUL ^a SOH ^b STX ^c ETX  ^d EOT ^e ENQ ^f ACK ^g BEL
-       ^h BS  ^i tab ^j LF  ^k VT   ^l FF  ^m CR  ^n SO  ^o SI
-       ^p DLE ^q DC1 ^r DC2 ^s DC3  ^t DC4 ^u NAK ^v SYN ^w ETB
-       ^x CAN ^y EM  ^z SUB ^[ ESC  ^\ FS  ^] GS  ^^ RS  ^_ US
-       ^? DEL
-);
-
-sub print_key {
-       my ($mode, $key, $keyinfo) = @_;
-
-       $keyinfo = [ $sign{alias}.$keyinfo, keyunalias($keyinfo)->[1] . ' alias' ]
-               if defined $keyinfo and not ref $keyinfo;  # alias
-       my ($desc, $flags, $mnem) = @$keyinfo if defined $keyinfo;
-       defined $desc or $flags = $key eq '^0' ? 'ni' : 'no';
-
-#      $key = $keytrans{$key} if defined $keytrans{$key};
-       my $keytxt = $mode . Entity($key) if $key ne '^0';
-          $keytxt .= $sign{arg} while $flags =~ s/ ?\barg\b//;  # argument
-          $keytxt .= "<small>$sign{motion}</small>" if $flags =~ s/ ?\bargm\b//;  # motion argument
-          $keytxt =~ s{\^(?=.)}{<small>^</small>};  # element around ctrl-identifier
-       my $onclick = $flags =~ s/ ?\bmode(\S*)// && defined $keys{$1} && sprintf(
-               ' onclick="setmode(%s)"',
-               $1 eq '' ? '' : sprintf(q{'mode%s'}, escapeclass($1))
-       );
-       $onclick .= sprintf(q{ onclick="document.location='%s'"}, $1)
-               if $flags =~ s/ ?\blink(\S*)//;
-       my $keyhint = defined($mnem) && qq{ title="$mnem"};
-
-       print qq{\t\t<li class="$flags"$onclick><b$keyhint>$keytxt</b>};
-       print ' ', $desc if defined $desc;
-       print "\n";
-}
-
-our $map = defined $keyrows{$get{map}} ? $get{map} : 'qwerty';
-my $keyrows = $keyrows{$map};
-my @moderows = $get{static} ? split(/\s+/, $get{static}) : sort keys %keys;
-
-for (my $row = 0; $row <= $#$keyrows; $row++) {
-       my $keyrow = $keyrows->[$row];
-       my @caserows = 0 .. $#$keyrow;
-
-       print qq{<li class="row row$row"><ul>\n};
-       for my $modefull (@moderows) {
-               my $mode = $modefull;
-               my @showcase = $mode =~ s/(\d+)(?:-(\d+))?$//
-                       ? (map {3 - $_} split //, $row == 0 && $2 || $1) : @caserows;
-               my $modekeys = $keys{$mode};
-
-               for my $case (@showcase) {
-                       my $keycase = $keyrow->[$case] or next;
-                         @$keycase or next;
-
-                       printf "\t<li%s>", $mode ne '' && sprintf(
-                               ' class="%s"', ($get{static} ? '' : 'mode ') . 'mode' . escapeclass($mode)
-                       );
-                       printf("<h3>%s<small>: %s</small></h3>\n", # XXX insert &nbsp; here to fix msie<=6
-                                       $modekeys->{desc} || "mode $mode",
-                                       "$rowdesc[$row] row $casedesc[$case]"
-                       );
-                       my $caseclass = 'keys';
-                          $caseclass .= ' lead' if defined $modekeys->{lead};  # leading command key shown
-                          $caseclass .= " $casedesc[$case]" if defined $casedesc[$case];
-                       print qq{\t\t<ul class="$caseclass">\n};
-                       print_key($modekeys->{lead}, $_, $modekeys->{$_}) for @$keycase;
-                       print qq{\t\t</ul>\n};
-               } # case
-
-       } # mode
-       print qq{\t</ul>\n};
-} # row
-
-:>
-</ul>
-
-<hr>
-
-<div class="help">
-       <div class="left">
-               <dl class="legend legend-types">
-               <dt class="ci">info
-                       <dd>Info command: shows/does something without altering anything.
-               <dt class="pm">motion
-                       <dd>Moves the cursor, or defines the range for an operator (<:= $sign{motion} :>).
-               <dt class="po">positioning
-                       <dd>Other movement (jumps, window (re)positioning).
-               <dt class="co">command
-                       <dd>Direct action command.
-               <dt class="mi">ins mode
-                       <dd>Enters Insert or Replace mode.
-               <dt class="mo">mode
-                       <dd>Enters a different mode.
-               <dt class="mv">vis mode
-                       <dd>Enters Visual or Select mode.
-               <dt class="me">key cmd
-                       <dd>Additional key commands (click for overview).
-               </dl>
-       </div>
-
-       <div class="right">
-               <dl class="legend legend-options">
-               <dt>key<:= $sign{arg} :>
-                       <dd>Commands with a dot need a char argument afterwards.
-               <dt>key<:= $sign{motion} :>
-                       <dd>Requires a motion afterwards, operates between cursor and destination.
-               <dt class="vim">vim
-                       <dd>Not in original Vi (assessment incomplete).
-               <dt class="vim7">vim7
-                       <dd>New in vim version 7.x.
-               </dl>
-
-               <ul class="legend legend-set">
-               <li>keyboard <strong>map</strong> is
-                       <:= $get{map} ? 'set to ' : '' :><em><:= $map :></em>
-               <li><strong>ascii</strong> mode is
-                       <:= exists $get{ascii} && 'forced ' :><em><:=
-                               $ascii ? 'on' : 'off' :></em>
-               <li><strong>keys</strong> are
-                       <em><:= $showkeys ? 'always shown' : 'hidden if unassigned' :></em><:=
-                               !exists $get{keys} && ' by default' :>
-               <li>default <strong>style</strong> is
-                       <:= defined $get{style} && 'set to ' :><em><:= $style :></em>
-               </ul>
-       </div>
-</div>
-
-<p class="footer">
-       <a href="http://vi.shiar.net/">vi.<strong>shiar.net</strong></a>
-       <a href="git://dev.shiar.net/vi-cheat"><:= "v$VERSION" :></a>
-       created by Shiar <:= $sign{sep} :>
-       <a title="Licensed under the GNU Affero General Public License, version 3"
-          href="http://www.fsf.org/licensing/licenses/agpl-3.0.html">AGPLv3</a> <:= $sign{sep} :>
-       last update <:
-               use Time::Format qw(time_format);
-               print time_format('yyyy-mm-dd', (stat 'vim-cmds.inc.pl')[9]);
-       :>
-</p>
-
+<p>Mainly just the <a href="/vim">Vim sheet</a> so far...</p>
+</body>
 </html>
index da5b6e8..fc9461e 100644 (file)
@@ -280,7 +280,7 @@ print_glyph_tables(
 </div>
 
 <p id="footer">
-       <a href="http://vi.shiar.net/unicode">vi.<strong>shiar.net</strong>/unicode</a>
+       <a href="http://sheet.shiar.nl/unicode">sheet.shiar.nl<strong>/unicode</strong></a>
        <a href="git://dev.shiar.net/vi-cheat"><:= "v$VERSION" :></a>
        created by Shiar •
        <a title="Licensed under the GNU Affero General Public License, version 3"
diff --git a/vim.plp b/vim.plp
new file mode 100644 (file)
index 0000000..df3cca5
--- /dev/null
+++ b/vim.plp
@@ -0,0 +1,266 @@
+<:
+use utf8;
+use strict;
+use warnings;
+no  warnings 'qw';  # you know what you doing
+no  warnings 'uninitialized';  # save some useless checks for more legible code
+
+our $VERSION = '1.1';
+
+our $ascii = 0;
+if (exists $get{ascii}) {
+       $ascii = $get{ascii} ne '0';  # manual override
+} elsif (defined $ENV{HTTP_ACCEPT_CHARSET}) {
+       $ascii = 1;
+       for (split q{,}, $ENV{HTTP_ACCEPT_CHARSET}) {
+               $ascii = 0, last if $_ eq '*' or m{utf-?8}i;
+       }
+}
+
+my $charset = $ascii ? 'us-ascii' : 'utf-8';
+my $ctype = "text/html; charset=$charset";
+$header{content_type} = $ctype;
+
+:><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+
+<head>
+<title>vi cheat sheet</title>
+<meta http-equiv="content-type" content="<:= $ctype :>">
+<link rel="stylesheet" type="text/css" media="all" href="base.css">
+<!--[if lte IE 6]><style> .help dl.legend dt {margin:0 0 1px} </style><![endif]-->
+<!--[if lte IE 7]><style> .help dl.legend dd {float:none} </style><![endif]--><:
+       my %styles = map {$_ => $_} qw(dark circus mono terse);
+       our $style = exists $get{style} && $styles{$get{style}} || 'light';
+       printf(qq{\n<link rel="%s" type="text/css" media="all" href="%s" title="%s">},
+               $_ eq $style ? 'stylesheet' : 'alternate stylesheet', "$_.css", $_
+       ) for keys %styles;
+
+       our $showkeys = exists $get{keys} && $get{keys} ne '0';
+       print "\n<style> .no {visibility:hidden} </style>" unless $showkeys;
+       print "\n<style> .no, .alias {opacity:.5} </style>"
+               if $showkeys and $get{keys} eq 'ghost';
+:>
+
+<script><!--
+function setmode(classname) {
+       // set style for each #rows>li>ul>li to display:none unless it matches classname
+       var showclass = classname ? ' '+classname+'(?!\\w)' : '^$';
+       var parentskip = /^keys/;
+       var row = document.getElementById('rows').firstChild;
+       do {
+               if (row.tagName == 'LI' && row.firstChild.tagName == 'UL'
+               && !row.firstChild.className.match(parentskip)) {
+                       var el = row.firstChild.firstChild;
+                       if (el) do {
+                               if (el.tagName == 'LI') {
+                                       el.style.display = el.className.match(showclass) ? 'block' : 'none';
+                               }
+                       } while (el = el.nextSibling);
+               }
+       } while (row = row.nextSibling);
+
+       // update H2 to reflect the first part of a currently active (but hidden) H3
+       var h3s = document.getElementsByTagName('H3');
+       for (var i = 0; i < h3s.length; i++) {
+               if (h3s[i].parentNode.style.display != 'block') continue;
+               document.getElementsByTagName('H2')[0].innerHTML = h3s[i].firstChild.data;
+       }
+} // setmode
+//--></script>
+
+<body>
+
+<h1>vi/vim cheat sheet</h1>
+
+<h2>normal mode (default)</h2>
+
+<ul id="rows">
+
+<li class="row">
+       <ul class="keys omni">
+       <li class="mo" onclick="setmode()"><b>Esc</b> normal mode
+               <!-- not as static anymore, but never bothered; just see ^[ -->
+       </ul>
+</li>
+
+<:
+our %sign = (
+       arg    => $ascii ? '.' : '·',  # described as 'dot'
+       motion => $ascii ? '|' : '↕',
+       alias  => $ascii ? 'see: ' : '»',
+       up     => $ascii ? 'up'    : '▲',
+       right  => $ascii ? 'right' : '▶',
+       down   => $ascii ? 'down'  : '▼',
+       left   => $ascii ? 'left'  : '◀',
+       sep    => $ascii ? '*'     : '•',
+       _      => exists $get{ascii} && !$ascii ? "\x{200b}" : '<wbr>',
+               # use the correct ZWNJ only when unicode is forced on
+               # default to use unofficial html for best support
+);
+
+my %keys = do 'vim-cmds.inc.pl';
+
+my @casedesc = qw(ctrl shift);
+my @rowdesc = qw(numeric top home bottom);
+my %keyrows = do 'vim-keys.inc.pl';
+
+sub keyunalias {
+       my ($key, %tree) = @_;
+       $key =~ s/(\S*?)(\^?\S)($|\s.*)/$2/;
+       my $mode = $1;
+       return [] unless defined $keys{$mode}{$key};
+       return $keys{$mode}{$key} if ref $keys{$mode}{$key};
+       return if $tree{$key}++;  # endless loop failsafe
+       return keyunalias($keys{$mode}{$key}, %tree);
+}
+
+sub escapeclass {
+       local $_ = shift;
+       s/\^/_c/g;
+       s/\[/_sbo/g;
+       s/\]/_sbc/g;
+       s/^$/_/;
+       return $_;
+}
+
+my %keytrans = qw(
+       ^@ NUL ^a SOH ^b STX ^c ETX  ^d EOT ^e ENQ ^f ACK ^g BEL
+       ^h BS  ^i tab ^j LF  ^k VT   ^l FF  ^m CR  ^n SO  ^o SI
+       ^p DLE ^q DC1 ^r DC2 ^s DC3  ^t DC4 ^u NAK ^v SYN ^w ETB
+       ^x CAN ^y EM  ^z SUB ^[ ESC  ^\ FS  ^] GS  ^^ RS  ^_ US
+       ^? DEL
+);
+
+sub print_key {
+       my ($mode, $key, $keyinfo) = @_;
+
+       $keyinfo = [ $sign{alias}.$keyinfo, keyunalias($keyinfo)->[1] . ' alias' ]
+               if defined $keyinfo and not ref $keyinfo;  # alias
+       my ($desc, $flags, $mnem) = @$keyinfo if defined $keyinfo;
+       defined $desc or $flags = $key eq '^0' ? 'ni' : 'no';
+
+#      $key = $keytrans{$key} if defined $keytrans{$key};
+       my $keytxt = $mode . Entity($key) if $key ne '^0';
+          $keytxt .= $sign{arg} while $flags =~ s/ ?\barg\b//;  # argument
+          $keytxt .= "<small>$sign{motion}</small>" if $flags =~ s/ ?\bargm\b//;  # motion argument
+          $keytxt =~ s{\^(?=.)}{<small>^</small>};  # element around ctrl-identifier
+       my $onclick = $flags =~ s/ ?\bmode(\S*)// && defined $keys{$1} && sprintf(
+               ' onclick="setmode(%s)"',
+               $1 eq '' ? '' : sprintf(q{'mode%s'}, escapeclass($1))
+       );
+       $onclick .= sprintf(q{ onclick="document.location='%s'"}, $1)
+               if $flags =~ s/ ?\blink(\S*)//;
+       my $keyhint = defined($mnem) && qq{ title="$mnem"};
+
+       print qq{\t\t<li class="$flags"$onclick><b$keyhint>$keytxt</b>};
+       print ' ', $desc if defined $desc;
+       print "\n";
+}
+
+our $map = defined $keyrows{$get{map}} ? $get{map} : 'qwerty';
+my $keyrows = $keyrows{$map};
+my @moderows = $get{static} ? split(/\s+/, $get{static}) : sort keys %keys;
+
+for (my $row = 0; $row <= $#$keyrows; $row++) {
+       my $keyrow = $keyrows->[$row];
+       my @caserows = 0 .. $#$keyrow;
+
+       print qq{<li class="row row$row"><ul>\n};
+       for my $modefull (@moderows) {
+               my $mode = $modefull;
+               my @showcase = $mode =~ s/(\d+)(?:-(\d+))?$//
+                       ? (map {3 - $_} split //, $row == 0 && $2 || $1) : @caserows;
+               my $modekeys = $keys{$mode};
+
+               for my $case (@showcase) {
+                       my $keycase = $keyrow->[$case] or next;
+                         @$keycase or next;
+
+                       printf "\t<li%s>", $mode ne '' && sprintf(
+                               ' class="%s"', ($get{static} ? '' : 'mode ') . 'mode' . escapeclass($mode)
+                       );
+                       printf("<h3>%s<small>: %s</small></h3>\n", # XXX insert &nbsp; here to fix msie<=6
+                                       $modekeys->{desc} || "mode $mode",
+                                       "$rowdesc[$row] row $casedesc[$case]"
+                       );
+                       my $caseclass = 'keys';
+                          $caseclass .= ' lead' if defined $modekeys->{lead};  # leading command key shown
+                          $caseclass .= " $casedesc[$case]" if defined $casedesc[$case];
+                       print qq{\t\t<ul class="$caseclass">\n};
+                       print_key($modekeys->{lead}, $_, $modekeys->{$_}) for @$keycase;
+                       print qq{\t\t</ul>\n};
+               } # case
+
+       } # mode
+       print qq{\t</ul>\n};
+} # row
+
+:>
+</ul>
+
+<hr>
+
+<div class="help">
+       <div class="left">
+               <dl class="legend legend-types">
+               <dt class="ci">info
+                       <dd>Info command: shows/does something without altering anything.
+               <dt class="pm">motion
+                       <dd>Moves the cursor, or defines the range for an operator (<:= $sign{motion} :>).
+               <dt class="po">positioning
+                       <dd>Other movement (jumps, window (re)positioning).
+               <dt class="co">command
+                       <dd>Direct action command.
+               <dt class="mi">ins mode
+                       <dd>Enters Insert or Replace mode.
+               <dt class="mo">mode
+                       <dd>Enters a different mode.
+               <dt class="mv">vis mode
+                       <dd>Enters Visual or Select mode.
+               <dt class="me">key cmd
+                       <dd>Additional key commands (click for overview).
+               </dl>
+       </div>
+
+       <div class="right">
+               <dl class="legend legend-options">
+               <dt>key<:= $sign{arg} :>
+                       <dd>Commands with a dot need a char argument afterwards.
+               <dt>key<:= $sign{motion} :>
+                       <dd>Requires a motion afterwards, operates between cursor and destination.
+               <dt class="vim">vim
+                       <dd>Not in original Vi (assessment incomplete).
+               <dt class="vim7">vim7
+                       <dd>New in vim version 7.x.
+               </dl>
+
+               <ul class="legend legend-set">
+               <li>keyboard <strong>map</strong> is
+                       <:= $get{map} ? 'set to ' : '' :><em><:= $map :></em>
+               <li><strong>ascii</strong> mode is
+                       <:= exists $get{ascii} && 'forced ' :><em><:=
+                               $ascii ? 'on' : 'off' :></em>
+               <li><strong>keys</strong> are
+                       <em><:= $showkeys ? 'always shown' : 'hidden if unassigned' :></em><:=
+                               !exists $get{keys} && ' by default' :>
+               <li>default <strong>style</strong> is
+                       <:= defined $get{style} && 'set to ' :><em><:= $style :></em>
+               </ul>
+       </div>
+</div>
+
+<p class="footer">
+       <a href="http://sheet.shiar.nl/vim">sheet.shiar.nl<strong>/vim</strong></a>
+       <a href="git://dev.shiar.net/vi-cheat"><:= "v$VERSION" :></a>
+       created by Shiar <:= $sign{sep} :>
+       <a title="Licensed under the GNU Affero General Public License, version 3"
+          href="http://www.fsf.org/licensing/licenses/agpl-3.0.html">AGPLv3</a> <:= $sign{sep} :>
+       last update <:
+               use Time::Format qw(time_format);
+               print time_format('yyyy-mm-dd', (stat 'vim-cmds.inc.pl')[9]);
+       :>
+</p>
+
+</html>