我需要在 Gedit 中添加一种新语言。问题是,它现在包含在Gedit的语言菜单中,但它的语法没有突出显示,并且Gedit无法仅从文件后缀识别语言。
我创建了 .lang 文件和描述 MIME-TYPE 的 XML 文件。
LANG file - /usr/share/gtksourceview-3.0/language-specs/test.lang
MIME-TYPE file - /usr/share/mime/packages/test.xml
创建它们后,我更新了 mime 数据库。
sudo update-mime-database /usr/share/mime
下一步尝试
1)我什至尝试过将test.xml
文件复制到/usr/share/mime/applications
文件夹而不是/usr/share/mime/packages
,但没有效果。
2)我尝试将 mime 类型放入/etc/mime.types
as
text/x-test test
它也没有效果。
测试语言
<?xml version="1.0" encoding="UTF-8"?>
<language id="test" _name="Test" version="1.0" _section="Source">
<metadata>
<property name="mimetypes">text/x-test</property>
<property name="globs">*.test</property>
<property name="line-comment-start">//</property>
<property name="block-comment-start">/*</property>
<property name="block-comment-end">*/</property>
</metadata>
<styles>
<style id="comment" _name="Comment" map-to="def:comment"/>
<style id="keyword" _name="Keyword" map-to="def:keyword"/>
</styles>
<definitions>
<context id="if0-comment" style-ref="comment">
<start>\%{preproc-start}if\b\s*0\b</start>
<end>\%{preproc-start}(endif|else|elif)\b</end>
<include>
<context id="if-in-if0">
<start>\%{preproc-start}if(n?def)?\b</start>
<end>\%{preproc-start}endif\b</end>
<include>
<context ref="if-in-if0"/>
<context ref="def:in-comment"/>
</include>
</context>
<context ref="def:in-comment"/>
</include>
</context>
<context id="keywords" style-ref="keyword">
<keyword>hello</keyword>
<keyword>hi</keyword>
</context>
<!--Main context-->
<context id="test">
<include>
<context ref="if0-comment"/>
<context ref="keywords"/>
</include>
</context>
</definitions>
</language>
测试.xml
<?xml version="1.0" encoding="utf-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info" >
<mime-type type="text/x-test">
<sub-class-of type="text/plain"/>
<comment xml:lang="en">TEST language document</comment>
<comment xml:lang="cs">Dokument v jazyce TEST</comment>
<glob pattern="*.test"/>
</mime-type>
</mime-info>
答案1
终于我想通了。根据GTK 语言参考 version
标签中的属性<language>
应该是2.0
.它确实有效。
所以,正确的<language>
标签是这样的:
<language id="test" _name="Test" version="2.0" _section="Source">