2013-10-15 5 views
1

Я новичок в emacs. Я начал использовать тему сумерек для emacs от here. Но я получаю один и тот же цвет для importdefclasstry и if в питон (я только пытался питона с этой темой до сих пор.)Как различать цвета для ключевых слов «import» «def» и «try» в emacs?

Однако, я хочу другой набор цветов для следующих пар:.

  • import and from
  • def and class
  • try and if.

Я просмотрел файл темы и выяснил, что font-lock-keyword-face определяет цвет вышеуказанных ключевых слов и те, что похожи на них.

Так как я могу установить разные цвета для вышеуказанных пар? Есть ли способ?

Я нахожусь на emacs24. Что не так с моим .emacs?

+2

Это не проблема цветовой темы. 'python-mode' классифицирует все эти слова синтаксически как ключевые слова. Вот почему все они имеют одно и то же лицо и всегда будут, пока кто-то не перепишет «python-mode». Но мне это действительно нравится так, как сейчас. Существует обходное решение, чтобы добавить ваше собственное выделение регулярных выражений, , но это наносит вред реакции редактора. –

+1

Также нехорошо задавать сразу два несвязанных вопроса. –

+0

Да, пожалуйста, разделите этот второй вопрос на второй вопрос (если вы не можете найти дубликат с поиском). – phils

ответ

1

Поскольку ALL из следующих ключевых слов определяются в python.el в python-font-lock-keywords, вам нужно будет козырять некоторые из них с другим лицом шрифта или взломать источник для тех же ключевых слов, чтобы иметь другой шрифт лицо:

«и «del» «from» «not» «while» «as» «elif» «global» или «with» «assert» «else» «if» «pass» «yield» «break» «except» " import "" class "" in "" raise "" continue "" finally "" is "" return "" def "" for "" lambda "" try "" print "" exec "" nonlocal "" self ".

Следующий код является примером того, как козырной python-font-lock-keywords для некоторых ключевых слов, которые уже были определены в python.el - в этом примере, while синего цвета с жирным; и, for зеленый с жирным шрифтом и курсивом. python-font-lock-keywords, которые не аннулирует специально определенные шрифты лиц будут по умолчанию font-lock-keyword-face - я включил модификацию образца этого лица, а также:

(custom-set-faces 
    '(font-lock-keyword-face 
    ((t (:background "white" :foreground "red" :bold t)))) 
) 

(defvar lawlist-blue (make-face 'lawlist-blue)) 
(set-face-attribute 'lawlist-blue nil 
    :background "white" :foreground "blue" :bold t) 

(defvar lawlist-green (make-face 'lawlist-green)) 
(set-face-attribute 'lawlist-green nil 
    :background "white" :foreground "green" :bold t :italic t) 

(defvar lawlist-keywords-01 
    (concat "\\b\\(?:" 
    (regexp-opt (list "hello" "world" "while")) 
    "\\)\\b")) 

(defvar lawlist-keywords-02 
    (concat "\\b\\(?:" 
    (regexp-opt (list "foo" "bar" "for")) 
    "\\)\\b")) 

(font-lock-add-keywords 'python-mode (list 

    (list (concat 
    "\\("lawlist-keywords-01"\\)") 1 'lawlist-blue t) 

    (list (concat 
    "\\("lawlist-keywords-02"\\)") 1 'lawlist-green t) 

    )) 
+0

это идет in.emacs ? –

+0

Да, весь код вставляется в файл '.emacs' - давайте попробуем. Сейчас здесь время, и я вернусь завтра, чтобы узнать, есть ли у вас какие-либо последующие вопросы. Он должен работать без проблем. – lawlist

+0

Я думаю, что я делаю что-то неправильно. Поместите весь код в '.emacs' и добавьте это' '(lawlist-keywords-01 ((t (: foreground "# 000000")))) 'в' color-theme-twilight.el'. Не работает. :( –

1

Там нет ничего плохого с .emacs. Это то, что делает блокировка шрифтов: есть несколько целевых объектов для блокировки шрифтов - один для типов, один для переменных, один для ключевых слов и т. Д. Вы можете настроить, какое лицо получает каждый (например, настроить Mx, затем Faces, Font Lock, Font Lock Faces), и вы можете настроить, как каждый язык соответствует регулярным выражениям для целей. Поскольку все это ключевые слова, они все сопоставляются с ключевым словом.

Если вы действительно хотите, вы можете отредактировать переменную font-lock-keywords, заданную в режиме python, чтобы соответствовать каждому ключевому слову отдельно, а вместо того, чтобы просто называть цель блокировки шрифта как ваш facepec, дать список (face FACE PROP VALUE ...), с таким количеством реквизитов и значений, которые вы предпочитаете. Если вы действительно хотите это сделать, вы действительно хотите прочитать документы.

Полные сведения описаны в разделе «Основанное на поиске Fontification» (23.6.2 в GNU emacs 23.4, возможно, другое в вашей версии, но вы можете легко найти его на странице настройки Font Lock).

+0

Почему vim различает ключевые слова 'class' и' import'? –

0

Он реализован здесь:

https://github.com/pdee/pdee

код база в основном, что питон-mode.el, но поставляется с встраиваемым Pymacs, компания-режимом, авто-завершение

Или получить его через базар:

bzr branch lp:python-mode/components-python-mode 

, который является разработка Гиса питона-mode.el