Opened 15 years ago

Last modified 6 years ago

#129 reopened Fehler/Defekt

neo in swing (java), kein Mod4

Reported by: rggjan@… Owned by: Erik Streb del Toro
Priority: normal Milestone: Neo Version 2.0
Component: Treiber: Linux – Xkbmap Version: 2.0 Final
Keywords: netbeans java Mod5 intellij Cc:

Description

Hallo zusammen!

  • Ich benutze neo unter Linux, mit der "sudo cp linux/X/de /usr/share/X11/xkb/symbols/de" Methode.

Nun ist es ja so, dass man mit der Taste rechts von der Leertaste eine Mod5 Taste hat, mit der man zum Beispiel die Tasten s, d, f und e zu Pfeiltasten umfunktionieren kann. Das ist sehr praktisch, vor allem zum navigieren in Texten. Nun habe ich aber festgestellt, dass das in netbeans mit der jvm von sun nicht zu funktionieren scheint, alles andere aber ohne Probleme funktioniert.

Weiss da vielleicht jemand, was das Problem sein könnte? Wenn ich "Alt Gr" + d drücke, um z. Bsp. eine Zeile nach unten zu navigieren, passiert einfach gar nichts...

Hat vielleicht sonst noch jemand dasselbe Problem? Oder klappt es vielleicht bei jemandem?

Danke schonmal vorab, Jan Rüegg

Change History (53)

comment:1 by knittl <knittl89+neowiki@…>, 15 years ago

nur für's protokoll, damit sich das nicht falsch einbürgert – weil ich es doch sehr oft sehe – die mods und dazugehörige navigationsebene sind mod4 und ebene4, nicht fünf. ebene 5 ist die ebene mit den kleinen griechischen buchstaben und mod5 ist shift+mod3, also zwei mods gemeinsam gedrückt.

comment:2 by Erik Streb del Toro, 15 years ago

Owner: set to Erik Streb del Toro

Dieser Fehler klingt ähnlich wie Ticket #74 und könnte mit r1803 behoben sein. Bitte ausprobieren und berichten.

comment:3 by Jan Rüegg <rggjan@…>, 15 years ago

Vielen Dank für den Hinweis. Ich habe Nun die r1084 ausprobiert und wie immer ein "sudo cp linux/X/de /usr/share/X11/xkb/symbols/de" gemacht und neugestartet, das hat das Problem jedoch nicht behoben.

Wenn ich irgendwie sonst noch weiterhelfen kann, stehe ich gerne zur Verfügung...

-- Jan Rüegg

comment:4 by anonymous, 15 years ago

Summary: neo in java (netbeans), kein Mod5?neo in java (netbeans), kein Mod4

Ich habe das ganze gerade noch etwas weiter eingegrenzt:

-> Es funktioniert weder mit der offiziellen jre noch mit OpenJDK -> Es funktioniert weder mit xmodmap noch mit der "Xserver" - Methode -> Die normalen Pfeiltasten der Tastatur hingegen funktionieren ohne Probleme in Java

-- Jan Rüegg

comment:5 by stephan, 15 years ago

Es scheint nicht generell an Java zu liegen. Eclipse z.B. funktioniert bei mir mit der xkbmap einwandfrei.

comment:6 by rggjan, 15 years ago

Summary: neo in java (netbeans), kein Mod4neo in netbeans, kein Mod4

Hmm... dann muss es wohl doch an netbeans liegen... seltsam.

comment:7 by rggjan, 15 years ago

Ich habe gerade herausgefunden, dass es an SWING liegen muss...

Man sieht das Problem schön, wenn man es mit http://editor.netbeans.org/doc/KeyboardIssues/JEP.java ausprobiert. (javac JEP.java && java JEP)

comment:8 by rggjan@…, 15 years ago

Summary: neo in netbeans, kein Mod4neo in swing (java), kein Mod4

comment:9 by anonymous, 15 years ago

Resolution: duplicate
Status: newclosed

Den FEhler haben wir schon im Ticket #104

comment:10 by stephan, 15 years ago

Resolution: duplicate
Status: closedreopened

In #104 geht es ursprünglich um den Windows-Treiber.

Ich würde das Ticket also nicht als duplicate, sondern wenn, dann als wontfix oder invalid schließen. Außerdem sollte es im Wiki erwähnt werden.

Wenn das Windows-Treiber-Problem in #104 behoben worden ist, kann es auch geschlossen werden.

comment:11 by anonymous, 15 years ago

Resolution: invalid
Status: reopenedclosed

comment:12 by Dennis Heidsiek, 14 years ago

Resolution: invalid
Status: closedreopened

Unter Linux ist dieses Problem anscheinend noch vorhanden, also sollte auch dieses Ticket offen bleiben.

Ich selbst nutze leider (noch) kein Linux, aber kann man anhand der JEP.java nicht den Fehler soweit eingrenzen bzw. die Ursache feststellen, dass wir einen brauchbaren Fehlerbericht für das OpenJDK-Projekt schreiben können?

PS: In Ticket #104 wird wie bereits gesagt ein sehr ähnliches, aber eben /Windows/-spezifische Problem behandelt.

comment:13 by wettstein509@…, 14 years ago

