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.
Emacs-Modes mischen
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Ich finde, das ist durchaus einen Post hin und wieder wert...Rebecca hat geschrieben:.oO Schwafel... ob bei diesem Post noch was sinnvolleres bei rumkommt ausser dass Emacs toll ist? Oo..
Ja, so im Allgemeinen ist Emacs halt schon der beste Editor der Weltbirkenfeld hat geschrieben:Ich finde, das ist durchaus einen Post hin und wieder wert...Rebecca hat geschrieben:.oO Schwafel... ob bei diesem Post noch was sinnvolleres bei rumkommt ausser dass Emacs toll ist? Oo..
@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
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Das hier hat mir gute Dienste geleistet: An Emacs language mode creation tutorial
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...lunar hat geschrieben:Docstrings mit Rest-Hervorhebungen zu versehen
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
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.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.
Stefan
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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.birkenfeld hat geschrieben:Ich finde, das ist durchaus einen Post hin und wieder wert...Rebecca hat geschrieben:.oO Schwafel... ob bei diesem Post noch was sinnvolleres bei rumkommt ausser dass Emacs toll ist? Oo..
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Danke!Rebecca hat geschrieben:Das hier hat mir gute Dienste geleistet: An Emacs language mode creation tutorial
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 unwichtigDas 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...lunar hat geschrieben:Docstrings mit Rest-Hervorhebungen zu versehen
@sma
Freu dich nicht zu früh Es geht, wir wissen nur nicht wie. Aber wozu gibt es das Emacs Wiki---
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
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.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.
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Wie?birkenfeld hat geschrieben:Gehen tuts freilich.
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.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.
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...
Entgegen meiner obigen Behauptung gibt es auch eine Text Property fuer eine lokale Syntax-Tabelle, nur fuer's Highlighting hab ich noch nichts gefunden.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
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...
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Weiß ich schon -- aber hast du den mal mit Dokumenten länger als 100 Zeilen eingesetzt?lunar hat geschrieben:Es gibt ja bereits einen RST-Mode für Emacs.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.
``find`` sagt ja, aber irgendwie habe ich noch keine nennenswerten Probleme erfahren. > 100 meint da aber auch 150birkenfeld hat geschrieben:Weiß ich schon -- aber hast du den mal mit Dokumenten länger als 100 Zeilen eingesetzt?lunar hat geschrieben:Es gibt ja bereits einen RST-Mode für Emacs.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.
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
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Google hat das ausgespuckt: http://www.emacswiki.org/cgi-bin/wiki/MultipleModes
TUFKAB – the user formerly known as blackbird