Emacs-Modes mischen

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Mittwoch 26. März 2008, 13:34

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? :wink: Oo..

Edit (Leonidas): Thread von "Python-Syntax-Highlighter" abgetrennt.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Mittwoch 26. März 2008, 14:02

Rebecca hat geschrieben:.oO Schwafel... ob bei diesem Post noch was sinnvolleres bei rumkommt ausser dass Emacs toll ist? :wink: Oo..
Ich finde, das ist durchaus einen Post hin und wieder wert...
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Mittwoch 26. März 2008, 14:45

Also dann will ich aber auch mal eine Lanze für das System in Kate brechen - feines xml :-)
lunar

Mittwoch 26. März 2008, 16:20

birkenfeld hat geschrieben:
Rebecca hat geschrieben:.oO Schwafel... ob bei diesem Post noch was sinnvolleres bei rumkommt ausser dass Emacs toll ist? :wink: 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 :D
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Mittwoch 26. März 2008, 16:59

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... :D
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Mittwoch 26. März 2008, 17:22

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
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 26. März 2008, 18:06

birkenfeld hat geschrieben:
Rebecca hat geschrieben:.oO Schwafel... ob bei diesem Post noch was sinnvolleres bei rumkommt ausser dass Emacs toll ist? :wink: 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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
lunar

Mittwoch 26. März 2008, 20:06

Rebecca hat geschrieben:Das hier hat mir gute Dienste geleistet: An Emacs language mode creation tutorial
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... :D
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--- ;)
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Mittwoch 26. März 2008, 23:01

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.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
lunar

Donnerstag 27. März 2008, 07:51

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.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Donnerstag 27. März 2008, 09:20

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...
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Donnerstag 27. März 2008, 09:35

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?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
lunar

Donnerstag 27. März 2008, 20:39

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 ;)
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Freitag 28. März 2008, 00:01

TUFKAB – the user formerly known as blackbird
Antworten