Passei muitas e muitas horas tentando obter qualquer tipo de regra / gramática / coisa de identação SMIE.
Existem exemplos de um modo pequeno, baseado em SMIE, de brinquedo ou esqueleto, com documentação sobre como ele realmente funciona ou alguma discussão sobre como usá-lo? Algo que, digamos, define uma expressão como uma sequência de tokens que termina em ponto-e-vírgula e um bloco como algumas expressões entre colchetes e nada mais. Realmente, realmente simples?
Perguntas específicas: ao usar smie-config-show-indent 90% das vezes, recebo a resposta ': list-intro "" -> nil'. Em que consiste a introdução de lista com base na sua definição de expressão ou lista de expressões? Por que diz zero e ainda recua as seguintes linhas? Como eu mudo isso?
Em segundo lugar: existe alguma relação entre minha gramática e minhas regras de smie? Suponho que exista porque ambos são passados para a configuração de smie, mas não consigo encontrar nenhuma maneira de dizer "quando você vê um 'bloco', recua o conteúdo", por exemplo, com base em uma gramática que identifica um bloco .
Em terceiro lugar, o SMIE parece ter muitas regras "implementadas". Apenas dar o pontapé inicial dá um tratamento geral de colchetes, chaves e parênteses, por exemplo. Existe alguma maneira de ver essas regras ou modificá-las? Ou é que a tabela de sintaxe está fazendo tudo isso e o SMIE literalmente não está fazendo absolutamente nada (o que estou começando a suspeitar).
Por fim, ao tentar depurar o SMIE, tento fazer um "editar, buffer de modo de avaliação, vá para o exemplo de código em outro buffer, ciclo MX <meu modo>, teste", mas parece que cada viagem não limpa as regras do o ciclo anterior. Como posso ter certeza de que o modo de definição derivada inicia em uma folha limpa? Eu tenho (matar todas as variáveis locais) lá, mas isso não parece suficiente e acabo tendo que fechar o emacs.
Não estou publicando nenhum exemplo do que tenho, porque não tenho nada que funcione vagamente, além do destaque (usando padrões de bloqueio de fonte, por isso não é nem SMIE, eu acho). Eu preciso de alguns passos de bebê de verdade.
lisp/progmodes/sh-script.el
parece usar smie.el
bastante. Eles também parecem documentar seu uso, então talvez esse seja um exemplo um pouco melhor?