summaryrefslogtreecommitdiffstats
path: root/perl-install/keyboard.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/keyboard.pm')
-rw-r--r--perl-install/keyboard.pm90
1 files changed, 71 insertions, 19 deletions
diff --git a/perl-install/keyboard.pm b/perl-install/keyboard.pm
index 5b59bd2c3..248c095ba 100644
--- a/perl-install/keyboard.pm
+++ b/perl-install/keyboard.pm
@@ -2,29 +2,80 @@ package keyboard;
use diagnostics;
use strict;
-use vars qw($KMAP_MAGIC %defaultKeyboards %loadKeymap);
-use common qw(:system :file);
+use common qw(:common :system :file);
use run_program;
use log;
use c;
-$KMAP_MAGIC = 0x8B39C07F;
+my $KMAP_MAGIC = 0x8B39C07F;
-%defaultKeyboards = (
- "de" => "de-latin1",
- "fr" => "fr-latin1",
- "fi" => "fi-latin1",
- "se" => "se-latin1",
- "no" => "no-latin1",
- "cs" => "cz-lat2",
- "tr" => "trq",
+my %lang2keyboard =
+(
+ "en" => "us",
);
1;
+# [1] = name for loadkeys, [2] = extension for Xmodmap
+my @fields =
+my %keyboards = (
+ "be" => [ __("Belgian"), "be-latin1", "be" ],
+ "bg" => [ __("Bulgarian"), "bg", "bg" ],
+ "fr" => [ __("French"), "fr-latin1", "fr" ],
+ "gr" => [ __("Greek"), "gr-8859_7", "gr" ],
+ "pt" => [ __("Portuguese"), "pt-latin1", "pt" ],
+# the xmodmap.pl has to be fixed to use latin2 keymaps
+# "pl" => [ __("Polish"), "pl-latin2", "pl" ],
+ "sk" => [ __("Slovakian"), "sk-latin2", "sk" ],
+ "hu" => [ __("Hungarian"), "hu-latin2", "hu" ],
+ "tr_f" => [ __("Turkish (traditional \"F\" model)"), "tr_f-latin5", "tr_f" ],
+ "tr_q" => [ __("Turkish (modern \"Q\" model)"), "tr_q-latin5", "tr_q" ],
+ "cz" => [ __("Czech"), "cz-latin2", "cz" ],
+ "qc" => [ __("Canadian (Quebec)"), "qc-latin1", "qc" ],
+ "de" => [ __("German"), "de-latin1", "de" ],
+ "il" => [ __("Israelian"), "il-8859_8", "il" ],
+ "ru" => [ __("Russian"), "ru-koi8", "ru" ],
+ "uk" => [ __("UK keyboard"), "uk-latin1", "uk" ],
+ "us" => [ __("US keyboard"), "us-latin", "us" ],
+ "dk" => [ __("Danish"), "dk-latin1", "dk" ],
+ "is" => [ __("Icelandic"), "is-latin1", "is" ],
+"dvorak" => [ __("Dvorak"), "dvorak", "dvorak" ],
+ "la" => [ __("Latin American"), "la-latin1", "la" ],
+ "it" => [ __("Italian"), "it-latin1", "it" ],
+ "sf" => [ __("Swiss (french layout)"), "sf-latin1", "sf" ],
+ "yu" => [ __("Yugoslavian (latin layout)"), "yu-latin2", "yu" ],
+ "fi" => [ __("Finnish"), "fi-latin1", "fi" ],
+ "nl" => [ __("Dutch"), "nl-latin1", "nl" ],
+ "sg" => [ __("Swiss (german layout)"), "sg-latin1", "sg" ],
+ "no" => [ __("Norwegian"), "no-latin1", "no" ],
+ "si" => [ __("Slovenian"), "si-latin1", "si" ],
+# the xmodmap.th has to be fixed to use tis620 keymaps
+# "th" => [ __("Thai keyboard"), "th", "th" ],
+# armenian xmodmap have to be checked...
+# "am" => [ __("Armenian"), "am-armscii8", "am" ],
+# georgian keyboards have to be written...
+#"ge_ru"=>[__("Georgian (\"Russian\" layout)","ge_ru-georgian_academy","ge_ru"],
+#"ge_la"=>[__("Georgian ("\Latin\" layout)","ge_la-georgian_academy","ge_ru"],
+);
+
+sub list { map { $_->[0] } values %keyboards }
+sub keyboard2text { $keyboards{$_[0]} && $keyboards{$_[0]}[0] }
+sub text2keyboard {
+ my ($t) = @_;
+ while (my ($k, $v) = each %keyboards) {
+ lc($v->[0]) eq lc($t) and return $k;
+ }
+ die "unknown keyboard $t";
+}
+
+sub lang2keyboard($) {
+ local ($_) = @_;
+ $keyboards{$_} && $_ || $lang2keyboard{$_} || substr($_, 0, 2);
+}
+
sub load($) {
my ($keymap) = @_;
@@ -54,26 +105,27 @@ sub load($) {
log::l("loaded $count keymap tables");
}
-sub setup(;$) {
+sub setup($) {
my ($keyboard) = @_;
- my $t;
+ my $o = $keyboards{$keyboard} or return;
- $keyboard ||= $defaultKeyboards{$ENV{LANG}} || "us";
-
- my $file = "/usr/share/keymaps/$keyboard.kmap";
+ my $file = "/usr/share/keymaps/$o->[1].kmap";
if (-e $file) {
- log::l("loading keymap $keyboard");
+ log::l("loading keymap $o->[1]");
load(cat_($file));
}
+ eval { run_program::run('xmodmap', "/usr/share/xmodmap/xmodmap.$o->[2]") };
+
$keyboard;
}
sub write($$) {
- my ($prefix, $keymap) = @_;
+ my ($prefix, $keyboard) = @_;
+ my $o = $keyboards{$keyboard} or return;
local *F;
open F, ">$prefix/etc/sysconfig/keyboard" or die "failed to create keyboard configuration: $!";
- print F "KEYTABLE=$keymap\n" or die "failed to write keyboard configuration: $!";
+ print F "KEYTABLE=$o->[1]\n" or die "failed to write keyboard configuration: $!";
run_program::rooted($prefix, "dumpkeys > /etc/sysconfig/console/default.kmap") or die "dumpkeys failed";
}