Nach meiner Beobachtung werden in netbeans Steuerzeichen nur dann behandelt, wenn sie auf dem ersten Level der ersten Gruppe liegen. Das bedeutet praktisch, dass man diesen netbeans-Bug mit einer anderen Zuordnung zwischen Neos Ebenen, XKB-Levels und X-Modifikatoren nicht umgehen kann, und auch unter Einbeziehen von Gruppenumschaltung bestenfalls eine hässliche Teillösung denkbar ist.

Man kann aber mit Redirect-Actions zum Ziel kommen: Mit Redirect-Actions lügt man Anwendungen bei Eingabe eines Ebene4-Steuerzeichens vor, dass die entsprechende physische Steuertaste gedrückt worden wäre, und die hat nur ein Level auf dem das gewünschte Steuerzeichen liegt. Der monolithische XKB-Treiber (http://wettstae.home.solnet.ch/neo.sh.gz) geht diesen Weg, und für netbeans funktioniert das wie gewünscht.

comment:14 by hundenapf , 14 years ago

Ich verwende das Java-Programm OmegaT unter Ubuntu 9.10 und habe durch Suche dies Problem hier gefunden, das scheinbar identisch ist. In Mod4 geht normalerweise alles, außer im besagten Programm OmegaT, dort gehen die Zahlen von Mod4 aber nicht die Pfeiltasten etc. Leider habe ich keine Lösung dafür gefunden, gibt es eine ?

Danke und Grüße an die stets hilfsbereite NEO-Community :)

comment:15 by anonymous, 14 years ago

Das Problem besteht auch in IntelliJ IDEA (reproduziert in Version 9) und Aqua Data Studio (reproduziert in Version 6.5). In eclipse tritt das Problem wahrscheinlich nicht auf, da es SWT als GUI Bibliothek benutzt. Es scheint also ein reines swing Problem zu sein (IntelliJ und Aqua Data Studio sehen so aus, als würden beide swing benutzen)

comment:16 by fjacob@…, 13 years ago

Bin gerade auf das gleiche Problem gestoßen. Wenn ich mir mit dem oben genannten script eine xkb Datei bauen lasse, dann kommt erst gar nichts und dann stürzt X11 mit diesen Nachrichten und ein paar Speicheradressen ab und startet sich neu:

Valuators reported for non-valuator device "Logitech USB Multimedia Keyboard". Ignoring event.

Valuators reported for non-valuator device "Virtual core keyboard". Ignoring event.

Fatal server error: Caught signal 11 (Segmentation fault). Server aborting

habe auch versucht, die redirect Anweisungen einzeln zu schreiben, aber da habe ich wohl zu wenig Ahnung davon.

Vielleicht ein Hinweis: Wenn man in Netbeans unter Keymaps nach shortcuts sucht und Mod4 drück, erscheint da UNDEFINED. Vielleicht ist das mit Swing ein ähnliches Problem wie früher in xterm, das also als Taste UNDEFINED+Left ankommt, was nicht gleich ist mit Left. Finde die Mailingliste aber gerade nicht, wo ich das gelesen habe.

Hat denn jetzt eigentlich jemand eine Lösung dafür bzw. weiß, wie man wettstein509@… Lösung anwendet?

Vielleicht könnte man auch die Entwickler von jVi fragen, das ist ein Netbeans Plugin für vi-ähnliche Steuerung. Die könnten ja vielleicht das Mod4 links abfangen und als normales Links umsetzen. So wäre es dann wenigstens in Netbeans gelöst.

comment:17 by anonymous, 13 years ago

Da ich IntelliJ unter Linux benutze ist der bug besonders ärgerlich für mich. Ich hab also mal ein wenig tiefer gegraben und mir eine kleine Testapp in JAVA geschrieben. Das Problem liegt nicht an Swing sondern an AWT (das ist die ältere JAVA GUI lib die auf der Swing aufbaut). Swing „erbt” sozusagen das Problem von AWT. Das Problem ist das die Klasse, die X-Window Events für AWT „übersetzt“ (sun.awt.X11.XKeysym, Methode static Keysym2JavaKeycode getJavaKeycode( XKeyEvent ev ) ) den event falsch in ein "keysym" übersetzt (sagt das den X11 Experten vll mehr?). Im Code von Sun ist auch ein komischer Kommentar, der vll. hilfreich ist:

we only need primary-layer keysym to derive a java keycode.

Da ich nicht weiß, ob es jetzt wirklich ein Bug in AWT ist und (leider) bezweifle, dass sich da einer drum kümmern würde, wenn man ihn bei Sun/Oracle meldet, habe ich einen kleinen, sehr dreckigen workaround gebaut, mit dem man Programme wie IntelliJ und Aqua Data Studio trotzdem nutzen können sollte. Die Beschreibung des hacks findet ihr hier:

http://henkelmann.eu/2010/11/20/neo2_java_swing_awt_hack

Kurzzusammenfassung: man baut ein if in die oben erwähnte Methode ein, das bei Ebene-4-Events einige der Tasten auf die keysyms für links/rechts etc. ummappt. Der Java code der das macht ist folgender:

insert this after the normal keysym mapping in getJavaKeycode: if ((ev.get_state() & 0x20) != 0 && neo 2 layer 4 keypress

neo2level4Hacks.containsKey(keysym))it is one of the keys we want to remap

{

keysym = neo2level4Hacks.get(keysym); System.out.println("Applied Neo2 hack, new keysym: 0x" + Long.toHexString(keysym));

}

