-# $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
+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 $keytxt = $self->print_letter($key, $mode);