Skip to content

Commit 48624cf

Browse files
committedMar 16, 2011
[console] Try to avoid problems caused by keycode 86
The "us" keyboard layout contains a mapping for keycode 86 (which seems not to correspond to any physical key on many US keyboards) to the ASCII character '<'. This mapping causes conflicts with the mapping for keycode 51, which also maps (with shift) to '<'. Change the keyboard mapping generator to choose the lowest keycode for each ASCII character as indicating the relevant mapping to use, on the basis that a lower keycode roughly indicates a "more normal" key. On a German keyboard, which has keys for both keycode 51 and keycode 86 present, this causes '<' to be remapped to ';', which is a closer match to typical user expectations. Reported-by: Sven Dreyer <sven@dreyer-net.de> Signed-off-by: Michael Brown <mcb30@ipxe.org>
1 parent dbb27c9 commit 48624cf

19 files changed

+29
-11
lines changed
 

‎src/hci/keymap/keymap_al.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ struct key_mapping al_mapping[] __keymap = {
1616
{ 0x1a, 0x19 }, /* Ctrl-Z => Ctrl-Y */
1717
{ 0x22, 0x7b }, /* '"' => '{' */
1818
{ 0x27, 0x5b }, /* '\'' => '[' */
19+
{ 0x3c, 0x3b }, /* '<' => ';' */
1920
{ 0x3e, 0x3a }, /* '>' => ':' */
2021
{ 0x40, 0x22 }, /* '@' => '"' */
2122
{ 0x59, 0x5a }, /* 'Y' => 'Z' */

‎src/hci/keymap/keymap_cz.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ struct key_mapping cz_mapping[] __keymap = {
1616
{ 0x2d, 0x3d }, /* '-' => '=' */
1717
{ 0x2f, 0x2d }, /* '/' => '-' */
1818
{ 0x31, 0x2b }, /* '1' => '+' */
19-
{ 0x3c, 0x5c }, /* '<' => '\\' */
19+
{ 0x3c, 0x2c }, /* '<' => ',' */
2020
{ 0x3e, 0x2e }, /* '>' => '.' */
2121
{ 0x3f, 0x2d }, /* '?' => '-' */
2222
{ 0x5d, 0x29 }, /* ']' => ')' */

‎src/hci/keymap/keymap_de.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ struct key_mapping de_mapping[] __keymap = {
2525
{ 0x2f, 0x2d }, /* '/' => '-' */
2626
{ 0x3a, 0x7b }, /* ':' => '{' */
2727
{ 0x3b, 0x5b }, /* ';' => '[' */
28+
{ 0x3c, 0x3b }, /* '<' => ';' */
2829
{ 0x3d, 0x27 }, /* '=' => '\'' */
2930
{ 0x3e, 0x3a }, /* '>' => ':' */
3031
{ 0x3f, 0x5f }, /* '?' => '_' */

‎src/hci/keymap/keymap_dk.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ struct key_mapping dk_mapping[] __keymap = {
1919
{ 0x2b, 0x60 }, /* '+' => '`' */
2020
{ 0x2d, 0x2b }, /* '-' => '+' */
2121
{ 0x2f, 0x2d }, /* '/' => '-' */
22+
{ 0x3c, 0x3b }, /* '<' => ';' */
2223
{ 0x3e, 0x3a }, /* '>' => ':' */
2324
{ 0x3f, 0x5f }, /* '?' => '_' */
2425
{ 0x40, 0x22 }, /* '@' => '"' */

‎src/hci/keymap/keymap_es.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ struct key_mapping es_mapping[] __keymap = {
1818
{ 0x2a, 0x28 }, /* '*' => '(' */
1919
{ 0x2d, 0x27 }, /* '-' => '\'' */
2020
{ 0x2f, 0x2d }, /* '/' => '-' */
21+
{ 0x3c, 0x3b }, /* '<' => ';' */
2122
{ 0x3e, 0x3a }, /* '>' => ':' */
2223
{ 0x3f, 0x5f }, /* '?' => '_' */
2324
{ 0x40, 0x22 }, /* '@' => '"' */

‎src/hci/keymap/keymap_et.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@ struct key_mapping et_mapping[] __keymap = {
1818
{ 0x2a, 0x28 }, /* '*' => '(' */
1919
{ 0x2d, 0x2b }, /* '-' => '+' */
2020
{ 0x2f, 0x2d }, /* '/' => '-' */
21+
{ 0x3c, 0x3b }, /* '<' => ';' */
2122
{ 0x3e, 0x3a }, /* '>' => ':' */
2223
{ 0x3f, 0x5f }, /* '?' => '_' */
2324
{ 0x40, 0x22 }, /* '@' => '"' */
2425
{ 0x5c, 0x27 }, /* '\\' => '\'' */
2526
{ 0x5e, 0x26 }, /* '^' => '&' */
2627
{ 0x5f, 0x3f }, /* '_' => '?' */
2728
{ 0x7c, 0x2a }, /* '|' => '*' */
29+
{ 0x7f, 0x1b }, /* 0x7f => 0x1b */
2830
};

‎src/hci/keymap/keymap_fi.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ struct key_mapping fi_mapping[] __keymap = {
2323
{ 0x2f, 0x2d }, /* '/' => '-' */
2424
{ 0x3a, 0x5c }, /* ':' => '\\' */
2525
{ 0x3b, 0x7c }, /* ';' => '|' */
26+
{ 0x3c, 0x3b }, /* '<' => ';' */
2627
{ 0x3d, 0x27 }, /* '=' => '\'' */
2728
{ 0x3e, 0x3a }, /* '>' => ':' */
2829
{ 0x3f, 0x5f }, /* '?' => '_' */

‎src/hci/keymap/keymap_fr.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ struct key_mapping fr_mapping[] __keymap = {
4242
{ 0x39, 0x2f }, /* '9' => '/' */
4343
{ 0x3a, 0x4d }, /* ':' => 'M' */
4444
{ 0x3b, 0x6d }, /* ';' => 'm' */
45+
{ 0x3c, 0x2e }, /* '<' => '.' */
4546
{ 0x3e, 0x2f }, /* '>' => '/' */
4647
{ 0x3f, 0x5c }, /* '?' => '\\' */
4748
{ 0x40, 0x32 }, /* '@' => '2' */

‎src/hci/keymap/keymap_it.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ struct key_mapping it_mapping[] __keymap = {
1919
{ 0x2b, 0x5e }, /* '+' => '^' */
2020
{ 0x2d, 0x27 }, /* '-' => '\'' */
2121
{ 0x2f, 0x2d }, /* '/' => '-' */
22+
{ 0x3c, 0x3b }, /* '<' => ';' */
2223
{ 0x3e, 0x3a }, /* '>' => ':' */
2324
{ 0x3f, 0x5f }, /* '?' => '_' */
2425
{ 0x40, 0x22 }, /* '@' => '"' */

‎src/hci/keymap/keymap_lt.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,4 @@ FILE_LICENCE ( PUBLIC_DOMAIN );
1212

1313
/** "lt" keyboard mapping */
1414
struct key_mapping lt_mapping[] __keymap = {
15-
{ 0x7f, 0x08 }, /* 0x7f => Ctrl-H */
1615
};

‎src/hci/keymap/keymap_mt.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,4 @@ struct key_mapping mt_mapping[] __keymap = {
1717
{ 0x40, 0x22 }, /* '@' => '"' */
1818
{ 0x5c, 0x23 }, /* '\\' => '#' */
1919
{ 0x7c, 0x7e }, /* '|' => '~' */
20-
{ 0x7f, 0x08 }, /* 0x7f => Ctrl-H */
2120
};

‎src/hci/keymap/keymap_nl.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ struct key_mapping nl_mapping[] __keymap = {
2020
{ 0x2d, 0x2f }, /* '-' => '/' */
2121
{ 0x2f, 0x2d }, /* '/' => '-' */
2222
{ 0x3b, 0x2b }, /* ';' => '+' */
23-
{ 0x3c, 0x5d }, /* '<' => ']' */
23+
{ 0x3c, 0x3b }, /* '<' => ';' */
2424
{ 0x3e, 0x3a }, /* '>' => ':' */
2525
{ 0x3f, 0x3d }, /* '?' => '=' */
2626
{ 0x40, 0x22 }, /* '@' => '"' */

‎src/hci/keymap/keymap_sg.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ struct key_mapping sg_mapping[] __keymap = {
2424
{ 0x2b, 0x60 }, /* '+' => '`' */
2525
{ 0x2d, 0x27 }, /* '-' => '\'' */
2626
{ 0x2f, 0x2d }, /* '/' => '-' */
27+
{ 0x3c, 0x3b }, /* '<' => ';' */
2728
{ 0x3d, 0x5e }, /* '=' => '^' */
2829
{ 0x3e, 0x3a }, /* '>' => ':' */
2930
{ 0x3f, 0x5f }, /* '?' => '_' */

‎src/hci/keymap/keymap_sr.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ struct key_mapping sr_mapping[] __keymap = {
2121
{ 0x2b, 0x2a }, /* '+' => '*' */
2222
{ 0x2d, 0x27 }, /* '-' => '\'' */
2323
{ 0x2f, 0x2d }, /* '/' => '-' */
24+
{ 0x3c, 0x3b }, /* '<' => ';' */
2425
{ 0x3d, 0x2b }, /* '=' => '+' */
2526
{ 0x3e, 0x3a }, /* '>' => ':' */
2627
{ 0x3f, 0x5f }, /* '?' => '_' */

‎src/hci/keymap/keymap_th.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,4 @@ FILE_LICENCE ( PUBLIC_DOMAIN );
1212

1313
/** "th" keyboard mapping */
1414
struct key_mapping th_mapping[] __keymap = {
15-
{ 0x7f, 0x08 }, /* 0x7f => Ctrl-H */
1615
};

‎src/hci/keymap/keymap_ua.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,4 @@ FILE_LICENCE ( PUBLIC_DOMAIN );
1212

1313
/** "ua" keyboard mapping */
1414
struct key_mapping ua_mapping[] __keymap = {
15-
{ 0x7f, 0x08 }, /* 0x7f => Ctrl-H */
1615
};

‎src/hci/keymap/keymap_uk.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ FILE_LICENCE ( PUBLIC_DOMAIN );
1313
/** "uk" keyboard mapping */
1414
struct key_mapping uk_mapping[] __keymap = {
1515
{ 0x22, 0x40 }, /* '"' => '@' */
16-
{ 0x3c, 0x5c }, /* '<' => '\\' */
1716
{ 0x40, 0x22 }, /* '@' => '"' */
1817
{ 0x5c, 0x23 }, /* '\\' => '#' */
1918
{ 0x7c, 0x7e }, /* '|' => '~' */

‎src/hci/keymap/keymap_wo.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ struct key_mapping wo_mapping[] __keymap = {
3636
{ 0x38, 0x5f }, /* '8' => '_' */
3737
{ 0x3a, 0x4d }, /* ':' => 'M' */
3838
{ 0x3b, 0x6d }, /* ';' => 'm' */
39+
{ 0x3c, 0x2e }, /* '<' => '.' */
3940
{ 0x3e, 0x2f }, /* '>' => '/' */
4041
{ 0x40, 0x32 }, /* '@' => '2' */
4142
{ 0x41, 0x51 }, /* 'A' => 'Q' */

‎src/util/genkeymap.pl

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,15 +172,26 @@ sub translate_keymaps {
172172
or next;
173173
my $to_ascii = keysym_to_ascii ( $to->[$keymap]->[$keycode] )
174174
or next;
175-
if ( ( $from_ascii != $to_ascii ) && $verbosity > 1 ) {
175+
my $new_map = ( ! exists $map->{$from_ascii} );
176+
my $update_map =
177+
( $new_map || ( $keycode < $map->{$from_ascii}->{keycode} ) );
178+
if ( ( $verbosity > 1 ) &&
179+
( ( $from_ascii != $to_ascii ) ||
180+
( $update_map && ! $new_map ) ) ) {
176181
printf STDERR "In keymap %d: %s => %s%s\n", $keymap,
177182
ascii_to_name ( $from_ascii ), ascii_to_name ( $to_ascii ),
178-
( $map->{$from_ascii} ? " (ignored)" : "" );
183+
( $update_map ? ( $new_map ? "" : " (override)" )
184+
: " (ignored)" );
185+
}
186+
if ( $update_map ) {
187+
$map->{$from_ascii} = {
188+
to_ascii => $to_ascii,
189+
keycode => $keycode,
190+
};
179191
}
180-
$map->{$from_ascii} ||= $to_ascii;
181192
}
182193
}
183-
return $map;
194+
return { map { $_ => $map->{$_}->{to_ascii} } keys %$map };
184195
}
185196
186197
# Parse command-line options

0 commit comments

Comments
 (0)
Please sign in to comment.