Die map sieht so aus:

add somewhere in the body of the XKeysym class static final Hashtable<Long, Long> neo2level4Hacks = new Hashtable<Long,Long>(16); static {

neo2level4Hacks.put(XKeySymConstants.XK_i, XKeySymConstants.XK_Left); neo2level4Hacks.put(XKeySymConstants.XK_e, XKeySymConstants.XK_Right); neo2level4Hacks.put(XKeySymConstants.XK_l, XKeySymConstants.XK_Up); neo2level4Hacks.put(XKeySymConstants.XK_a, XKeySymConstants.XK_Down); neo2level4Hacks.put(XKeySymConstants.XK_v, XKeySymConstants.XK_BackSpace); neo2level4Hacks.put(XKeySymConstants.XK_c, XKeySymConstants.XK_Delete); neo2level4Hacks.put(XKeySymConstants.XK_u, XKeySymConstants.XK_Home); neo2level4Hacks.put(XKeySymConstants.XK_o, XKeySymConstants.XK_End); neo2level4Hacks.put(XKeySymConstants.XK_p, XKeySymConstants.XK_Return); neo2level4Hacks.put(XKeySymConstants.XK_odiaeresis, XKeySymConstants.XK_Tab);

}

Auf der oben erwähnten Seite findet Ihr einen Link auf ein fertig kompiliertes jar, dass den modifizierten code enthält. Den source findet ihr dort auch.

Man muss dann die modifizierte Klasse mit -Xbootclasspath/p vor die echte Klasse laden. Klappt bei mir unter OpenJDK 6 und dem Sun JDK 6. Z.b. so:

java -Xbootclasspath/p:/your/path/to/the/jar/neo2-awt-hack-1.0-SNAPSHOT.jar -cp foo.jar com.example.Foo

Bei IntelliJ müsst Ihr den parameter in die Datei bin/idea.vmoptions eintragen.

Ich hoffe das hilft Euch, ich bin froh, endlich IntelliJ „richtig“ benutzen zu können.

comment:18 by Fabian Streitel, 13 years ago

Keywords: intellij added

OK, ich hab diesen Hack probiert, leider funktioniert er nicht: Der entsprechende AWT Code wird bei mir nicht ausgeführt. Deshalb hab ich das ganze mal auf Swing-Ebene nachgebaut, indem ich den selben Trick in der javax.swing.events.KeyEvent Klasse angewandt habe. Funktioniert soweit recht zuverlässig bei mir.

Der Hack findet sich auf GitHub: http://github.com/karottenreibe/Neo2SwingHack

comment:19 by Christoph Henkelmann, 13 years ago

Fabian hat mich drauf aufmerksam gemacht, dass der vorher beschriebene AWT-Hack nur mit dem XToolkit von AWT funktioniert. Fabians Swing Hack hingegen funktioniert nur mit dem MToolkit. Wollt Ihr den AWT Hack benutzen müsst daher (eventuell) noch folgende Umgebungsvariable setzen:

export AWT_TOOLKIT=XToolkit

Damit zwingt Ihr AWT das XToolkit zu nutzen. Ab JAVA 1.5 sollte unter Linux allerdings das XToolkit standardmäßig verwendet werden. Unter Solaris ist wohl noch das MToolkit Standard.

Fabian hat den Hack auch noch um einige fehlende Zeichen für Ebene 4 erweitert, die neue Version findet Ihr nun unter:

http://maven.henkelmann.eu/eu/henkelmann/neo2-awt-hack/0.2/neo2-awt-hack-0.2.jar

comment:20 by anonymous, 13 years ago

Ich habe beide hacks probiert, allerdings hat keiner der beiden funktioniert :(

Beim ersten hack funktionierte die Tastatur in IntelliJ überhaupt nicht mehr, mit dem Swing hack von Christoph bekomme ich beim Starten von IntelliJ diesen Fehler:

Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode)
[ 34133] ERROR - pplication.impl.LaterInvocator - java.awt.event.KeyEvent.getExtendedKeyCodeForChar(I)I
java.lang.NoSuchMethodError: java.awt.event.KeyEvent.getExtendedKeyCodeForChar(I)I
at ...
[ 34154] ERROR - pplication.impl.LaterInvocator - IntelliJ IDEA 10.5.2
[ 34154] ERROR - pplication.impl.LaterInvocator - JDK: 1.7.0
[ 34168] ERROR - pplication.impl.LaterInvocator - VM: Java HotSpot(TM) 64-Bit Server VM
[ 34169] ERROR - pplication.impl.LaterInvocator - Vendor: Oracle Corporation
[ 34169] ERROR - pplication.impl.LaterInvocator - OS: Linux

Hat jemand Ideen wie ich das mit meinem Java/dem JDK 7 zum laufen bringen kann?

comment:21 by anonymous, 13 years ago

Ich hab den Swing hack auf Basis von 1.6 gemacht. Da scheint sich mit 1.7 zuviel geändert zu haben. Daher der NoSuchMethodError - mein hack ruft eine Funktion auf, die es in 1.7 nicht mehr gibt. Wird allerdings eine Woche dauern, bis ich dazu Zeit finde.

comment:22 by anonymous, 13 years ago

