Sửa đổi tệp tô sáng cú pháp gedit


9

Tôi đang cố gắng thay đổi một tập tin đánh dấu từ Gedit. Tôi đã sửa đổi tệp /usr/share/gtksourceview-3.0/lingu-specs/fortran.lang vì tôi muốn thay đổi các trường hợp trong đó trình soạn thảo lấy một tuyên bố làm nhận xét. Vấn đề tôi có là khi tôi chọn lược đồ tô sáng mới, không có gì nổi bật, nó chỉ còn là văn bản thuần túy.

Tệp fortran.lang đã được mở bằng quyền su và tôi chỉ sao chép mọi thứ vào một tệp Gedit mới và sau đó lưu nó dưới dạng fortran_enhified.lang trong cùng một thư mục. Những thay đổi tôi đã thực hiện đối với tệp gốc là:

Tập tin fortran.lang gốc:

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

Đã sửa đổi tệp fortran_enhified.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>
(...)

Tôi đã đọc câu hỏi này [ Custom gedit Syntax Highlighting for Dummies? ] và tôi đã cố gắng làm cho tệp fortran_enhified.lang mới có thể đọc được bằng

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

nhưng nó không tạo ra sự khác biệt nào.

Tôi phải nói rằng tôi chưa bao giờ làm một việc như thế này trước đây và tôi thậm chí không hiểu hầu hết các tập tin ngôn ngữ, vì vậy tôi cởi mở với mọi lời chỉ trích, vì tôi đã được hướng dẫn hoàn toàn bằng trực giác.

Cảm ơn bạn trong nâng cao!


Xuống dưới cùng của bài viết của bạn, bạn nói cd /usr/share/gtksourceview-3.0/language-specs. Đó có phải là lệnh thực tế bạn đã chạy? Nếu có, bạn chỉ cần di chuyển tệp đến /usr/local/share/gtksourceview-3.0/language-specs.
evan.bovie

@ emb1995 Tôi đã sao chép thư mục gtksourceview-3.0 sang / usr / local / share như bạn đề xuất (Tôi nói đã sao chép vì thư mục được đặt trong / usr / share / trong máy tính của tôi). Dù sao, điều đó dường như không hiệu quả với tôi, tôi vẫn nhận được văn bản đơn giản khi chọn tệp tô sáng mới trong gedit :(
Oscar Saleta Reig

Câu trả lời:


4

Tôi nghĩ rằng tôi đã tìm ra những gì đã sai cho bạn:

Giải pháp

Thật tốt và đúng, rằng bạn đã thay đổi id(và _name) trong <language ...>thẻ. Sau tất cả, nó là một chương trình làm nổi bật mới mà bạn tạo ra.

Tuy nhiên, sau đó bạn phải thay đổi vị trí khác trong tệp nơi id này được sử dụng. Tiếp tục đi xuống trong định nghĩa ngôn ngữ (bỏ qua trong trích dẫn trong câu hỏi) bạn tìm thấy điều này:

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

Rõ ràng, bạn phải có một ngữ cảnh có cùng id với ngôn ngữ của bạn, bao gồm / tham chiếu tất cả các định nghĩa ngữ cảnh được sử dụng, để gedit / GtkSourceView sử dụng nó khi chọn một lược đồ cụ thể.

Làm thế nào tôi tìm thấy nó

Tôi hoàn toàn không phải là một chuyên gia trong việc này. Tất cả trình độ chuyên môn của tôi là tôi đã thấy các tệp XML trước đó;) Vì vậy, tôi chỉ có thể đoán "có giáo dục".

Điều khiến tôi bực mình là một cảnh báo hiển thị khi bắt đầu gedit từ cửa sổ terminal

(gedit: 6786): GtkSourceView-WARNING **: Không thể tải '/usr/local/share/gtksourceview-3.0/lingu-specs/frtrn.lang': Thiếu định nghĩa ngôn ngữ chính (id = "frtrn".)

(Tôi đã sử dụng " frtrn " làm id, tên và phần mở rộng tệp trong khi thử nghiệm, bạn sẽ nhận được cảnh báo tương tự với " fortran_enhified ")

Điều này khiến tôi đủ nghi ngờ để tìm kiếm ID gốc trong phần còn lại của tệp. Sau khi thử giải pháp trên tôi cũng tìm thấy dòng sau đây để hỗ trợ cho lời giải thích của mình:

[định nghĩa] Ở đây chúng ta nên xác định một bối cảnh chính, bối cảnh chúng ta nhập vào đầu tệp: để làm như vậy, chúng ta sử dụng thẻ, với một id bằng với id của phần tử [...]

Đó là từ hướng dẫn tệp định nghĩa ngôn ngữ trong tài liệu GtkSourceView.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.