Eclipse #1: KDE, Copypasta und unklickbare Buttons – eine Hassliebe


Dieser Post ist hautpsächlich eine Memo an mich selbst, damit ich in Zukunft die einzelnen Lösungen schneller finde, wenn ich mal wieder eine neue Installation vor mir habe 😀

Eclipse-Benutzer unter KDE können sich seit etwa 2008 an einem bekannten, aber immer noch nicht behobenen Bug erfreuen. Man markiert einen Auszug seines Quellcodes, drückt das allseits beliebte Kürzel Strg-C, springt in eine andere Datei und erwartet, nach einem Druck auf Strg-V seinen gewünschten Code-Auszug wieder zu erblicken. Funktioniert auch manchmal. Aber eben nur manchmal. Öfter kommt es vor, dass nur ein Teil des kopierten Textes wieder erscheint. Mal fehlt der Anfang, mal das Ende. Mal passiert beim Einfügen gar nichts. Und manchmal erscheint etwas völlig unerwartetes, das man nicht einmal vorher kopiert hat. Oder etwas vom Tag zuvor. Die Möglichkeiten sind fast endlos. Etwa jeder zweite bis fünfte Copy/Paste-Vorgang funktioniert wie man es erwartet, der Rest verblüfft immer wieder durch fast schon nicht-deterministisches Verhalten.

Nun ist die Ursache hierfür eigentlich seit über zwei Jahren bekannt – es liegt am Zusammenspiel zwischen Eclipse und Klipper, der Zwischenablage-Verwaltung von KDE. Diese bietet einerseits ein Mittel, die unterschiedlichen Copy/Paste-Protokolle von X11, KDE, Qt, GTK, usw. usf. unter einen Hut zu bringen. Aber sie bietet auch einige komfortable Features, wie beispielsweise eine durchsuchbare Historie der Zwischenablage. Es ist also möglich, etwas einzufügen, was man vor Tagen mal in die Zwischenablage kopiert hat. Wenn man nun (z.B. als Windowsbenutzer ohne große Linuxkenntnisse) nichts von diesem Tool weiß, und annimmt, dass einfach immer nur der zuletzt kopierte Text in der Zwischenablage sein kann und sonst nichts, kann man von diesem unerwarteten Eclipse-Verhalten ganz schön verwirrt sein. Ohne Hintergrundwissen über die Zusammenhänge weiß man vielleicht auch nicht direkt, wonach man überhaupt suchen soll, daher kann dieser Eintrag vielleicht dem einen oder anderen doch irgendwann mal behilflich sein. Also legen wir mal los…

Es gibt im Prinzip keine wirklich saubere Lösung, sondern nur zwei Workarounds. Vielleicht sieht das in weiteren zwei Jahren ja anders aus…

Erste Möglichkeit: Strg-C in Eclipse immer zweimal drücken. Komischerweise funktioniert der zweite Copy-Vorgang immer, egal ob der erste erfolgreich gewesen wäre oder nicht. Geht problemlos, aber ist nervig. Ständig vergisst man es doch wieder, oder man hämmert unnötig auf seiner Tastatur rum und geht damit seinen Kollegen auf die Nerven 😀

Zweiter Weg: Klipper deaktivieren. Die Probleme verschwinden sofort. Alles geht wie gewohnt. Nachteil: Man verliert auch alle Features. Sprich: Die durchsuchbare Historie gehört der Vergangenheit an. Geht problemlos, wenn man auf dieses Feature keinen Weg legt. Für den Rest der Benutzer aber auch eher unschön.

Dritte und optimale Möglichkeit: Man deaktiviert in den Klipper-Einstellungen lediglich den Punkt „leere Zwischenablage vermeiden“ (in englischer Sprache: „prevent empty clipboard“). Genau diese Einstellung ist es nämlich, die das unvorhersehbare Verhalten in Eclipse auslöst. Die Option ist standardmäßig eingeschaltet, was leider bei jedem Eclipse-Benutzer unter KDE erstmal dieses Fehlverhalten auslöst, bis er sich darum gekümmert hat…