Ich habe beide hacks probiert, allerdings hat keiner der beiden funktioniert :(

Für X-Server ab Version 1.9.0.901 (oder vor 1.7) kannst du dein Glück mit dem monolithischen Treiber probieren (http://wettstae.home.solnet.ch/neo.sh.gz). Mit der Option -n sollte der Treiber auch mit anderen Versionen funktionieren, allerdings ist für -n die Ebene 4 nur teilweise und die Ebene 6 garnicht implementiert (wäre aber im Prinzip machbar).

comment:23 by Erik Streb del Toro, 12 years ago

Diese Hacks (insbesondere der von Christoph) funktioniert nur mit xkbmap. Wenn man die Neo-Xmodmap verwendet ist der Mod4-Keystate nicht 0x20, sondern 0x80. Die geänderte Variante ist im Wiki verlinkt: http://wiki.neo-layout.org/wiki/JavaMod4Fix Vielleicht kann Christoph das auch noch schön in seine Version einbauen. Option übergeben oder so?

comment:24 by anonymous, 12 years ago

FYI: Ich verwende die regulären Debian-Pakete für Neo2, was bis auf dieses Problem wunderbar funktioniert(setxkbmap -rules evdev -model pc105 -layout de -variant neo -option ""). Leider sind mir die ganzen Hintergründe um keycodes, maps etc. unbekannt und die hier erwähnten Lösungen klingen fürchterlich kompliziert. Es wäre fantastisch wenn das Problem irgendwie an der Wurzel(Treiber in Debian) behoben werden könnte. Gibt es dazu vlt. einen Patch gegen ein Debian-Paket?

in reply to:  24 comment:25 by anonymous, 12 years ago

Replying to anonymous:

FYI: Ich verwende die regulären Debian-Pakete für Neo2, was bis auf dieses Problem wunderbar funktioniert(setxkbmap -rules evdev -model pc105 -layout de -variant neo -option ""). Leider sind mir die ganzen Hintergründe um keycodes, maps etc. unbekannt und die hier erwähnten Lösungen klingen fürchterlich kompliziert. Es wäre fantastisch wenn das Problem irgendwie an der Wurzel(Treiber in Debian) behoben werden könnte. Gibt es dazu vlt. einen Patch gegen ein Debian-Paket?

Dann müsste Java verändert werden. Die Lösungen sind gar nicht kompliziert. Im Wiki sind sie sehr kurz und gut verständlich beschrieben. http://wiki.neo-layout.org/wiki/JavaMod4Fix Noch kürzer: Die Datei dort herunter laden und dem Java-Programm als Option übergeben. Fertig. Falls trotzdem was unklar ist, bitte im Chat melden. Dazu auf die Hauptseite gehen http://neo-layout.org/ und dort auf Neo-Chat.

comment:26 by anonymous, 12 years ago

die wiki:seite klingt gut. Aber...

Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/lang/Object

da müssen wohl noch ein paar weitere Pfade in Xbootclasspath eingetragen werden... das sagen die properties: /usr/lib/jvm/java-6-openjdk-amd64/jre... nur, das klappt leider nicht

in reply to:  26 comment:27 by Erik Streb del Toro, 12 years ago

Replying to anonymous:

die wiki:seite klingt gut. Aber...

Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/lang/Object

da müssen wohl noch ein paar weitere Pfade in Xbootclasspath eingetragen werden... das sagen die properties: /usr/lib/jvm/java-6-openjdk-amd64/jre... nur, das klappt leider nicht

Wäre schön, wenn Du das Problem im Neo-Chat oder auf der Mailingliste klären und anschließend hier die Lösung hier beschreiben könntest. Im Chat können Dir Rückfragen gestellt werden, die Du dann beantworten und gegebene Ratschläge gleich ausprobieren kannst.

comment:28 by anonymous, 12 years ago

http://wiki.neo-layout.org/wiki/JavaMod4Fix wenn man es richtig liest und korrekt umsetzt dann klappt es auch. Ich habe mich nun nochmal daran gemacht. Mein entscheidender Fehler war dass ich bei -J-Xbootclasspath/p:/path/to/hack/neo2-awt-hack-0.2.jar das /p nicht beachtet hatte. Das ist der entscheidende switch um diesen Pfad zu prependen (p) und ihn nicht vollständig zu ersetzen, was zu einem Fehler führt. Jetzt endlich auch in Netbeans Ebene 4. :)

comment:29 by Erik Streb del Toro, 12 years ago

Schrecklich! Mit Java 1.7 geht es schon wieder nicht. Wenn man den neo2-awt-hack-0.2.jar dann einbindet reagiert das Javaprogramm auf keinerlei Tastatureingaben. :-(

Verwende Java in Version 1.7.0_b147-icedtea, OpenJDK Runtime Environment (fedora-2.1.fc17.1-x86_64) OpenJDK 64-Bit Server VM (build 22.0-b10, mixed mode).

in reply to:  29 comment:30 by anonymous, 12 years ago

Resolution: fixed
Status: reopenedclosed

Replying to erik:

Schrecklich! Mit Java 1.7 geht es schon wieder nicht. Wenn man den neo2-awt-hack-0.2.jar dann einbindet reagiert das Javaprogramm auf keinerlei Tastatureingaben. :-(

Verwende Java in Version 1.7.0_b147-icedtea, OpenJDK Runtime Environment (fedora-2.1.fc17.1-x86_64) OpenJDK 64-Bit Server VM (build 22.0-b10, mixed mode).

Haaalt, Kommando zurück. Liegt wohl an was ganz anderem (am Javaprogramm „JOSM“ in Verbindung mit Java 1.7?).

Da dieser Fehler mittels unseres Patches behoben ist und wir nichts an Java ändern können, werde ich diesen Fehler schließen (fixed, denn „wir“ haben den Patch zum korrigieren des Fehlers erstellt).

comment:31 by Erik Streb del Toro, 12 years ago

Resolution: fixed
Status: closedreopened

Doch, es ist ein Fehler vorhanden. Und zwar äußert er sich so, dass ich diese Fehlermeldung bekomme, wenn ich eine Taste drücke:

Mai 11, 2012 4:22:32 PM sun.awt.X11.XToolkit processException
WARNING: Exception on Toolkit thread
java.lang.NoSuchMethodError: sun.awt.X11.XKeysym.xkeycode2primary_keysym(Lsun/awt/X11/XKeyEvent;)J
	at sun.awt.X11.XWindow.xkeycodeToPrimaryKeysym(XWindow.java:1065)
	at sun.awt.X11.XWindow.handleKeyRelease(XWindow.java:1226)
	at sun.awt.X11.XWindow.handleKeyRelease(XWindow.java:1187)
	at sun.awt.X11.XFocusProxyWindow.handleKeyRelease(XFocusProxyWindow.java:85)
	at sun.awt.X11.XBaseWindow.dispatchEvent(XBaseWindow.java:1102)
	at sun.awt.X11.XFocusProxyWindow.dispatchEvent(XFocusProxyWindow.java:73)
	at sun.awt.X11.XBaseWindow.dispatchToWindow(XBaseWindow.java:1066)
	at sun.awt.X11.XToolkit.dispatchEvent(XToolkit.java:565)
	at sun.awt.X11.XToolkit.run(XToolkit.java:674)
	at sun.awt.X11.XToolkit.run(XToolkit.java:595)
	at java.lang.Thread.run(Thread.java:722)

Scheint so, als wäre in Version 1.7 von Java eine Methode entfernt oder umbenannt worden.

Auf meinem System gibt es unter Xmonad noch einen anderen Fehler, dass ich auch ohne unseren Neo-Hack nicht tippen kann. Unter Gnome3 geht es aber. Daher meine Verwirrung.

comment:32 by Erik Streb del Toro, 12 years ago

Resolution: fixed
Status: reopenedclosed

Oh man, was für eine Erkenntnis: Java in Version 1.7 braucht den Hack einfach gar nicht mehr. Es funktioniert! Ohne Hack, ohne sonst was. Mein Fehler tritt nur auf, wenn ich den Hack verwende, sonst läuft Ebene 4 fast einwandfrei.

Außer: Tab! Weder das Tab auf ö noch das auf 7 der Ebene 4 funktionieren in Java-AWT-Programmen. Das kann man aber verschmerzen. Seltsam ist es trotzdem.

Also: Fixed! (nicht von uns, sondern von Oracle oder den IcedTea-Leuten)

comment:33 by Qwlouse, 11 years ago

Hey, ich habe den gleichen Fehler mit Java 7. Sowohl mit OpenJDK als auch mit Oracle. Die Hacks funktionieren nicht für Java 7. Irgendwelche Ideen?

java version "1.7.0_07" OpenJDK Runtime Environment (IcedTea7 2.3.2) (7u7-2.3.2a-0ubuntu0.12.04.1) OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)

java version "1.7.0_03" Java(TM) SE Runtime Environment (build 1.7.0_03-b04) Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode)

comment:34 by jakob, 11 years ago

Hey, bist du sicher? Wie erik weiter oben festgestellt hat, funktionieren Mod4 keys unter Java 1.7 auch ohne Hack. Beispielprogramme: jabref & jameica

java version "1.7.0_09"
OpenJDK Runtime Environment (IcedTea7 2.3.3) (ArchLinux build 7.u9_2.3.3-1-x86_64)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)

comment:35 by Qwlouse, 11 years ago

Ja, leider bin ich sicher. Zuerst habe ich PyCharm und jetzt auch Jabref ausprobiert. Wenn ich auf OpenJDK 1.6 umstelle und den hack verwende geht es. Vielleicht nehme ich das erst mal als workaround...

comment:36 by max, 11 years ago

Resolution: fixed
Status: closedreopened

Bei mir funktioniert es auch leider nicht (ebenfalls mit openjdk7 und oracle ausprobiert). Einige Programme, die dazu gehören sind zB. vym und Intellij IDEA. Währed man innerhab einer Textbox (oder ähnlichem) schreibt, funktioniert die 4. Ebene perfekt, Aber in anderen Bereichen geht es wieder nicht. Leider gehört dazu auch der Editor von IDEA. Der Hack von http://henkelmann.eu/2010/11/20/neo2_java_swing_awt_hack hat nur Exceptions geworfen und ich habe dann mir den Quellcode von openjdk7 gezogen und damit den hack nachprogrammiert. Und es läuft ohne Exceptions, aber es ändert nichts an der Funktion, sogar wenn ich prints da rein baue, werden diese nicht ausgegeben.

comment:37 by anonymous, 11 years ago

Vielleicht will jemand mal folgendes ausprobieren:

  • Die Belegung in ein File test.xkb schreiben:
    xkbcomp :0 test.xkb
    
  • test.xkb editeren, und zwar den Eintrag für key <AD02> durch Ergänzen der actions-Zeile ändern in:
    key <AD02> {
      type= "EIGHT_LEVEL_SEMIALPHABETIC",
      symbols[Group1]= [               u,               U,      underscore,        NoSymbol,       BackSpace,       BackSpace,      includedin,        NoSymbol ],
      actions[Group1]= [ NoAction(), NoAction(), NoAction(), RedirectKey(key=<BKSP>,clearMods= Lock+Mod2+Mod3+Mod5), RedirectKey(key=<BKSP>,clearMods= Lock+Mod2+Mod3+Mod5), NoAction(),NoAction(),NoAction() ]
    };
    
    (das Komma am Ende der symbols-Zeile nicht vergessen).
  • Die geänderte Belegung auf den Server laden:
    xkbcomp test.xkb :0
    
  • Nachprüfen, ob jetzt das Ebene4-Backspace funktioniert.

in reply to:  37 comment:38 by max, 11 years ago

Replying to anonymous:

Vielleicht will jemand mal folgendes ausprobieren: ...

Falls ich "xkbcomp test.xkb :0" aufrufe, funktioniert die 4. Ebene im gesamtem System nicht mehr, auch wenn ich an test.xkb nichts ändere. Restart oder setxkbmap stellt die normalfunktion wieder her.

Noch mehr Infos: Eclipse zB. funktioniert einwandfrei (also auch wieder swing-/awtproblem). Ich denke mal, dass Anwendungen dann Probleme haben, wenn sie das KeyEvent abfragen. Z.B. die Demo von http://www.java2s.com/Code/Java/Event/KeyEventDemo.htm : während die 4. Ebene beim schreiben funktioniert (also auch das Backspace löscht Zeichen), aber bei dem KeyEvent wird unknown für die Mod4-Taste angezeigt und es steht dann 'V' in der Beschreibung. Falls ich java6 mit hack benutze, steht beim KeyEvent backspace in der Beschreibung und auch die IDEA lässt sich bedienen.

comment:39 by anonymous, 11 years ago

Ich habe dasselbe Problem. 4te Ebene funktioniert in IntelliJ auch mit Java 7 nicht. Wäre prima wenn jemand dafür eine Lösung finden würde :)

