Ändern einer Gedit-Syntax-Hervorhebungsdatei


9

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!


Unten in deinem Beitrag hast du gesagt 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.
evan.bovie

@ emb1995 Ich habe den Ordner gtksourceview-3.0 wie vorgeschlagen nach / usr / local / share kopiert (ich sage kopiert, weil sich der Ordner in / usr / share / auf meinem Computer befand). Wie auch immer, das schien für mich nicht zu funktionieren, ich bekomme immer noch einfachen Text, wenn ich die neue Hervorhebungsdatei in gedit auswähle :(
Oscar Saleta Reig

Antworten:


4

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:

<context id="fortran" class="no-spell-check">

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

(gedit: 6786): GtkSourceView-WARNING **: Fehler beim Laden von '/usr/local/share/gtksourceview-3.0/language-specs/frtrn.lang': Fehlende Definition der Hauptsprache (id = "frtrn".)

(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:

[Definitionen] Hier sollten wir einen Hauptkontext definieren, den wir am Anfang der Datei eingeben: Dazu verwenden wir das Tag mit einer ID, die der ID des Elements entspricht [...]

Es stammt aus dem Tutorial zur Sprachdefinitionsdatei in der GtkSourceView-Dokumentation.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.