Seite 1 von 1
Emacs-Modes mischen
Verfasst: Mittwoch 26. März 2008, 13:34
von Rebecca
Ist ein wenig OT, aber ich habe die letzten Tage mal einen Emacs-Mode mit eigener Syntax und eigenem Highlighting programmiert. Wie der Code aussieht, der dahinter steht, weiss ich nicht, aber die "API" fuer den Mode-Programmierer ist sowohl einfach als auch flexibel. Man gibt in einer Syntax-Tabelle fuer jedes Zeichen an, zu was fuer einer Klasse es gehoert (Leerzeichen, Wort, Punktuation, oeffnende/schliessende Klammern...), was eventuell fuer weitere Zeichen dazugehoeren, z.B. bei einer oeffnenden Klammer die passende schliessende, etc. (Und im echten Leben erbt man natuerlich von vorhandenen Syntax-Tabellen und passt diese an...)
Das eigentliche Syntax-Highlighting geschieht dann tatsaechlich ueber Regular Expressions, wobei man in die Regular Expressions auch die Syntax-Tabelle ueber spezielle Ausdruecke einfliessen lassen kann. Da ich nur extrem einfache Dinge in meinem Mode zu highlighten hatte, hab ich das Thema nur ein wenig angekratzt, aber von dem, was ich so an Highlighting von Emacs kenne, scheint man ne Menge mit machen zu koennen.
.oO Schwafel... ob bei diesem Post noch was sinnvolleres bei rumkommt ausser dass Emacs toll ist?
Oo..
Edit (Leonidas): Thread von "Python-Syntax-Highlighter" abgetrennt.
Verfasst: Mittwoch 26. März 2008, 14:02
von birkenfeld
Rebecca hat geschrieben:.oO Schwafel... ob bei diesem Post noch was sinnvolleres bei rumkommt ausser dass Emacs toll ist?
Oo..
Ich finde, das ist durchaus einen Post hin und wieder wert...
Verfasst: Mittwoch 26. März 2008, 14:45
von Hyperion
Also dann will ich aber auch mal eine Lanze für das System in Kate brechen - feines xml

Verfasst: Mittwoch 26. März 2008, 16:20
von lunar
birkenfeld hat geschrieben:Rebecca hat geschrieben:.oO Schwafel... ob bei diesem Post noch was sinnvolleres bei rumkommt ausser dass Emacs toll ist?
Oo..
Ich finde, das ist durchaus einen Post hin und wieder wert...
Ja, so im Allgemeinen ist Emacs halt schon der beste Editor der Welt
@rebecca
Darf man da um einen kleinen Erfahrungsbericht mit ein paar handlichen Beispielen bitten? Ich hätte nämlich auch Bedarf für das eine oder andere Tuning bei der Hervorhebung. Docstrings mit Rest-Hervorhebungen zu versehen, wäre natürlich die Spitze

Verfasst: Mittwoch 26. März 2008, 16:59
von Rebecca
Das hier hat mir gute Dienste geleistet:
An Emacs language mode creation tutorial
lunar hat geschrieben:Docstrings mit Rest-Hervorhebungen zu versehen
Das hoert sich ziemlich tricky an. Im Prinzip brauchts du da ja innerhalb der Docstrings wieder eine ganz eigene Syntax und ganz eigenes Highlighting. Man kann basierend auf dem Highlighting des Buffers text properties setzen, z.B. eine lokale Keymap fuer klickbaren Text, was ich u.A. gemacht habe, aber lokales Highlighting/lokale Syntaxtabelle...? Wenn sowas ginge, koennte man auch z.B. in LaTeX-Listings Python-Syntax highlighten.

Gut, ich mag jetzt auch nicht sagen, dass es nicht geht, bei Emacs weiss man ja nie...

Verfasst: Mittwoch 26. März 2008, 17:22
von sma
Rebecca hat geschrieben:Das hoert sich ziemlich tricky an. Im Prinzip brauchts du da ja innerhalb der Docstrings wieder eine ganz eigene Syntax und ganz eigenes Highlighting.
Kann das euer Lieblingseditor etwa nicht? ;) Sowohl bei Vim als auch bei Textmate ist das kein größeres Problem. Dort kann man Regionen durch reguläre Ausdrücke definieren, in denen ein anderer Highlighter aktiv sein soll. Da die regulären Ausdrücke wiederum einen Kontext haben können, kann man auf diese Weise auch einen Docstring - jedenfalls für Methoden - finden.
Stefan
Verfasst: Mittwoch 26. März 2008, 18:06
von Leonidas
birkenfeld hat geschrieben:Rebecca hat geschrieben:.oO Schwafel... ob bei diesem Post noch was sinnvolleres bei rumkommt ausser dass Emacs toll ist?
Oo..
Ich finde, das ist durchaus einen Post hin und wieder wert...
Was mich freuen würde wäre so etwas wie Emacs ge-packt. Das Vim Buch ist super, zu Emacs gibts irgendwie nichts wirklich aktuelles was einem zeigt wie man das Ding am besten konfiguriert.
Verfasst: Mittwoch 26. März 2008, 20:06
von lunar
Danke!
lunar hat geschrieben:Docstrings mit Rest-Hervorhebungen zu versehen
Das hoert sich ziemlich tricky an. Im Prinzip brauchts du da ja innerhalb der Docstrings wieder eine ganz eigene Syntax und ganz eigenes Highlighting. Man kann basierend auf dem Highlighting des Buffers text properties setzen, z.B. eine lokale Keymap fuer klickbaren Text, was ich u.A. gemacht habe, aber lokales Highlighting/lokale Syntaxtabelle...? Wenn sowas ginge, koennte man auch z.B. in LaTeX-Listings Python-Syntax highlighten.

