Show keyboard shortcuts in a consistent order in help

Perl's hash variables are not ordered so each
time we run the CGI script for the help page
we may get a different order.

This caused bindings and names to appear
differently on each reload.

To fix this sort by keys when generating the
shortcut tables.

Fixes #133
This commit is contained in:
David Spickett
2020-07-31 14:33:26 +01:00
parent 09cf3874fc
commit 638f46d091

View File

@@ -72,22 +72,26 @@ local (%funckeydesc, $key, $fname, $desc);
%funcname = (%funcname, %buf_funcname, %lineedit_funcname, %menu_funcname);
%funcdesc = (%funcdesc, %buf_funcdesc, %lineedit_funcdesc, %menu_funcdesc);
while (($fname, $desc) = each %funcdesc) {
$funckeydesc{$funcname{$fname}} = "$fname\n$desc\n";
# sort for consistent order each time this is run
foreach my $fname (sort keys %funcdesc) {
$funckeydesc{$funcname{$fname}} = "$fname\n$funcdesc{$fname}\n";
}
while (($key, $fname) = each %keyfunc) {
foreach $key (sort keys %keyfunc) {
$keydata{$key} && next;
$funckeydesc{$funcname{$fname}} .= "$key,";
$funckeydesc{$funcname{$keyfunc{$key}}} .= "$key,";
}
while (($key, $fname) = each %buf_keyfunc) {
$funckeydesc{$funcname{$fname}} .= "$key,";
foreach $key (sort keys %buf_keyfunc) {
$keydata{$key} && next;
$funckeydesc{$funcname{$buf_keyfunc{$key}}} .= "$key,";
}
while (($key, $fname) = each %lineedit_keyfunc) {
$funckeydesc{$funcname{$fname}} .= "$key,";
foreach $key (sort keys %lineedit_keyfunc) {
$keydata{$key} && next;
$funckeydesc{$funcname{$lineedit_keyfunc{$key}}} .= "$key,";
}
while (($key, $fname) = each %menu_keyfunc) {
$funckeydesc{$funcname{$fname}} .= "$key,";
foreach $key (sort keys %menu_keyfunc) {
$keydata{$key} && next;
$funckeydesc{$funcname{$menu_keyfunc{$key}}} .= "$key,";
}
print <<HEADING;