Ich versuche, eine Hervorhebungsdatei von Gedit zu ändern. Ich habe die Datei /usr/share/gtksourceview-3.0/language-specs/fortran.lang geändert, weil ich die Fälle ändern möchte, in denen der Editor eine Anweisung als Kommentar verwendet. Das Problem, das ich habe, ist, dass wenn ich das neue Hervorhebungsschema wähle, nichts hervorgehoben wird, es nur als einfacher Text bleibt.
Die Datei fortran.lang wurde mit su-Berechtigungen geöffnet und ich habe einfach alles in eine neue Gedit-Datei kopiert und später als fortran_enhanced.lang im selben Ordner gespeichert. Die Änderungen, die ich an der Originaldatei vorgenommen habe, sind folgende:
Ursprüngliche fortran.lang-Datei:
<language id="fortran" _name="Fortran 95" version="2.0" _section="Sources">
<metadata>
<property name="mimetypes">text/x-fortran</property>
<property name="globs">*.f;*.f90;*.f95;*.for</property>
<property name="line-comment-start">!</property>
</metadata>
<styles>
<style id="comment" _name="Comment" map-to="def:comment"/>
<style id="floating-point" _name="Floating Point" map-to="def:floating-point"/>
<style id="keyword" _name="Keyword" map-to="def:keyword"/>
<style id="intrinsic" _name="Intrinsic function" map-to="def:builtin"/>
<style id="boz-literal" _name="BOZ Literal" map-to="def:base-n-integer"/>
<style id="decimal" _name="Decimal" map-to="def:decimal"/>
<style id="type" _name="Data Type" map-to="def:type"/>
</styles>
<default-regex-options case-sensitive="false"/>
<definitions>
<!-- Note: contains an hack to avoid considering ^COMMON a comment -->
<context id="line-comment" style-ref="comment" end-at-line-end="true" class="comment" class-disabled="no-spell-check">
<start>!|(^[Cc](\b|[^OoAaYy]))</start>
<include>
<context ref="def:escape"/>
<context ref="def:in-line-comment"/>
</include>
</context>
(...)
Geänderte Datei fortran_enhanced.lang:
<!-- Note: changed language id and name -->
<language id="fortran_enhanced" _name="Fortran 95 2.0" version="2.0" _section="Sources">
<metadata>
<property name="mimetypes">text/x-fortran</property>
<!-- Note: removed *.f and *.for from file extensions -->
<property name="globs">*.f90;*.f95;</property>
<property name="line-comment-start">!</property>
</metadata>
<styles>
<style id="comment" _name="Comment" map-to="def:comment"/>
<style id="floating-point" _name="Floating Point" map-to="def:floating-point"/>
<style id="keyword" _name="Keyword" map-to="def:keyword"/>
<style id="intrinsic" _name="Intrinsic function" map-to="def:builtin"/>
<style id="boz-literal" _name="BOZ Literal" map-to="def:base-n-integer"/>
<style id="decimal" _name="Decimal" map-to="def:decimal"/>
<style id="type" _name="Data Type" map-to="def:type"/>
</styles>
<default-regex-options case-sensitive="false"/>
<definitions>
<!-- Note: I want comments only beginning with !, not C -->
<context id="line-comment" style-ref="comment" end-at-line-end="true" class="comment" class-disabled="no-spell-check">
<start>!</start>
<include>
<context ref="def:escape"/>
<context ref="def:in-line-comment"/>
</include>
</context>
(...)
Ich habe diese Frage gelesen [ Benutzerdefinierte gedit-Syntaxhervorhebung für Dummies? ] und ich habe versucht, die neue Datei fortran_enhanced.lang mit lesbar zu machen
$ cd /usr/share/gtksourceview-3.0/language-specs
$ sudo chmod 0644 fortran_enhanced.lang
aber es machte keinen Unterschied.
Ich muss sagen, dass ich so etwas noch nie gemacht habe und den größten Teil der Sprachdatei nicht einmal verstehe. Deshalb bin ich offen für jede Kritik, da ich mich nur von der Intuition leiten ließ.
Danke im Voraus!
quelle
cd /usr/share/gtksourceview-3.0/language-specs
. Ist das der eigentliche Befehl, den Sie ausgeführt haben? Wenn dies der Fall ist, müssen Sie nur die Datei in verschieben/usr/local/share/gtksourceview-3.0/language-specs
.Antworten:
Ich glaube, ich habe herausgefunden, was für Sie schief gelaufen ist:
Lösung
Es ist gut und richtig, dass Sie das
id
(und_name
) im<language ...>
Tag geändert haben . Immerhin ist es ein neues Hervorhebungsschema, das Sie erstellen.Sie müssen dann jedoch auch die andere Stelle in der Datei ändern, an der diese ID verwendet wird. Weiter unten in der Sprachdefinition (im Zitat in der Frage weggelassen) finden Sie Folgendes:
Anscheinend müssen Sie einen Kontext mit derselben ID wie Ihre Sprache haben, der alle verwendeten Kontextdefinitionen enthält / verweist, damit gedit / GtkSourceView ihn verwendet, wenn ein bestimmtes Schema ausgewählt wird.
Wie ich es gefunden habe
Ich bin überhaupt kein Experte in diesem Bereich. Meine ganze Qualifikation ist, dass ich schon XML-Dateien gesehen habe;) Also konnte ich nur "fundierte" Vermutungen anstellen.
Was mich darauf hingewiesen hat, war eine Warnung, die beim Starten von gedit über ein Terminalfenster angezeigt wurde
(Ich habe beim Testen " frtrn " als ID, Name und Dateierweiterung verwendet. Sie sollten dieselbe Warnung mit " fortran_enhanced " erhalten.)
Dies machte mich misstrauisch genug, um im Rest der Datei nach der ursprünglichen ID zu suchen. Nachdem ich die obige Lösung ausprobiert hatte, fand ich auch die folgende Zeile, um meine Erklärung zu unterstützen:
Es stammt aus dem Tutorial zur Sprachdefinitionsdatei in der GtkSourceView-Dokumentation.
quelle