2015-02-15 1 views
0

Короткий рассказ:Emacs основной режим для изумруда. Правильное выделение

Я студент, и на одном из моих курсов мы должны использовать/изучить emerald programming language. После быстрого поиска в Google я обнаружил, что кто-то уже написал для него основной режим. Link to the script

Проблема: После первой строки комментария «% ...» подсветка синтаксиса останавливается. Таким образом, все последующие строки не имеют подсветки синтаксиса. Это крайне неприятно.

Изумруд не имеет многострочных комментариев. Только одна строка комментариев является частью синтаксиса языка. Комментарий в одной строке начинается с «%» и заканчивается концом строки.

Я полный newb для всего основного режима, написав сценарии lisp для emacs ... и т. Д.

Вопрос: Может ли кто-нибудь помочь мне разобраться, что беззаботно идет с подсветкой синтаксиса? Почему он останавливается после первого комментария одной строки? И как это исправить?

Другой быстрый вопрос: Как мне сделать emacs выделять ключевые слова на другом языке? Например, объект, экспорт, операция, функция ... и т. Д.?

Заранее спасибо :)

Edit: Вот простой привет мир программа испытаний, чтобы продемонстрировать подсветку синтаксиса:

%this object pronts a hello message on screen 
const hello <- object hello 
    var n : integer <- 0 

    operation gs[] -> [ret: integer] 
    n <- n + 1 
    ret <- n 
    return 
    end gs 

    % a comment 
    % second comment 
    % third comment 
    initially 
    stdout.putstring["Hello World!\n"] 
    end initially 
end hello 

ответ

0

Первый вопрос: Вы можете одношаговый шрифт блокировки ключевые слова, используя пакет https://github.com/Lindydancer/font-lock-studio. Проблема может быть либо в одном из ключевых слов для блокировки шрифтов, либо в таблице синтаксиса (которая используется для выделения комментариев и строк). Если после запуска font-lock-studio (т. Е. До того, как будут применены ключевые слова для блокировки шрифтов), подсветка будет неправильной, тогда проблема будет связана с таблицей синтаксиса.

Второй вопрос: Вы можете позвонить font-lock-add-keywords в главном режиме, чтобы добавить новые ключевые слова для блокировки шрифтов. См. Переменную font-lock-keywords для описания формата. Однако описание несколько загадочное, поэтому я также рекомендую вам искать в сети хорошие примеры.

Обновление: После установки emerald-mode Я мог бы реплицировать проблемы, которые вы видели. Основная причина в том, что режим реализует основные функции Emacs несовместимым образом (тот, который снабжен Emacs, доведенный до трех аргументов). Если вы удалите следующую функцию и перезагрузите Emacs, функция font-locking, похоже, работает.

(defun looking-back (regexp) 
    "Simulates a looking-at, but works backwards" 
    (and (save-excursion 
    (re-search-backward regexp (min (point-min) (- (point) 100)) t)) 
     (= (point) (match-end 0)))) 

Обратите внимание, что я не мог бы найти это без font-lock-studio, как и обычный шрифт блокировки молча игнорирует ошибки, тогда как font-lock-studio входит в LISP отладчик (если debug-on-error не является ноль).

Обновление 2: Похоже, что emerald-mode определяет набор ключевых слов для блокировки шрифтов, но не добавляет их.Если добавить следующие строки в ваш файл инициализации, кажется, работает:

(defun my-emeral-mode-hook() 
    (setq font-lock-defaults '(emerald-font-lock-keywords nil t)) 
    (font-lock-mode 1)) 
(add-hook 'emerald-mode-hook 'my-emeral-mode-hook) 

Я заметил, что emerald-mode находится в остро нуждается в removation. Например, основной режим не вызывает kill-all-local-variables, что означает, что он сохраняет все локальные переменные из предыдущего основного режима. (Еще лучше было бы использовать define-derived-mode вместо того, чтобы определять режим с помощью простого defun.) Он устанавливает font-lock-keywords-case-fold-search как глобальные переменные, а не через font-lock-defaults т.д.

+0

Спасибо, у меня будет смотреть на это сегодня, когда я вернусь из школы :) – Sid

+0

Я не совсем понимаю, где вы объяснили, что проблема в таблице синтаксиса или нет. Вот моя ситуация: У меня есть это в моем файле .emacs: (загрузить "~/Downloads/font-lock-studio-master/font-lock-studio.el") (загрузить "~/.emacs. d/lisp/emerald-mode.el ") , а раскраска синтаксиса неправильна из-за перегрузки emerald-mode.el Теперь. Я запускаю font-lock-studio с помощью M-x font-lock-studio, и он разбивает мой экран, но подсветка синтаксиса уже не так. – Sid

+0

Кроме того, когда у меня есть как блокировка шрифта, так и изумрудный режим, загруженные при запуске, я запускаю emacs, затем Mx font-lock-studio Я получаю следующую ошибку: Введен отладчик - ошибка Lisp: (неправильное число аргументов (lambda (regexp) «Имитирует поиск, но работает в обратном направлении» (и (save-excursion (re-search-backward regexp (min (point-min) (- (point) 100)) t)) (= ((совпадение 0)))) 3) look-back ("" 78 t) font-lock-fontify-syntactically-region (# <маркер в 1 в * scratch *> # ) ... – Sid