comment:40 by anonymous, 11 years ago

Falls ich "xkbcomp test.xkb :0" aufrufe, funktioniert die 4. Ebene im gesamtem System nicht mehr, auch wenn ich an test.xkb nichts ändere.

Es würde mich schon interessieren, was da los ist, denn das sollte eigentlich keine garkeine Auswirkung auf die Belegung haben. Da hast du Pech gehabt. Ich habe KeyEventDemo.java ausprobiert, und die actions funktionieren wie gewünscht. Wer Mut hat, kann auch im Treiber direkt eingreifen. An einfachsten

    interpret BackSpace {
        repeat= yes;
        action= RedirectKey(key=<BKSP>,clearMods= Lock+Mod2+Mod3+Mod5);
    };

in /usr/share/X11/xkb/compat/misc einfügen, setxkbmap ausführen oder X neu starten.

in reply to:  40 comment:41 by max, 11 years ago

Replying to anonymous:

Wer Mut hat, kann auch im Treiber direkt eingreifen...

Hab das gerade ausprobiert, hat für Backspace funktioniert (konnte es auch in Intellij benutzen, natürlich funktionierte der Rest immer noch nicht). Es fühlt sich zwar seltsam an, wenn man es länger drückt (scheint langsamer als das normale Backspace zu sein, aber es läuft). Werde mal heute den Rest umschreiben, hast du auch eine Lösung für das langsam sein beim Repeaten?

