Змінення файлу виділення синтаксису gedit


9

Я намагаюся змінити файл виділення від Gedit. Я змінив файл /usr/share/gtksourceview-3.0/language-specs/fortran.lang, оскільки хочу змінити випадки, коли редактор приймає заяву як коментар. Проблема у мене полягає в тому, що коли я вибираю нову схему виділення, нічого не виділяється, вона залишається просто звичайним текстом.

Файл fortran.lang був відкритий з дозволами su, і я просто скопіював усе, вставивши його в новий файл Gedit, а пізніше зберег його як fortran_enhanced.lang у тій же папці. Зміни, які я вніс у вихідний файл, такі:

Оригінальний файл 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>
(...)

Змінений файл 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>
(...)

Я прочитав це запитання [ Спеціальне виділення синтаксису gedit для манекенів? ], і я спробував зробити новий файл fortran_enhanced.lang читабельним

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

але це не мало значення.

Я мушу сказати, що я ніколи раніше не робив подібного, і я навіть не розумію більшості мовних файлів, тому я відкритий до кожної критики, оскільки мене керувала суто інтуїція.

Дякую заздалегідь!


Внизу у вашій посаді ви сказали cd /usr/share/gtksourceview-3.0/language-specs. Це фактична команда, яку ти виконував? Якщо це так, вам просто потрібно перемістити файл /usr/local/share/gtksourceview-3.0/language-specs.
evan.bovie

@ emb1995 Я скопіював папку gtksourceview-3.0 в / usr / local / share, як ви запропонували (я кажу, скопіював, тому що папка знаходилася в / usr / share / на моєму комп’ютері). У будь-якому випадку це, здається, не працює для мене, я все одно отримую звичайний текст, коли вибираю новий файл виділення в gedit :(
Oscar Saleta Reig

Відповіді:


4

Я думаю, я дізнався, що пішло не так у вас:

Рішення

Добре і правильно, що ви змінили id_name) у <language ...>тезі. Зрештою, це нова схема виділення, яку ви створюєте.

Однак тоді вам доведеться змінити і інше місце у файлі, де використовується цей ідентифікатор. Далі в мовному визначенні (пропущеному в цитаті у запитанні) ви знаходите це:

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

Мабуть, у вас повинен бути контекст з тим самим ідентифікатором, що і ваша мова, включаючи / посилаючись на всі використані визначення контексту, щоб gedit / GtkSourceView використовував його, коли обрана конкретна схема.

Як я це знайшов

Я зовсім не експерт у цьому. Вся моя кваліфікація полягає в тому, що я бачив XML-файли раніше;) Тож я міг робити лише "освічені" здогадки.

Те, що мені підказало, було попередженням, показаним при запуску gedit з вікна терміналу

(gedit: 6786): GtkSourceView-WARNING **: Не вдалося завантажити '/usr/local/share/gtksourceview-3.0/language-specs/frtrn.lang': Відсутнє визначення основної мови (id = "frtrn".)

(Я використовував " frtrn " як id, ім'я та розширення файлу під час тестування, ви повинні отримувати те саме попередження з " fortran_enhanced ")

Це зробило мене досить підозрілим для пошуку оригіналу ідентифікатора в решті файлу. Після випробування вищезазначеного рішення я також знайшов наступний рядок, щоб підтримати моє пояснення:

[Визначення] Тут ми повинні визначити головний контекст, той, який ми вводимо на початку файлу: для цього ми використовуємо тег, з ідентифікатором, рівним ідентифікатору елемента [...]

Це підручник з файлу визначення мови в документації GtkSourceView.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.