Úvod
Hledat
Ovladače
Hardware
Software
Abíčko
O nás

386 - Vstupní zařízení - Klávesnice - Item 4662

Otázka

Datum: 26. 2. 2003 09:53
Od: Richard Gavenda
Titulek: Problémy s českou klávesnicí v

Mám takový problém a potřeboval bych vědět, jestli se s tím někdo potýká taky, případně jestli ho vyřešil.

Mám nainstalovaný RH8, locale nastavené na cs_CZ:UTF8 klávesová mapa v konzoli je cz-lat2 a mapa v xwindows je cz. Všechny české znaky, které jsou přímo na klávesnici, tj. na klávesách 1-0 fungují bez problémů, ale nefungují mrtvé klávesy. Na textové konzoli nefungují vůbec, v xwindows jsou problémy hlavně s háčkem, nelze napsat třeba znaky ň, ť, ď, atd. Systém mrtvou klávesu jakoby akceptuje ale po zmáčknutí dalšího znaku, třeba n, se nenapíše nic.

Kdybyste věděli někdo co s tím, ozvěte se prosím.



Odpovědi

Datum: 26. 2. 2003 09:56
Od: Richard Gavenda
Titulek: Doplnění

Ještě upřesnění: pod XWindows používám GNOME

Datum: 26. 2. 2003 10:14
Od: next
Titulek: Problémy s českou klávesnicí v

Ako mate nastavene locales - premenne LC_* ? LC_CTYPE musi byt nastavene na sk_SK (ehm, cz_CZ :)

Datum: 26. 2. 2003 14:22
Od: Stanislav Brabec
Titulek: Problémy s českou klávesnicí v

Gnome-2.0 mělo ve starších verzích chybu a neznalo české mrtvé klávesy (tuším až do gtk-2.0.7). Samostatný patch je zde.

V textové konzoli to nechodí a zřejmě ještě nějakou dobu chodit nebude. Patch je zde (pozor, porušíte tím binární kompatibilitu jádra):

diff -Nurd linux.orig/drivers/char/keyboard.c linux/drivers/char/keyboard.c
--- linux.orig/drivers/char/keyboard.c	Mon Oct 16 21:58:51 2000
+++ linux/drivers/char/keyboard.c	Fri Sep 21 17:58:10 2001
@@ -151,7 +151,7 @@
 
 /* N.B. drivers/macintosh/mac_keyb.c needs to call put_queue */
 void put_queue(int);
-static unsigned char handle_diacr(unsigned char);
+static ushort handle_diacr(unsigned char);
 
 /* kbd_pt_regs - set by keyboard_interrupt(), used by show_ptregs() */
 struct pt_regs * kbd_pt_regs;
@@ -541,12 +541,24 @@
 
 static void do_self(unsigned char value, char up_flag)
 {
+        ushort v;
 	if (up_flag)
 		return;		/* no action, if this is a key release */
 
-	if (diacr)
-		value = handle_diacr(value);
-
+	if (diacr) {
+                v = handle_diacr(value);
+                if (kbd->kbdmode == VC_UNICODE) {
+                        to_utf8(v & 0xFFFF);
+                        return;
+                }
+            
+                /* 
+                 * this makes at least latin-1 compose chars work 
+                 * even when using unicode keymap in non-unicode mode
+		 */
+		value = v & 0xFF; 
+        
+        }
 	if (dead_key_next) {
 		dead_key_next = 0;
 		diacr = value;
@@ -582,18 +594,18 @@
 	if (up_flag)
 		return;
 
-	diacr = (diacr ? handle_diacr(value) : value);
+	diacr = (diacr ? (handle_diacr(value) & 0xFF) : value);
 }
 
 
 /*
  * We have a combining character DIACR here, followed by the character CH.
- * If the combination occurs in the table, return the corresponding value.
+ * If the combination occurs in the table, return the corresponding UCS2 value.
  * Otherwise, if CH is a space or equals DIACR, return DIACR.
  * Otherwise, conclude that DIACR was not combining after all,
  * queue it and return CH.
  */
-unsigned char handle_diacr(unsigned char ch)
+ushort handle_diacr(unsigned char ch)
 {
 	int d = diacr;
 	int i;
diff -Nurd linux.orig/include/linux/kd.h linux/include/linux/kd.h
--- linux.orig/include/linux/kd.h	Sat Jun 24 06:31:24 2000
+++ linux/include/linux/kd.h	Fri Sep 21 17:52:54 2001
@@ -115,7 +115,8 @@
 #define KDSKBSENT	0x4B49	/* sets one function key string entry */
 
 struct kbdiacr {
-        unsigned char diacr, base, result;
+        unsigned char diacr, base;
+        unsigned short int result; /* holds UCS2 value */
 };
 struct kbdiacrs {
         unsigned int kb_cnt;    /* number of entries in following array */


(c) AbcLinuxu s.r.o.   Grafika: megadesign