Modyfikowanie pliku podświetlania składni gedit

9

Próbuję zmienić plik wyróżnienia z Gedit. Zmodyfikowałem plik /usr/share/gtksourceview-3.0/language-specs/fortran.lang, ponieważ chcę zmienić przypadki, w których edytor przyjmuje instrukcję jako komentarz. Problemem jest to, że kiedy wybieram nowy schemat wyróżniania, nic nie jest podświetlane, pozostaje tylko zwykłym tekstem.

Plik fortran.lang został otwarty z uprawnieniami su, po prostu skopiowałem wszystko do nowego pliku Gedit, a później zapisałem go jako fortran_enhanced.lang w tym samym folderze. Zmiany, które wprowadziłem w oryginalnym pliku, są następujące:

Oryginalny plik fortran.lang:

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

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

Przeczytałem to pytanie [ Custom gedit Syntax Highlighting for Dummies? ] i próbowałem uczynić nowy plik fortran_enhanced.lang czytelnym za pomocą

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

ale to nie miało znaczenia.

Muszę powiedzieć, że nigdy wcześniej czegoś takiego nie robiłem i nawet nie rozumiem większości plików językowych, dlatego jestem otwarty na każdą krytykę, ponieważ kieruję się wyłącznie intuicją.

Dziękuję z góry!

Oscar Saleta Reig
źródło
Na dole Twojego postu powiedziałeś cd /usr/share/gtksourceview-3.0/language-specs. Czy to jest rzeczywiście polecenie, które wykonałeś? Jeśli tak, wystarczy przenieść plik do /usr/local/share/gtksourceview-3.0/language-specs.
evan.bovie
@ emb1995 Skopiowałem folder gtksourceview-3.0 do / usr / local / share, jak sugerowałeś (mówię, że skopiowałem, ponieważ folder znajdował się w / usr / share / na moim komputerze). W każdym razie, to nie działało dla mnie, wciąż dostaję zwykły tekst, gdy wybieram nowy plik podświetlania w gedit :(
Oscar Saleta Reig

Odpowiedzi:

4

Myślę, że dowiedziałem się, co poszło nie tak:

Rozwiązanie

Dobrze i słusznie, że zmieniłeś id(i _name) w <language ...>tagu. W końcu to nowy schemat wyróżniania, który tworzysz.

Musisz jednak zmienić także inne miejsce w pliku, w którym używany jest ten identyfikator. W dalszej części definicji języka (pominiętej w cytacie w pytaniu) znajdziesz:

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

Najwyraźniej musisz mieć kontekst o takim samym identyfikatorze jak Twój język, w tym / odwołujące się do wszystkich używanych definicji kontekstu, aby gedit / GtkSourceView używał go po wybraniu określonego schematu.

Jak to znalazłem

W ogóle nie jestem w tym ekspertem. Całą moją kwalifikacją jest to, że widziałem wcześniej pliki XML;) Mogłem więc jedynie zgadywać.

To, co mnie poradziło, to ostrzeżenie wyświetlane podczas uruchamiania gedit z okna terminala

(gedit: 6786): GtkSourceView-WARNING **: Nie można załadować „/usr/local/share/gtksourceview-3.0/language-specs/frtrn.lang”: brak definicji głównego języka (id = „frtrn”.)

(Użyłem „ frtrn ” jako identyfikatora, nazwy i rozszerzenia pliku podczas testowania, powinieneś otrzymać to samo ostrzeżenie z „ fortran_enhanced ”)

To sprawiło, że byłem wystarczająco podejrzany, aby wyszukać oryginalny identyfikator w pozostałej części pliku. Po wypróbowaniu powyższego rozwiązania znalazłem również następujący wiersz na poparcie mojego wyjaśnienia:

[definicje] Tutaj powinniśmy zdefiniować główny kontekst, ten, który wprowadzamy na początku pliku: w tym celu używamy znacznika o identyfikatorze równym id elementu [...]

Pochodzi z samouczka pliku definicji języka w dokumentacji GtkSourceView.

zpea
źródło