2016-02-23 6 views
1

Я использую методы разбора, которые я изучаю на практике. Я пытаюсь написать режим программирования в Emacs, поэтому я могу воспользоваться подсветкой синтаксиса и тому подобное. к сожалению, функция font-lock не работает. Поиск в Google и следование найденным учебникам не дали никаких результатов. Ниже мой код. Любые советы приветствуются.Emacs Задание правил для блокировки шрифтов

;;;###autoload 
(defgroup use-mode nil 
    "Mode for editing Use source files." 
    :group 'languages) 

;;;###autoload 
(defcustom use-mode-hook nil 
    "Hook run when use-mode is started.") 

(defvar use-mode-map (make-sparse-keymap) 
"Keymap for use-mode.") 

;;;###autoload 
(add-to-list 'auto-mode-alist '("\\.use\\'" . use-mode)) 

(defvar use-keywords-1 '("use" . font-lock-keyword-face) 
    "First level of font-lock in Use") 

(defvar use-font-lock-keywords use-keywords-1 
    "Code highlighting.") 

;;;###autoload 
(define-derived-mode use-mode prog-mode "Use" 
    "Major mode for editing Use source files." 
    (setq font-lock-defaults '(use-font-lock-keywords))) 

(provide 'use-mode) 
+1

Вы уверены, что хотите ' defcustom' ваш режим крюка? Во-первых, «define-производный-режим» автоматически определяет такой крючок, но также крючки - это, как правило, те, которые конечные пользователи редко устанавливают через систему настройки Emacs, а скорее непосредственно в файле инициализации. – Thomas

+1

Не загружайте переменные автозагрузки (не 'defcustoms'), пожалуйста, если это не * абсолютно * необходимо. – Stefan

ответ

2

Когда вы определяете ключевые слова для блокировки шрифтов, вы должны указать список записей. Так, если заменить:

(defvar use-keywords-1 '("use" . font-lock-keyword-face) 
    "First level of font-lock in Use") 

С ниже, он будет работать:

(defvar use-keywords-1 '(("use" . font-lock-keyword-face)) 
    "First level of font-lock in Use") 

Обратите внимание, что если вы не планируете написать действительно передовую систему, вам не нужно, чтобы обеспечить различные уровни, поэтому вы можете удалить переменные *-1.

(Только в случае, если вы еще не видели его уже, я хотел бы рекомендовать один из моих пакетов, font-lock-studio. Это интерактивный отладчик для шрифта блокировки ключевых слов.)

+0

Вы уверены? Когда я тестирую ваше решение, я получаю 'неправильный аргумент типа: listp' в Emacs 24.3.1. – Thomas

+0

Я просто попробовал это в 24.5. Вы переоценили как «use-keywords-1», так и «use-font-lock-keywords»? В какой ситуации вы получили сообщение об ошибке? – Lindydancer

+0

Ах, я, вероятно, неправильно переоценил, потому что 'defvar' не сбрасывает значение, когда eval'd второй раз. 'setq' на помощь - теперь он работает красиво. Upvoted! – Thomas

 Смежные вопросы

  • Нет связанных вопросов^_^