diff options
author | Michael Brown <mcb30@ipxe.org> | 2011-03-16 21:31:16 +0000 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2011-03-16 21:43:56 +0000 |
commit | 48624cf94ab6ece5759ab71ad40c7e69f6430c23 (patch) | |
tree | 16eef504fdb3dda83177873b3227142e3438dec0 | |
parent | dbb27c9c3ba6cdbc27a6d36a952a82a51dc11407 (diff) | |
download | ipxe-48624cf94ab6ece5759ab71ad40c7e69f6430c23.zip ipxe-48624cf94ab6ece5759ab71ad40c7e69f6430c23.tar.gz ipxe-48624cf94ab6ece5759ab71ad40c7e69f6430c23.tar.bz2 |
[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>
-rw-r--r-- | src/hci/keymap/keymap_al.c | 1 | ||||
-rw-r--r-- | src/hci/keymap/keymap_cz.c | 2 | ||||
-rw-r--r-- | src/hci/keymap/keymap_de.c | 1 | ||||
-rw-r--r-- | src/hci/keymap/keymap_dk.c | 1 | ||||
-rw-r--r-- | src/hci/keymap/keymap_es.c | 1 | ||||
-rw-r--r-- | src/hci/keymap/keymap_et.c | 2 | ||||
-rw-r--r-- | src/hci/keymap/keymap_fi.c | 1 | ||||
-rw-r--r-- | src/hci/keymap/keymap_fr.c | 1 | ||||
-rw-r--r-- | src/hci/keymap/keymap_it.c | 1 | ||||
-rw-r--r-- | src/hci/keymap/keymap_lt.c | 1 | ||||
-rw-r--r-- | src/hci/keymap/keymap_mt.c | 1 | ||||
-rw-r--r-- | src/hci/keymap/keymap_nl.c | 2 | ||||
-rw-r--r-- | src/hci/keymap/keymap_sg.c | 1 | ||||
-rw-r--r-- | src/hci/keymap/keymap_sr.c | 1 | ||||
-rw-r--r-- | src/hci/keymap/keymap_th.c | 1 | ||||
-rw-r--r-- | src/hci/keymap/keymap_ua.c | 1 | ||||
-rw-r--r-- | src/hci/keymap/keymap_uk.c | 1 | ||||
-rw-r--r-- | src/hci/keymap/keymap_wo.c | 1 | ||||
-rwxr-xr-x | src/util/genkeymap.pl | 19 |
19 files changed, 29 insertions, 11 deletions
diff --git a/src/hci/keymap/keymap_al.c b/src/hci/keymap/keymap_al.c index bb48859..caf295e 100644 --- a/src/hci/keymap/keymap_al.c +++ b/src/hci/keymap/keymap_al.c @@ -16,6 +16,7 @@ struct key_mapping al_mapping[] __keymap = { { 0x1a, 0x19 }, /* Ctrl-Z => Ctrl-Y */ { 0x22, 0x7b }, /* '"' => '{' */ { 0x27, 0x5b }, /* '\'' => '[' */ + { 0x3c, 0x3b }, /* '<' => ';' */ { 0x3e, 0x3a }, /* '>' => ':' */ { 0x40, 0x22 }, /* '@' => '"' */ { 0x59, 0x5a }, /* 'Y' => 'Z' */ diff --git a/src/hci/keymap/keymap_cz.c b/src/hci/keymap/keymap_cz.c index c201978..9280f84 100644 --- a/src/hci/keymap/keymap_cz.c +++ b/src/hci/keymap/keymap_cz.c @@ -16,7 +16,7 @@ struct key_mapping cz_mapping[] __keymap = { { 0x2d, 0x3d }, /* '-' => '=' */ { 0x2f, 0x2d }, /* '/' => '-' */ { 0x31, 0x2b }, /* '1' => '+' */ - { 0x3c, 0x5c }, /* '<' => '\\' */ + { 0x3c, 0x2c }, /* '<' => ',' */ { 0x3e, 0x2e }, /* '>' => '.' */ { 0x3f, 0x2d }, /* '?' => '-' */ { 0x5d, 0x29 }, /* ']' => ')' */ diff --git a/src/hci/keymap/keymap_de.c b/src/hci/keymap/keymap_de.c index 766adf8..ffcf912 100644 --- a/src/hci/keymap/keymap_de.c +++ b/src/hci/keymap/keymap_de.c @@ -25,6 +25,7 @@ struct key_mapping de_mapping[] __keymap = { { 0x2f, 0x2d }, /* '/' => '-' */ { 0x3a, 0x7b }, /* ':' => '{' */ { 0x3b, 0x5b }, /* ';' => '[' */ + { 0x3c, 0x3b }, /* '<' => ';' */ { 0x3d, 0x27 }, /* '=' => '\'' */ { 0x3e, 0x3a }, /* '>' => ':' */ { 0x3f, 0x5f }, /* '?' => '_' */ diff --git a/src/hci/keymap/keymap_dk.c b/src/hci/keymap/keymap_dk.c index 4f79115..e409018 100644 --- a/src/hci/keymap/keymap_dk.c +++ b/src/hci/keymap/keymap_dk.c @@ -19,6 +19,7 @@ struct key_mapping dk_mapping[] __keymap = { { 0x2b, 0x60 }, /* '+' => '`' */ { 0x2d, 0x2b }, /* '-' => '+' */ { 0x2f, 0x2d }, /* '/' => '-' */ + { 0x3c, 0x3b }, /* '<' => ';' */ { 0x3e, 0x3a }, /* '>' => ':' */ { 0x3f, 0x5f }, /* '?' => '_' */ { 0x40, 0x22 }, /* '@' => '"' */ diff --git a/src/hci/keymap/keymap_es.c b/src/hci/keymap/keymap_es.c index 0873312..c1fe013 100644 --- a/src/hci/keymap/keymap_es.c +++ b/src/hci/keymap/keymap_es.c @@ -18,6 +18,7 @@ struct key_mapping es_mapping[] __keymap = { { 0x2a, 0x28 }, /* '*' => '(' */ { 0x2d, 0x27 }, /* '-' => '\'' */ { 0x2f, 0x2d }, /* '/' => '-' */ + { 0x3c, 0x3b }, /* '<' => ';' */ { 0x3e, 0x3a }, /* '>' => ':' */ { 0x3f, 0x5f }, /* '?' => '_' */ { 0x40, 0x22 }, /* '@' => '"' */ diff --git a/src/hci/keymap/keymap_et.c b/src/hci/keymap/keymap_et.c index 29558cf..ad88cec 100644 --- a/src/hci/keymap/keymap_et.c +++ b/src/hci/keymap/keymap_et.c @@ -18,6 +18,7 @@ struct key_mapping et_mapping[] __keymap = { { 0x2a, 0x28 }, /* '*' => '(' */ { 0x2d, 0x2b }, /* '-' => '+' */ { 0x2f, 0x2d }, /* '/' => '-' */ + { 0x3c, 0x3b }, /* '<' => ';' */ { 0x3e, 0x3a }, /* '>' => ':' */ { 0x3f, 0x5f }, /* '?' => '_' */ { 0x40, 0x22 }, /* '@' => '"' */ @@ -25,4 +26,5 @@ struct key_mapping et_mapping[] __keymap = { { 0x5e, 0x26 }, /* '^' => '&' */ { 0x5f, 0x3f }, /* '_' => '?' */ { 0x7c, 0x2a }, /* '|' => '*' */ + { 0x7f, 0x1b }, /* 0x7f => 0x1b */ }; diff --git a/src/hci/keymap/keymap_fi.c b/src/hci/keymap/keymap_fi.c index 479437f..c8f6c3a 100644 --- a/src/hci/keymap/keymap_fi.c +++ b/src/hci/keymap/keymap_fi.c @@ -23,6 +23,7 @@ struct key_mapping fi_mapping[] __keymap = { { 0x2f, 0x2d }, /* '/' => '-' */ { 0x3a, 0x5c }, /* ':' => '\\' */ { 0x3b, 0x7c }, /* ';' => '|' */ + { 0x3c, 0x3b }, /* '<' => ';' */ { 0x3d, 0x27 }, /* '=' => '\'' */ { 0x3e, 0x3a }, /* '>' => ':' */ { 0x3f, 0x5f }, /* '?' => '_' */ diff --git a/src/hci/keymap/keymap_fr.c b/src/hci/keymap/keymap_fr.c index 7f007b6..fd615a4 100644 --- a/src/hci/keymap/keymap_fr.c +++ b/src/hci/keymap/keymap_fr.c @@ -42,6 +42,7 @@ struct key_mapping fr_mapping[] __keymap = { { 0x39, 0x2f }, /* '9' => '/' */ { 0x3a, 0x4d }, /* ':' => 'M' */ { 0x3b, 0x6d }, /* ';' => 'm' */ + { 0x3c, 0x2e }, /* '<' => '.' */ { 0x3e, 0x2f }, /* '>' => '/' */ { 0x3f, 0x5c }, /* '?' => '\\' */ { 0x40, 0x32 }, /* '@' => '2' */ diff --git a/src/hci/keymap/keymap_it.c b/src/hci/keymap/keymap_it.c index 3f6b9f8..5bb0547 100644 --- a/src/hci/keymap/keymap_it.c +++ b/src/hci/keymap/keymap_it.c @@ -19,6 +19,7 @@ struct key_mapping it_mapping[] __keymap = { { 0x2b, 0x5e }, /* '+' => '^' */ { 0x2d, 0x27 }, /* '-' => '\'' */ { 0x2f, 0x2d }, /* '/' => '-' */ + { 0x3c, 0x3b }, /* '<' => ';' */ { 0x3e, 0x3a }, /* '>' => ':' */ { 0x3f, 0x5f }, /* '?' => '_' */ { 0x40, 0x22 }, /* '@' => '"' */ diff --git a/src/hci/keymap/keymap_lt.c b/src/hci/keymap/keymap_lt.c index 1a76c37..3e99d8c 100644 --- a/src/hci/keymap/keymap_lt.c +++ b/src/hci/keymap/keymap_lt.c @@ -12,5 +12,4 @@ FILE_LICENCE ( PUBLIC_DOMAIN ); /** "lt" keyboard mapping */ struct key_mapping lt_mapping[] __keymap = { - { 0x7f, 0x08 }, /* 0x7f => Ctrl-H */ }; diff --git a/src/hci/keymap/keymap_mt.c b/src/hci/keymap/keymap_mt.c index e50e2b8..094a6fc 100644 --- a/src/hci/keymap/keymap_mt.c +++ b/src/hci/keymap/keymap_mt.c @@ -17,5 +17,4 @@ struct key_mapping mt_mapping[] __keymap = { { 0x40, 0x22 }, /* '@' => '"' */ { 0x5c, 0x23 }, /* '\\' => '#' */ { 0x7c, 0x7e }, /* '|' => '~' */ - { 0x7f, 0x08 }, /* 0x7f => Ctrl-H */ }; diff --git a/src/hci/keymap/keymap_nl.c b/src/hci/keymap/keymap_nl.c index b2b7ed2..ba05170 100644 --- a/src/hci/keymap/keymap_nl.c +++ b/src/hci/keymap/keymap_nl.c @@ -20,7 +20,7 @@ struct key_mapping nl_mapping[] __keymap = { { 0x2d, 0x2f }, /* '-' => '/' */ { 0x2f, 0x2d }, /* '/' => '-' */ { 0x3b, 0x2b }, /* ';' => '+' */ - { 0x3c, 0x5d }, /* '<' => ']' */ + { 0x3c, 0x3b }, /* '<' => ';' */ { 0x3e, 0x3a }, /* '>' => ':' */ { 0x3f, 0x3d }, /* '?' => '=' */ { 0x40, 0x22 }, /* '@' => '"' */ diff --git a/src/hci/keymap/keymap_sg.c b/src/hci/keymap/keymap_sg.c index c713181..0b08209 100644 --- a/src/hci/keymap/keymap_sg.c +++ b/src/hci/keymap/keymap_sg.c @@ -24,6 +24,7 @@ struct key_mapping sg_mapping[] __keymap = { { 0x2b, 0x60 }, /* '+' => '`' */ { 0x2d, 0x27 }, /* '-' => '\'' */ { 0x2f, 0x2d }, /* '/' => '-' */ + { 0x3c, 0x3b }, /* '<' => ';' */ { 0x3d, 0x5e }, /* '=' => '^' */ { 0x3e, 0x3a }, /* '>' => ':' */ { 0x3f, 0x5f }, /* '?' => '_' */ diff --git a/src/hci/keymap/keymap_sr.c b/src/hci/keymap/keymap_sr.c index 84e7529..0552f4d 100644 --- a/src/hci/keymap/keymap_sr.c +++ b/src/hci/keymap/keymap_sr.c @@ -21,6 +21,7 @@ struct key_mapping sr_mapping[] __keymap = { { 0x2b, 0x2a }, /* '+' => '*' */ { 0x2d, 0x27 }, /* '-' => '\'' */ { 0x2f, 0x2d }, /* '/' => '-' */ + { 0x3c, 0x3b }, /* '<' => ';' */ { 0x3d, 0x2b }, /* '=' => '+' */ { 0x3e, 0x3a }, /* '>' => ':' */ { 0x3f, 0x5f }, /* '?' => '_' */ diff --git a/src/hci/keymap/keymap_th.c b/src/hci/keymap/keymap_th.c index 78e1e2b..e8b44d1 100644 --- a/src/hci/keymap/keymap_th.c +++ b/src/hci/keymap/keymap_th.c @@ -12,5 +12,4 @@ FILE_LICENCE ( PUBLIC_DOMAIN ); /** "th" keyboard mapping */ struct key_mapping th_mapping[] __keymap = { - { 0x7f, 0x08 }, /* 0x7f => Ctrl-H */ }; diff --git a/src/hci/keymap/keymap_ua.c b/src/hci/keymap/keymap_ua.c index 6234780..1106a8b 100644 --- a/src/hci/keymap/keymap_ua.c +++ b/src/hci/keymap/keymap_ua.c @@ -12,5 +12,4 @@ FILE_LICENCE ( PUBLIC_DOMAIN ); /** "ua" keyboard mapping */ struct key_mapping ua_mapping[] __keymap = { - { 0x7f, 0x08 }, /* 0x7f => Ctrl-H */ }; diff --git a/src/hci/keymap/keymap_uk.c b/src/hci/keymap/keymap_uk.c index 9fbf30a..6550d8e 100644 --- a/src/hci/keymap/keymap_uk.c +++ b/src/hci/keymap/keymap_uk.c @@ -13,7 +13,6 @@ FILE_LICENCE ( PUBLIC_DOMAIN ); /** "uk" keyboard mapping */ struct key_mapping uk_mapping[] __keymap = { { 0x22, 0x40 }, /* '"' => '@' */ - { 0x3c, 0x5c }, /* '<' => '\\' */ { 0x40, 0x22 }, /* '@' => '"' */ { 0x5c, 0x23 }, /* '\\' => '#' */ { 0x7c, 0x7e }, /* '|' => '~' */ diff --git a/src/hci/keymap/keymap_wo.c b/src/hci/keymap/keymap_wo.c index 8659044..b453576 100644 --- a/src/hci/keymap/keymap_wo.c +++ b/src/hci/keymap/keymap_wo.c @@ -36,6 +36,7 @@ struct key_mapping wo_mapping[] __keymap = { { 0x38, 0x5f }, /* '8' => '_' */ { 0x3a, 0x4d }, /* ':' => 'M' */ { 0x3b, 0x6d }, /* ';' => 'm' */ + { 0x3c, 0x2e }, /* '<' => '.' */ { 0x3e, 0x2f }, /* '>' => '/' */ { 0x40, 0x32 }, /* '@' => '2' */ { 0x41, 0x51 }, /* 'A' => 'Q' */ diff --git a/src/util/genkeymap.pl b/src/util/genkeymap.pl index 89f1469..d556df2 100755 --- a/src/util/genkeymap.pl +++ b/src/util/genkeymap.pl @@ -172,15 +172,26 @@ sub translate_keymaps { or next; my $to_ascii = keysym_to_ascii ( $to->[$keymap]->[$keycode] ) or next; - if ( ( $from_ascii != $to_ascii ) && $verbosity > 1 ) { + my $new_map = ( ! exists $map->{$from_ascii} ); + my $update_map = + ( $new_map || ( $keycode < $map->{$from_ascii}->{keycode} ) ); + if ( ( $verbosity > 1 ) && + ( ( $from_ascii != $to_ascii ) || + ( $update_map && ! $new_map ) ) ) { printf STDERR "In keymap %d: %s => %s%s\n", $keymap, ascii_to_name ( $from_ascii ), ascii_to_name ( $to_ascii ), - ( $map->{$from_ascii} ? " (ignored)" : "" ); + ( $update_map ? ( $new_map ? "" : " (override)" ) + : " (ignored)" ); + } + if ( $update_map ) { + $map->{$from_ascii} = { + to_ascii => $to_ascii, + keycode => $keycode, + }; } - $map->{$from_ascii} ||= $to_ascii; } } - return $map; + return { map { $_ => $map->{$_}->{to_ascii} } keys %$map }; } # Parse command-line options |