Как стилизовать имена пользовательских функций в gedit? - PullRequest
3 голосов
/ 08 ноября 2010

Я пытаюсь настроить стиль gedit, чтобы пользовательские функции имели другой цвет.

Я искал http://library.gnome.org/devel/gtksourceview-2.0/stable/lang-reference.html, но ничего не смог найти.

Я думал, что <style name="def:function" /> может сделать это, но, похоже, в gedit это никак не отразится.

<?xml version="1.0" ?>
<style-scheme id="wombat" name="Wombat" version="1.0">
        <author/>
        <_description>Wombat theme</_description>
        <style background="#2d2d2d" name="current-line"/>
        <style background="#857b6f" bold="true" foreground="#fff000" name="bracket-match"/>
        <style background="#242424" bold="true" foreground="#fff000" name="search-match"/>
        <style background="#656565" name="cursor"/>
        <style background="#242424" foreground="#f6f3e8" name="text"/>
        <style background="#272727" foreground="#857b6f" name="line-numbers"/>
        <style foreground="#363636" italic="true" name="def:comment"/>
        <style foreground="#e5786d" name="def:constant"/>
        <style foreground="#95e454" italic="true" name="def:string"/>
        <style foreground="#cae682" name="def:identifier"/>
        <style foreground="#000000" name="def:function"/>
        <style foreground="#cae682" name="def:type"/>
        <style foreground="#8ac6f2" name="def:statement"/>
        <style foreground="#8ac6f2" name="def:keyword"/>
        <style foreground="#e5786d" name="def:preprocessor"/>
        <style foreground="#e5786d" name="def:number"/>
        <style foreground="#e7f6da" name="def:specials"/>
    </style-scheme>

Есть намеки? Спасибо!

Ответы [ 2 ]

1 голос
/ 30 мая 2012

Вам нужно отредактировать файл определения языка, чтобы добавить новый раздел.Определение языка - python.lang, а для меня - /usr/share/gtksourceview-2.0/language-specs.

Сначала вам нужно добавить стиль для идентификатора стиля, который вы собираетесь создать:

<style id="class-name"    _name="Python Class Name"  map-to="def:type"/>

Затем вам нужно добавить новый контекст к этому файлу в разделе <context-id="python":

<context id="class-name" style-ref="class-name" style-inside="true">
    <start>\%{string-prefix}def\ </start>
    <end>\(</end>
    <include>
        <context ref="python"/>
        <context ref="format"/>
        <context ref="escaped-char"/>
    </include>
</context>

Вам нужен style-inside="true", чтобы не применять стили к def или ( что мы соответствуем.Из документов:

style-inside (необязательно) Если этот атрибут имеет значение "true", тогда стиль выделения будет применен к области между началом и концом совпадений;в противном случае весь контекст будет выделен.

Сохраните это, затем перезапустите gedit, и имя функции должно быть стилизовано так же, как и ошибка, например, текст AttributeError будет.Вы можете изменить строку map-to в верхней части языкового файла, чтобы изменить стиль, применяемый к именам функций.

Преимущество повторного использования существующего стиля вместо определения нового стиля для имен классов состоит в том, что онбудет работать со всеми темами gedit, которые вы установите в будущем - их не нужно изменять, чтобы добавить секцию имен функций, специфичную для python.стиль на "def".Перемещение раздела «имя-класса» (мой код выше) ниже раздела «ключевые слова», который уже существует, исправляет это, поскольку оно перемещает наше изменение ниже в иерархии.Будет обновлено изображение, когда я получу шанс.

До: enter image description here

После: enter image description here

0 голосов
/ 10 марта 2011

если я правильно вас понимаю, прежде всего вам нужно определить новый стиль в вашем * .lang файле

<style id="function" _name="Functions"/>

затем составьте список всех необходимых функций, таких как

<context id="functions" style-ref="function">
    <keyword>abs</keyword>
    <keyword>acos</keyword>
    <keyword>acosh</keyword>
</context>

затем обновите определения блоков в конце файла и добавьте новый контекст

<context ref="functions"/>

очень важный правильный порядок, порядок определения контекста должен быть одинаковым во всех файлах, один элемент всегда идет за другим, не путайте их.

и в конце вам нужно определить формат формы в вашем файле styles / *. Xml, в моем случае это было

<style name="php:function" foreground="#0000ee" bold="false"/>

где я использовал php должен быть идентификатором вашего языка, как и в * .lang файле.

...