X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/a84b651b70f484379de8ac84a2abac91e59c1a6e..d3b21c80d4dbf66130064f4688f79f0ba7b22c41:/Shiar_Sheet/Keyboard.pm diff --git a/Shiar_Sheet/Keyboard.pm b/Shiar_Sheet/Keyboard.pm index f56437f..05df107 100644 --- a/Shiar_Sheet/Keyboard.pm +++ b/Shiar_Sheet/Keyboard.pm @@ -5,11 +5,13 @@ use warnings; no warnings 'uninitialized'; # save some useless checks for more legible code use Carp; -our $VERSION = '1.00'; +our $VERSION = '1.03'; -my @casedesc = qw(ctrl shift); +my @casedesc = (undef, qw/shift ctrl meta/, 'shift meta'); my @rowdesc = qw(numeric top home bottom); my %keyrows = do 'keys.inc.pl'; +# add first two cases of each row again with each char prepended by + (alt) +push @$_, map { [map {"+$_"} @$_] } @$_[0,1] for map {@$_} values %keyrows; my %keytrans = qw( ^@ NUL ^a SOH ^b STX ^c ETX ^d EOT ^e ENQ ^f ACK ^g BEL @@ -45,6 +47,7 @@ sub map { sub escapeclass { local $_ = shift; s/\^/_c/g; + s/\+/_m/g; s/\[/_sbo/g; s/\]/_sbc/g; s/^$/_/; @@ -63,7 +66,7 @@ sub keyunalias { my $self = shift; my ($key, $ancestry) = @_; - $key =~ s/(\S*?)(\^?\S)($|\s.*)/$2/; + $key =~ s/(\S*?)(\+?\^?\S)($|\s.*)/$2/; my $mode = $1; my $keyinfo = $self->{keys}->{$mode}->{$key}; @@ -84,9 +87,10 @@ sub print_key { # $key = $keytrans{$key} if defined $keytrans{$key}; my $keytxt = $mode . escapehtml($key) if $key ne '^0'; - $keytxt .= $self->{sign}->{arg} while $flags =~ s/ ?\barg\b//; # argument + $keytxt .= $self->{sign}->{$1} while $flags =~ s/(?:^| )(arg[a-ln-z]?)\b//; # arguments $keytxt .= "$self->{sign}->{motion}" if $flags =~ s/ ?\bargm\b//; # motion argument $keytxt =~ s{\^(?=.)}{^}; # element around ctrl-identifier + $keytxt =~ s{\+(?=.)}{+}; # meta my $onclick = $flags =~ s/ ?\bmode(\S*)// && defined $self->{keys}{$1} && sprintf( ' onclick="setmode(%s)"', $1 eq '' ? '' : sprintf(q{'mode%s'}, escapeclass($1)) @@ -94,6 +98,7 @@ sub print_key { $onclick .= sprintf(q{ onclick="document.location='%s'"}, $1) if $flags =~ s/ ?\blink(\S*)//; my $keyhint = defined($mnem) && qq{ title="$mnem"}; + $flags .= ' chr'.ord(substr $key, -1) if $key ne '^0'; print qq{\t\t
  • $keytxt}; print ' ', $desc if defined $desc; @@ -107,13 +112,12 @@ sub print_rows { for (my $row = 0; $row <= $#{ $keyrows{$self->{map}} }; $row++) { my $keyrow = $keyrows{$self->{map}}->[$row]; - my @caserows = 0 .. $#$keyrow; print qq{