comment:42 by anonymous, 11 years ago

Bzw. Das Langsamsein ist wahrscheinlich deswegen, weil Backspace nicht mehr wiederholt wird (Während das Mod4-BKSP langsam wiederholt wird, wird das echte nicht mehr wiederholt), hab auch mit "repeat= True;" ausprobiert, aber immer noch kein Repeat. Hab in den Output von xkbcomp geguckt und da ist ein "interpret.repeat= False;" vor dem Interpret-Block, was mir suspekt erscheint. Ist das Schuld daran? Wenn ja, wo kommt das her?, (xkbcomp funktioniert bei mir ja nicht wirklich, sonst hätte ich das ausprobiert, es zu ändern)

comment:43 by anonymous, 11 years ago

Das Langsamsein ist wahrscheinlich deswegen, weil Backspace nicht mehr wiederholt wird (Während das Mod4-BKSP langsam wiederholt wird, wird das echte nicht mehr wiederholt), hab auch mit "repeat= True;" ausprobiert, aber immer noch kein Repeat.

Das langsamerwerden ist ein Bug im X-Server. Ich werde einen Patch dafür einreichen, aber das braucht noch etwas, und wird wohl bestenfalls für Version 1.15 übernommen. Bis dahin kann man die repeat-Rate hochdrehen.

Dass die echte Backspace-Taste nicht mehr wiederholt sollte eigentlich von dem repeat= yes; verhindert werden.

