- $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->{moderows} // '') =~ /^\d* [3-9] \d{2,}/x) {
+ # move root ^ctrl or +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]}