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.
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.