Gut, ich mag jetzt auch nicht sagen, dass es nicht geht, bei Emacs weiss man ja nie...

Es geht aber. Nicht anders funktionieren ja z.B. die im Wiki kursierenden Django+Html-Modes oder der table-mode. Das sind lokale Minor Modes. Im Prinzip läuft das ja darauf hinaus, emacs bei Antreffen eines Docstring in den rst-mode zu schicken. Das geht allerdings imho auch über Hervorhebung hinaus, da ein Mode ja weitaus mehr ist als Hervorhebung. Naja, bei Gelegenheit schaue ich mir das mal an, momentan habe ich einfach zu viel um die Ohren, so Dinge mit Arbeit und Party und so, total unwichtig
@sma
Freu dich nicht zu früh

Es geht, wir wissen nur nicht wie. Aber wozu gibt es das Emacs Wiki---

Verfasst: Mittwoch 26. März 2008, 23:01
von birkenfeld
Gehen tuts freilich. Nur leider ist RST hartnäckig schwierig mit REs zu parsen, was die ganze Sache entweder ziemlich sinnlos oder ziemlich langsam machen würde.
Verfasst: Donnerstag 27. März 2008, 07:51
von lunar
birkenfeld hat geschrieben:Gehen tuts freilich. Nur leider ist RST hartnäckig schwierig mit REs zu parsen, was die ganze Sache entweder ziemlich sinnlos oder ziemlich langsam machen würde.
Es gibt ja bereits einen RST-Mode für Emacs. Den müsste man jetzt nur lokal auf die Docstrings anwenden. Emacs unterstützt das ziemlich sicher, denn wie ich schon sagte - der text table mode oder der django mode arbeiten nicht anders.
Verfasst: Donnerstag 27. März 2008, 09:20
von Rebecca
birkenfeld hat geschrieben:Gehen tuts freilich.
Wie?
lunar hat geschrieben:
Es gibt ja bereits einen RST-Mode für Emacs. Den müsste man jetzt nur lokal auf die Docstrings anwenden. Emacs unterstützt das ziemlich sicher, denn wie ich schon sagte - der text table mode oder der django mode arbeiten nicht anders.
Soo einfach dann nun doch wieder nicht. Erstens ist der rst-mode ein major mode, und ein Buffer hat genau einen major mode, aber man kann natuerlich Einzelteile des Modes verwenden. Anders ist es mit minor modes, aber auch da kann ich mir nicht vorstellen, wie man die auf Teile eines buffers anwendet, denn ein minor mode wird ja explizit so programmiert, dass sie entweder global wirken (wie zB. der Toolbar-Mode) oder Buffer-lokal, es muesste dann ja einen Automatismus geben, der alle verwendeten globalen und Buffer-lokale Variablen einschraenkt.
Wenn du table.el meinst: Das ist kein Mode, es tut nur so, indem es geschickt von Text Properties gebrauch macht. Sehr interessant, aber leider ist kein Highlighting dabei...
table.el hat geschrieben:;; [...] The package uses no major mode nor
;; minor mode for its implementation because the subject text is
;; localized within a buffer
Entgegen meiner obigen Behauptung gibt es auch eine Text Property fuer eine lokale Syntax-Tabelle, nur fuer's Highlighting hab ich noch nichts gefunden.
Welchen Django-Mode meinst du? Der, den ich gefunden habe, addiert zu den HTML-font-lock-Geschichten noch seine eigenen hinzu, die wirken dann also prinzipiell im ganzen Buffer.
PS: Man koennte den Thread vlt. auch mal abschneiden...
Verfasst: Donnerstag 27. März 2008, 09:35
von birkenfeld
lunar hat geschrieben:birkenfeld hat geschrieben:Gehen tuts freilich. Nur leider ist RST hartnäckig schwierig mit REs zu parsen, was die ganze Sache entweder ziemlich sinnlos oder ziemlich langsam machen würde.
Es gibt ja bereits einen RST-Mode für Emacs.
Weiß ich schon -- aber hast du den mal mit Dokumenten länger als 100 Zeilen eingesetzt?
Verfasst: Donnerstag 27. März 2008, 20:39
von lunar
birkenfeld hat geschrieben:lunar hat geschrieben:birkenfeld hat geschrieben:Gehen tuts freilich. Nur leider ist RST hartnäckig schwierig mit REs zu parsen, was die ganze Sache entweder ziemlich sinnlos oder ziemlich langsam machen würde.
Es gibt ja bereits einen RST-Mode für Emacs.
Weiß ich schon -- aber hast du den mal mit Dokumenten länger als 100 Zeilen eingesetzt?
``find`` sagt ja, aber irgendwie habe ich noch keine nennenswerten Probleme erfahren. > 100 meint da aber auch 150
Wirklich große Dokumente habe ich noch nie in rest verfasst, da ich rst eigentlich nur für Dokumentationszwecke einsetze. Echte Dokumente schreibe ich nach wie vor mit LaTeX.
@rebecca
So tief habe ich mich mit dem Thema nicht befasst

Verfasst: Freitag 28. März 2008, 00:01
von mitsuhiko