keyboard/altgr/index: label modes by description character.
[sheet.git] / keyboard / altgr / index.inc.pl
index a9030e0e321e2648ee3b4c0160b48e78bde4c239..5994d9f11812a597a911d6d5d28d7c3bff1cf5f2 100644 (file)
@@ -15,10 +15,17 @@ for my $name (map {@{$_}} values %cat) {
        my %row = %{$keys}{qw( title category flag mode image imagealt )};
        $cat{$name} = \%row;
 
-       $keys->{mode} //= {'' => undef};
-       for my $mode (keys %{ $keys->{mode} }) {
-               $row{key}{$_} = $keys->{key}{$_} for $mode || ();
-               $row{inventory}{$mode}{$_}++ for grep { /^g[2-9]/ } map { s/ (?!ext).*//r }
+       $row{mode} //= {'' => undef};
+
+       if ($keys->{def}{''}{'+a'}) {
+               # move root +meta keys to distinct mode
+               $row{mode}{"\e"} = '+';
+               /^\+./ and $keys->{def}{"\e"}{$_} = delete $keys->{def}{''}{$_}
+                       for keys %{ $keys->{def}{''} };
+       }
+
+       for my $mode (keys %{ $row{mode} }) {
+               $row{inventory}{$mode}{$_}++ for grep { /^g[2-9]/ } map { s/ (?!ext).*//r } map {$_->[0]}
                        values %{ $keys->{def}{$mode} };
        }
 }