-# $key = $keytrans{$key} if defined $keytrans{$key};
- my $keytxt = $mode . escapehtml($key) if $key ne '^0';
- $keytxt .= $self->{sign}->{$1} while $flags =~ s/(?:^| )(arg[a-ln-z]?)\b//; # arguments
- $keytxt .= "<small>$self->{sign}->{motion}</small>" if $flags =~ s/ ?\bargm\b//; # motion argument
- $keytxt =~ s{\^(?=.)}{<small>^</small>}; # element around ctrl-identifier
- $keytxt =~ s{\+(?=.)}{<small>+</small>}; # meta
- my $onclick = $flags =~ s/ ?\bmode(\S*)// && defined $self->{keys}{$1} && sprintf(
+sub print_key {
+ my $self = shift;
+ my ($mode, $key, $def) = @_;
+
+ if (not defined $def) {
+ $def = [$key eq '^0' ? 'ni' : 'no'];
+ }
+ elsif (ref $def eq 'SCALAR') {
+ $def = [undef, $def];
+ }
+ if (ref $def ne 'ARRAY') {
+ carp "print_key: invalid definition for $mode$key: $def";
+ return;
+ }
+ my ($flags, $txt) = @{$def};
+ if (ref $txt eq 'SCALAR') {
+ my $ref = ${$txt};
+ $def = $self->keyunalias($ref);
+ $ref = 'esc' if $ref eq "\e";
+ $flags //= $def->[0] if ref $def eq 'ARRAY';
+ $txt = $self->{sign}->{alias} . $ref;
+ $flags .= ' alias';
+ }
+ my ($desc, $mnem) = split /\n/, $self->escapedesc($txt);
+
+ my $onclick = $flags =~ s/ ?\bmode(\S*)// && defined $self->{def}{$1} && sprintf(