Übrigens ist Eclipse nicht die einzige Anwendung, die hiervon betroffen ist. Azureus/Vuze ist ein weiteres Programm mit dem gleichen Problem, hier fällt es allerdings nicht wirklich auf. Bei einer IDE da schon eher, dort nervt es stündlich, wenn nicht sogar öfter.

Nun kommen wir zum nächsten Bug in der Eclipse IDE: Die unklickbaren Buttons. Man bemerkt es zum Beispiel, wenn man mit Strg-F eine Datei nach einem Muster durchsuchen will, und sich der Suchbutton nicht anklicken lässt. Er wechselt zwar den Status (man sieht also, dass er gedrückt wird), aber das GUI-Event des tatsächlichen Klicks (loslassen des Buttons) wird nicht ausgelöst. Mehrere Buttons in der IDE sind betroffen (z.B. „Finish“ beim Fertigstellen eines neuen Projektes), aber nicht alle.
Ich will hier nicht lange auf die Ursache des Problems eingehen, das würde den Rahmen sprengen, so viel wollte ich eh schon nicht schreiben. Kurz gesagt liegt es an einem geänderten Fensterverhalten ab einer gewissen GTK-Version.

Die einfache Lösung: Man startet Eclipse mit dem Parameter „GDK_NATIVE_WINDOWS=1“. Also in der Kommandozeile:
GDK_NATIVE_WINDOWS=1 eclipse

Das kann man z.B. seiner Startverknüpfung oder einem Skript hinzufügen, dann muss man in Zukunft nicht mehr dran denken.
Oder man drückt nach dem Mausklick (der den Button nur selektiert, aber nicht auslöst) die Entertaste, funktioniert ebenfalls, ist aber deutlich nerviger 😀


2 Antworten zu “Eclipse #1: KDE, Copypasta und unklickbare Buttons – eine Hassliebe”

  1. Ich mag Eclipse nicht, seitdem mir…..auch wenn es jetzt komisch klingt…folgendes passiert ist:

    Ich schreibe fröhlich an meinem Java-Projekt….
    lehne mich zurück, denke nach…..plötzlich sehe ich, wie sich auf dem Bildschirm Zeile für Zeile von selbst löscht (!!!!!!)….wie als würde ein Geist die Backspace-Taste drücken!

    Nein, ich habe nicht gesoffen (ja gut, doch, aber in dem Moment nicht!) es war wirklich so! Und es war auch keinerlei Undo-Funktion verfügbar…..

    davon mal abgesehen finde ich die GUI total überladen…

    und wenn ich nun schreibe, dass ich absoluter Visual-Studio Fan bin, werde ich wahrscheinlich sowieso gesteinigt 😀

  2. So ein Phänomen habe ich bisher noch nicht gesehen – und ich benutze Eclipse jetzt seit etwa *nachdenk* vier Jahren unter zig verschiedenen Betriebssystemen, mit den unterschiedlichsten Plugins und Sprachen (PHP, Java, C, C++, Python, JavaScript, …).

    Ich hab so ziemlich alles an nennenswerten Alternativen durchprobiert, ob IDE oder einfacher Editor, von VS über NetBeans und andere ähnliche Projekte bis hin zu VIM. Am Ende lande ich doch immer wieder bei Eclipse, weil ich das eine oder andere Feature vermisse. Überladen finde ich es überhaupt nicht, denn je länger man es nutzt, umso mehr lernt man die einzelnen Features und Vorteile zu schätzen. Gerade die Plugin-Architektur ist wunderbar gelöst, so kann man sich auf Grundlage der Eclipse-Plattform genau das zusammenstellen was man gerade braucht und den Rest ignorieren.

    Aber gesteinigt wird hier keiner 😀