X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/a401632a210413c3a4f0237c8fd8986bdf45934c..132eb3a630a1f5966a133bbc6538996ae31326b1:/Shiar_Sheet/Keyboard.pm diff --git a/Shiar_Sheet/Keyboard.pm b/Shiar_Sheet/Keyboard.pm index 9456b7d..cca8333 100644 --- a/Shiar_Sheet/Keyboard.pm +++ b/Shiar_Sheet/Keyboard.pm @@ -5,7 +5,7 @@ use warnings; no warnings 'uninitialized'; # save some useless checks for more legible code use Carp; -our $VERSION = '1.03'; +our $VERSION = 'v1.05'; my @casedesc = (undef, qw/shift ctrl meta/, 'shift meta'); my @rowdesc = qw(numeric top home bottom); @@ -90,44 +90,54 @@ sub print_key { $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 $keyhint = defined($mnem) && qq{ title="$mnem"}; + $keytxt = "$keytxt"; + $keytxt .= ' '.$desc if defined $desc; + $keytxt = qq{$keytxt} if $flags =~ s/ ?\blink(\S*)//; my $onclick = $flags =~ s/ ?\bmode(\S*)// && defined $self->{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"}; $flags .= ' chr'.ord(substr $key, -1) if $key ne '^0'; - print qq{\t\t
  • $keytxt}; - print ' ', $desc if defined $desc; + print qq{\t\t
  • $keytxt}; print "\n"; } sub print_rows { my $self = shift; - my $static = shift; - my @moderows = $static ? split(/\s+/, $static) : sort keys %{ $self->{keys} }; + my %moderows = ( + -DEFAULT => !@_ ? '' : split(/(?:\s*([^=\s]*)=\s*)/, shift), + # plus specific mode overrides prefixed by '=' + ); + my $defrows = shift || [2, 1, 0]; + my @modes = sort keys %{ $self->{keys} }; for (my $row = 0; $row <= $#{ $keyrows{$self->{map}} }; $row++) { my $keyrow = $keyrows{$self->{map}}->[$row]; print qq{
  • \n}; } # case - } # mode + } # submode + + } # basemode print qq{\t\n}; } # row }