Hab in den Output von xkbcomp geguckt und da ist ein "interpret.repeat= False;" vor dem Interpret-Block, was mir suspekt erscheint. Ist das Schuld daran?

Das Zeug vor den Blöcken ist eine Art default, was in den Blöcken steht sollte jedoch meines Wissens vorgehen. Du kannst natürlich damit experimentieren, aber wenn du dabei das repeat der Shift-Tasten versehentlich abschaltest wird es unangenehm.

Statt am repeat rumzudrehen kann man auch in /usr/share/X11/xkb/compat/misc statt der Variante mit BackSpace

interpret 0x1100001 {
        repeat= yes;
        action= RedirectKey(key=<BKSP>,clearMods= Lock+Mod2+Mod3+Mod5);
};

verwenden und in /usr/share/X11/xkb/symbols/de das BackSpace in Ebene 4 und der Pseudo-Ebene durch 0x1100001 ersetzen. 0x1100001 ist eine keysym einem privaten Unicode-Bereich. Für die anderen Steuerzeichen muss man natürlich andere Werte nehmen (0x1100002 usw). Der Umweg über die private Unicode-keysym macht zwar etwas mehr Arbeit, aber dafür wird die Orginal-Taste nicht beeinflusst, und man umgeht nebenbei noch die Probleme, die mit einigen Xt-Applikationen auftreten.

comment:44 by max, 11 years ago

Danke soweit, für die Anderen, hier mal, wie ich es bei mir gemacht habe:

    interpret 0x1100001 {
        repeat= True;
        action= RedirectKey(key=<BKSP>,clearMods= Lock+Mod2+Mod3+Mod5);
    };

    interpret 0x1100002 {
        repeat= True;
        action= RedirectKey(key=<UP>,clearMods= Lokc+Mod2+Mod3+Mod5);
    };

    interpret 0x1100003 {
        repeat= True;
        action= RedirectKey(key=<DOWN>,clearMods= Lokc+Mod2+Mod3+Mod5);
    };

    interpret 0x1100004 {
        repeat= True;
        action= RedirectKey(key=<LEFT>,clearMods= Lokc+Mod2+Mod3+Mod5);
    };

    interpret 0x1100005 {
        repeat= True;
        action= RedirectKey(key=<RGHT>,clearMods= Lokc+Mod2+Mod3+Mod5);
    };

    interpret 0x1100006 {
        repeat= True;
        action= RedirectKey(key=<PGUP>,clearMods= Lokc+Mod2+Mod3+Mod5);
    };

    interpret 0x1100007 {
        repeat= True;
        action= RedirectKey(key=<PGDN>,clearMods= Lokc+Mod2+Mod3+Mod5);
    };

    interpret 0x1100008 {
        repeat= True;
        action= RedirectKey(key=<DELE>,clearMods= Lokc+Mod2+Mod3+Mod5);
    };

    interpret 0x1100009 {
        repeat= True;
        action= RedirectKey(key=<END>,clearMods= Lokc+Mod2+Mod3+Mod5);
    };

    interpret 0x110000A {
        repeat= True;
        action= RedirectKey(key=<HOME>,clearMods= Lokc+Mod2+Mod3+Mod5);
    };

    interpret 0x110000B {
        repeat= True;
        action= RedirectKey(key=<RTRN>,clearMods= Lokc+Mod2+Mod3+Mod5);
    };

    interpret 0x110000C {
        repeat= True;
        action= RedirectKey(key=<ESC>,clearMods= Lokc+Mod2+Mod3+Mod5);
    };

    interpret 0x110000D {
        repeat= True;
        action= RedirectKey(key=<TAB>,clearMods= Lokc+Mod2+Mod3+Mod5);
    };

    interpret 0x110000E {
        repeat= True;
        action= RedirectKey(key=<INS>,clearMods= Lokc+Mod2+Mod3+Mod5);
    };

    interpret 0x110000F {
        repeat= True;
        action= RedirectKey(key=<UNDO>,clearMods= Lokc+Mod2+Mod3+Mod5);
    };

    interpret 0x1100010 {
        repeat= True;
        action= RedirectKey(key=<AGAI>,clearMods= Lokc+Mod2+Mod3+Mod5);
    };

in /usr/share/X11/xkb/compat/misc hinzufügen, und in /usr/share/X11/xkb/symbols/de die Sachen mit den entsprechenden Codes von unten ersetzen (ich habe keine Ahnung, ob man auf jedem Rechner die Zeilen einfach so übernehmen darf)

