Modification d'un fichier de surbrillance de la syntaxe gedit

9

J'essaie de changer un fichier de surbrillance de Gedit. J'ai modifié le fichier /usr/share/gtksourceview-3.0/language-specs/fortran.lang parce que je veux changer les cas dans lesquels l'éditeur prend une déclaration en commentaire. Le problème que j'ai, c'est que lorsque je choisis le nouveau schéma de surbrillance, rien n'est mis en surbrillance, il reste simplement en texte brut.

Le fichier fortran.lang a été ouvert avec les autorisations su et je viens de tout copier-coller dans un nouveau fichier Gedit et de l'enregistrer plus tard sous le nom fortran_enhanced.lang dans le même dossier. Les modifications que j'ai apportées au fichier d'origine sont les suivantes:

Fichier fortran.lang d'origine:

<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>
(...)

Fichier fortran_enhanced.lang modifié:

                     <!-- 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>
(...)

J'ai lu cette question [ Mise en évidence de la syntaxe gedit personnalisée pour les nuls? ] et j'ai essayé de rendre le nouveau fichier fortran_enhanced.lang lisible avec

$ cd /usr/share/gtksourceview-3.0/language-specs
$ sudo chmod 0644 fortran_enhanced.lang

mais cela n'a fait aucune différence.

Je dois dire que je n'ai jamais rien fait de tel auparavant et que je ne comprends même pas la plupart des fichiers de langue, donc je suis ouvert à toutes les critiques, car j'ai été guidé uniquement par l'intuition.

Merci d'avance!

Oscar Saleta Reig
la source
Au bas de votre message, vous avez dit cd /usr/share/gtksourceview-3.0/language-specs. Est-ce la vraie commande que vous avez exécutée? Si c'est le cas, il vous suffit de déplacer le fichier vers /usr/local/share/gtksourceview-3.0/language-specs.
evan.bovie
@ emb1995 J'ai copié le dossier gtksourceview-3.0 dans / usr / local / share comme vous l'avez suggéré (je dis copié parce que le dossier se trouvait dans / usr / share / sur mon ordinateur). Quoi qu'il en soit, cela ne semble pas fonctionner pour moi, je reçois toujours du texte brut lorsque je choisis le nouveau fichier de surbrillance dans gedit :(
Oscar Saleta Reig

Réponses:

4

Je pense avoir découvert ce qui n'a pas fonctionné pour vous:

Solution

Il est bon et juste que vous ayez changé le id(et _name) dans la <language ...>balise. Après tout, c'est un nouveau schéma de surbrillance que vous créez.

Cependant, vous devez ensuite modifier également l'autre endroit du fichier où cet identifiant est utilisé. Plus bas dans la définition du langage (omis dans la citation de la question) vous trouvez ceci:

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

Apparemment, vous devez avoir un contexte avec le même identifiant que votre langue, y compris / référencer toutes les définitions de contexte utilisées, afin que gedit / GtkSourceView l'utilise lorsqu'un schéma spécifique est choisi.

Comment je l'ai trouvé

Je ne suis pas du tout un expert en la matière. Toute ma qualification est que j'ai déjà vu des fichiers XML;) Je ne pouvais donc que faire des suppositions "instruites".

Ce qui m'a averti était un avertissement affiché lors du démarrage de gedit à partir d'une fenêtre de terminal

(gedit: 6786): GtkSourceView-WARNING **: échec du chargement de '/usr/local/share/gtksourceview-3.0/language-specs/frtrn.lang': définition de langue principale manquante (id = "frtrn".)

(J'ai utilisé " frtrn " comme id, nom et extension de fichier pendant le test, vous devriez obtenir le même avertissement avec " fortran_enhanced ")

Cela m'a rendu assez suspect pour rechercher l'ID d'origine dans le reste du fichier. Après avoir essayé la solution ci-dessus, j'ai également trouvé la ligne suivante pour soutenir mon explication:

[définitions] Ici, nous devons définir un contexte principal, celui que nous entrons au début du fichier: pour ce faire, nous utilisons la balise, avec un id égal à l'id de l'élément [...]

Il provient du didacticiel du fichier de définition de langue dans la documentation GtkSourceView.

zpea
la source