Я потратил много-много часов, пытаясь заставить работать любое правило / грамматику / отступы SMIE.
Есть ли примеры маленького, игрушечного или скелетного режима на основе SMIE с документацией о том, как он на самом деле работает, или какие-либо дискуссии о том, как его использовать? Что-то, что, скажем, определяет выражение как строку токенов, заканчивающуюся точкой с запятой, а блок - как некоторые выражения в скобках и ничего больше. Действительно, действительно просто?
Конкретные вопросы: при использовании smie-config-show-indent в 90% случаев я получаю ответ ': list-intro "" -> nil'. На чем основано определение list-int для выражения или списка выражений? Почему он говорит ноль и все еще делает отступ в следующих строках? Как я могу изменить это?
Во-вторых: есть ли связь между моей грамматикой и моими смайликами? Я предполагаю, что это происходит потому, что они оба передаются в smie-setup, но я не могу найти никакого способа сказать «когда вы видите« блок », сделайте отступ содержимого», например, на основе грамматики, которая идентифицирует блок ,
В-третьих, у SMIE, похоже, много правил, «запеченных». Например, простое включение дает общую обработку скобок, скобок и скобок. Есть ли способ увидеть эти правила или изменить их? Или это то, что синтаксическая таблица делает все это, а SMIE буквально ничего не делает (что я начинаю подозревать).
Наконец, при попытке отладки SMIE я пытаюсь выполнить буфер «edit, eval mode», перейти к примеру кода в другом буфере, цикл MX <my mode>, test », но кажется, что при каждом обходе не удаляются правила из предыдущий цикл. Как я могу быть уверен, что define-производный-режим начинается с чистого листа? У меня там есть (kill-all-local-variable), но этого недостаточно, и мне приходится закрывать emacs.
Я не публикую никаких примеров того, что у меня есть, потому что у меня нет ничего, что даже расплывчато работает, кроме выделения (используя font-lock-defaults, так что это даже не SMIE, я думаю). Мне нужны настоящие детские шаги.
lisp/progmodes/sh-script.el
кажется, использовать smie.el
довольно широко. Они также, кажется, документируют свое использование, так что, может быть, это может быть несколько лучшим примером?