Memodifikasi file highlight sintaks gedit


9

Saya mencoba mengubah file sorotan dari Gedit. Saya telah memodifikasi file /usr/share/gtksourceview-3.0/language-specs/fortran.lang karena saya ingin mengubah kasus di mana editor mengambil pernyataan sebagai komentar. Masalah yang saya miliki adalah bahwa ketika saya memilih skema penyorotan baru, tidak ada yang disorot, itu hanya tetap sebagai teks biasa.

File fortran.lang dibuka dengan izin su dan saya hanya menyalin-menempelkan semuanya ke file Gedit baru dan kemudian menyimpannya sebagai fortran_enhanced.lang di folder yang sama. Perubahan yang saya lakukan pada file asli adalah:

File fortran.lang asli:

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

File fortran_enhanced.lang yang dimodifikasi:

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

Saya telah membaca pertanyaan ini [ Menyoroti Sintaks gedit Kustom untuk Dummies? ] dan saya mencoba membuat file fortran_enhanced.lang baru dapat dibaca

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

tapi itu tidak ada bedanya.

Saya harus mengatakan bahwa saya belum pernah melakukan hal seperti ini sebelumnya dan saya bahkan tidak mengerti sebagian besar file bahasa, jadi saya terbuka untuk setiap kritik, karena saya dibimbing sepenuhnya oleh intuisi.

Terima kasih sebelumnya!


Turun di bagian bawah posting Anda yang Anda katakan cd /usr/share/gtksourceview-3.0/language-specs. Apakah itu perintah sebenarnya yang Anda jalankan? Jika ya, Anda hanya perlu memindahkan file /usr/local/share/gtksourceview-3.0/language-specs.
evan.bovie

@ emb1995 Saya telah menyalin folder gtksourceview-3.0 ke / usr / local / share seperti yang Anda sarankan (saya katakan disalin karena folder itu berada di / usr / share / di komputer saya). Bagaimanapun, itu sepertinya tidak berhasil untuk saya, saya masih mendapatkan teks biasa ketika memilih file penyorotan baru di gedit :(
Oscar Saleta Reig

Jawaban:


4

Saya pikir saya tahu apa yang salah untuk Anda:

Larutan

Bagus dan benar, bahwa Anda mengubah tanda id(dan _name) di <language ...>tag. Bagaimanapun, ini adalah skema penyorotan baru yang Anda buat.

Namun Anda kemudian harus mengubah juga tempat lain di file tempat id ini digunakan. Lebih jauh ke bawah dalam definisi bahasa (dihilangkan dalam kutipan dalam pertanyaan) Anda menemukan ini:

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

Rupanya, Anda harus memiliki konteks dengan id yang sama dengan bahasa Anda termasuk / merujuk semua definisi konteks yang digunakan, sehingga gedit / GtkSourceView menggunakannya ketika skema tertentu dipilih.

Bagaimana saya menemukannya

Saya sama sekali tidak ahli dalam hal ini. Semua kualifikasi saya adalah bahwa saya telah melihat file XML sebelumnya;) Jadi saya hanya bisa membuat tebakan "berpendidikan".

Apa yang memberi saya informasi adalah peringatan yang ditunjukkan saat memulai gedit dari jendela terminal

(gedit: 6786): GtkSourceView-WARNING **: Gagal memuat '/usr/local/share/gtksourceview-3.0/language-specs/frtrn.lang': Definisi bahasa utama tidak ada (id = "frtrn".)

(Saya menggunakan " frtrn " sebagai id, nama dan ekstensi file saat menguji, Anda harus mendapatkan peringatan yang sama dengan " fortran_enhanced ")

Ini membuat saya cukup curiga untuk mencari ID asli di sisa file. Setelah mencoba solusi di atas saya juga menemukan baris berikut untuk mendukung penjelasan saya:

[definisi] Di sini kita harus mendefinisikan konteks utama, yang kita masukkan di awal file: untuk melakukannya kita menggunakan tag, dengan id sama dengan id elemen [...]

Ini dari tutorial file definisi bahasa di dokumentasi GtkSourceView.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.