TextMates Erbe

Als einigermaßen früher Anwender von TextMate war es spannend zu beobachten, wie stark moderne Texteditoren Konzepte und Formate von TextMate übernommen haben:

Espresso, Chocolat, Sublime Text, Atom, Visual Studio Code, sogar GitHub nutzen entweder TextMate Sprachgrammatiken[1] oder Varianten davon[2].

Auch Snippets finden sich in all diesen Editoren wieder, nur mit stärkeren Änderungen gegenüber dem “Original”. Und das ist sinnvoll: Wo ich in TextMate ein Shell Skript in meinem Snippet ausführen will, ist für ein Emacs Paket natürlich ein Stück Elisp sinnvoller. Aber da fangen auch die Probleme an…

Unterschiede stecken im Detail

TextMate Snippets sind überraschend umfangreich und ausdrucksstark, und Versuche der Imitation haben in der Anfangsphase oft Probleme. Meine Shell Skript Snippets[3] haben zum Beispiel frühe Versionen von Espresso verläßlich abstürzen lassen.

Atom geht mit der notwendigen Komplexität sehr einfach um: Sie wird einfach ignoriert. Es gibt keine Verschachtelung von Snippets, keine Transformation der eingefügten Werte, man kann nicht mal mehrere Tabstops direkt nebeneinander im Snippet haben. Und letzteres ist leider kein einfacher Bug, es ist ein Designfehler: Atom kann nicht darstellen, ob Intervalle im Text an den Enden offen oder geschlossen sein sollen. Für diese Intervalle gibt es zwar eine Klasse, die wird vom Editor aber vorwiegend wie ein struct behandelt, was eine Verkapselung solcher Unterschiede erschwert.

Grammatiken

Die Atom Grammatik für Shell Skript ist aus der von TextMate erzeugt worden. An der haben wir in der Zwischenzeit natürlich Probleme behoben, und den Patch für das größte habe ich für Atom portiert, bin aber nicht sicher, was passieren müsste, damit er übernommen wird.

Integration in das Betriebssystem

Anwendungen auf Mac OS X können dem Betriebssystem mitteilen, mit was für Daten sie arbeiten. Das System kann dann zu diesen Daten passende Dienste anbieten, die von anderen Anwendungen oder auch direkt vom Anwender bereit gestellt werden. So kann man systemweit Text auswählen und ihn dann z.B. in seiner Lieblingssuchmaschine suchen, als Email verschicken, in Großbuchstaben umwandeln und so fort.

In Atom geht das nicht. Oder genauer: In Atom geht das mit den statischen Texten z.B. in den Einstellungen, aber nicht mit dem Text im Texteditor. Es gibt eine Methode namens RenderWidgetHostViewMac::SelectionChanged, weit oben in Chromium, die der Texteditor aufrufen könnte, dann würde alles funktionieren. Leider ist mir zumindest nicht klar, wie ich aus dem Texteditor diese Methode aufrufen kann, oder die Instanz bekomme, auf der ich sie aufrufen muss, oder ob Electron diese API überhaupt erst bereit stellen müsste.

Dass man Atom auf der Kommandozeile keinen Text auf der Standardeingabe mitgeben kann, war dagegen ein sehr kleines Problem.

Bewegung

Es gibt eine Liste von Einsteigerfehlern, die die Gemeinde lösen könnte aber wenn man diese Liste durchgeht, findet man zu vielen Problemen Lösungen, die nach Monaten noch auf Review warten.

Besonders seltsam finde ich daran, dass sowohl das Atom Team als auch die Gemeinde um Atom herum sehr aktiv wirken und es viele Diskussionen gibt. Vielleicht übersehe ich einfach die Beiträge, die übernommen werden.

Fazit

Atom ist eine spannende Idee und hat interessante Plugins wie Ensime und Hydrogen, aber mir sind verlässliche Grundlagen wichtiger.

  1. In meinen Augen übrigens der schwächste Teil im TextMate Ökosystem.  ↩

  2. Atom Plugins verwenden CSON statt Plist Dateien. Einige Sublime Text Plugins erzeugen ihre Plists aus YAML.  ↩

  3. Ich bin Maintainer des TextMate Shell Skript Bundles.  ↩