key <AD01> { [ x,                       X,                       ellipsis,                Greek_xi,                0x1100006,               0x1100006,               Greek_XI,                NoSymbol                 ] };
key <AD02> { [ v,                       V,                       underscore,              NoSymbol,                0x1100001,               0x1100001,               radical,                 NoSymbol                 ] };
key <AD03> { [ l,                       L,                       bracketleft,             Greek_lambda,            0x1100002,               0x1100002,               Greek_LAMBDA,            NoSymbol                 ] };
key <AD04> { [ c,                       C,                       bracketright,            Greek_chi,               0x1100008,               0x1100008,               U2102,                   NoSymbol                 ] };
key <AD05> { [ w,                       W,                       asciicircum,             Greek_omega,             0x1100007,               0x1100007,               Greek_OMEGA,             NoSymbol                 ] };
key <AC01> { [ u,                       U,                       backslash,               NoSymbol,                0x110000A,               0x110000A,               includedin,              NoSymbol                 ] };
key <AC02> { [ i,                       I,                       slash,                   Greek_iota,              0x1100004,               0x1100004,               integral,                NoSymbol                 ] };
key <AC03> { [ a,                       A,                       braceleft,               Greek_alpha,             0x1100003,               0x1100003,               U2200,                   NoSymbol                 ] };
key <AC04> { [ e,                       E,                       braceright,              Greek_epsilon,           0x1100005,               0x1100005,               U2203,                   NoSymbol                 ] };
key <AC05> { [ o,                       O,                       asterisk,                Greek_omicron,           0x1100009,               0x1100009,               elementof,               NoSymbol                 ] };
key <AB01> { [ udiaeresis,              Udiaeresis,              numbersign,              NoSymbol,                0x110000C,               0x110000C,               union,                   NoSymbol                 ] };
key <AB02> { [ odiaeresis,              Odiaeresis,              dollar,                  U03F5,                   0x110000D,               0x110000D,               intersection,            NoSymbol                 ] };
key <AB03> { [ adiaeresis,              Adiaeresis,              bar,                     Greek_eta,               0x110000E,               0x110000E,               U2135,                   NoSymbol                 ] };
key <AB04> { [ p,                       P,                       asciitilde,              Greek_pi,                0x110000B,               0x110000B,               Greek_PI,                NoSymbol                 ] };
key <AB05> { [ z,                       Z,                       grave,                   Greek_zeta,              0x110000F,               0x1100010,               U2124,                   NoSymbol                 ] };

Falls die Tasten langsam wiederholt werden, z.B.

xset r rate 300 100

ausführen. Danke für die Anleitung geht natürlich an den Herrn über mir

in reply to:  17 comment:45 by Phylu, 11 years ago

Replying to anonymous:

Da ich [...] (leider) bezweifle, dass sich da einer drum kümmern würde, wenn man ihn bei Sun/Oracle meldet

Hat das inzwischen jemand versucht? Inzwischen gibt es mit dem Android Studio einen weiteren prominenten Vertreter für den Bug. Da wäre eine Lösung wirklich schön.

comment:46 by anonymous, 11 years ago

Version: 2.0 BETA2.0 Final

Ich habe das gleiche Problem in IntelliJ 12.1.4. Java ist in Version 1.7.0_40 installiert.

comment:47 by fusselwurm@…, 10 years ago

siehe auch #364 und IDEA Bugtracker

comment:48 by anonymous, 10 years ago

Unter Fedora 20 mit OpenJDK8 funktioniert Neo2 unter Swing (Netbeans 7.3.1, JDownloader 2, MediathekView) und SWT (Eclipse 4.?) einwandfrei.

comment:49 by anonymous, 10 years ago

Unter Arch Linux mit OpenJDK7 oder OpenJDK8 funktioniert Mod4 nicht in IntelliJ 12.1.6

comment:50 by TobiasDiez@…, 10 years ago

Ich habe ein ähnliches Problem (nicht funktionierende Pfeiltasten in Ebene 4) mit Sublime Text 3 unter Ubuntu 12 (mit xmod). Allerdings funktioniert obiger Hack mit der Java-Klasse nicht, da Sublime selber kein Java-Program ist bzw. zu sein scheint (java sublime_text resultiert in Error: Could not find or load main class). Irgendwelche Ideen wie man die Pfeiltasten unter Sublime zum Laufen bekommt?

comment:51 by sowerk@…, 9 years ago

Kurzer Hinweis zu diese Problem:

Unter Ubuntu 14.10 ist es möglich, die vierte Ebene nach wie vor durch die Verwendung von OpenJDK 6 mit dem Hack von Christoph Henkelmann zu aktivieren. In meinem Fall war es jetzt Webstorm, aber das basiert ja alles mehr oder weniger auf NetBeans. Ich habe in der webstorm.sh ganz unten den Hack eingepflegt, seit dem geht das alles prima. Nur Webstorm schimpft, dass die OpenJDK-Version eigentlich nicht unterstützt wird.

comment:52 by Erik Streb del Toro, 9 years ago

Bei mir sind alle Probleme verschwunden seitdem ich Java 1.8 verwende (OpenJDK unter Fedora Linux). Ganz ohne Hack.

Also kann dieser Bug geschlossen werden?

comment:53 by Fabian Streitel, 6 years ago

Meine aktuellen Beobachtungen in IntelliJ unter Ubuntu 17.04 mit OpenJDK 8:

  • die meisten Mod4 Tasten funktionieren in den meisten Situationen wie erwartet
  • Wenn Popups offen sind funktionieren manche Mod4-Tasten nicht

Beispiel: Alt+Enter, um das Intention Popup zu öffnen. Hier kann ich ohne den Henkelmannschen Fix die Mod4 Rechts- und Links-Pfeiltasten nicht benutzen und die Entertaste nicht zum Auswählen der Menüoptionen benutzen.

Anderes Beispiel: Shift Shift, um Search Everywhere aufzumachen. Hier kann ich nur sproadisch die Enter-Taste von Mod4 benutzen, um Einträge auszuwählen.

Mit dem Bootclasspath Jar funktionieren die genannten Tasten in meinen Experimenten aber in diesen Situationen immer korrekt.

Note: See TracTickets for help on using tickets.