Ich habe viele, viele Stunden damit verbracht, zu versuchen, dass irgendeine Art von SMIE-Einrückungsregel / Grammatik / Sache funktioniert.
Gibt es Beispiele für einen SMIE-basierten Small-, Toy- oder Skeleton-Modus, in dem dokumentiert wird, wie er tatsächlich funktioniert, oder eine Diskussion darüber, wie er verwendet wird? Etwas, das beispielsweise einen Ausdruck als Zeichenfolge definiert, die mit einem Semikolon endet, und einen Block als Ausdrücke zwischen eckigen Klammern und sonst nichts. Wirklich ganz einfach?
Spezielle Fragen: Bei Verwendung von smie-config-show-indent erhalte ich 90% der Zeit die Antwort ': list-intro "" -> nil'. Worauf basiert List-Intro bei der Definition eines Ausdrucks oder einer Liste von Ausdrücken? Warum steht dort nichts und die folgenden Zeilen werden immer noch eingerückt? Wie ändere ich es?
Zweitens: Gibt es eine Beziehung zwischen meiner Grammatik und meinen Smie-Regeln? Ich nehme an, dass dies der Fall ist, weil beide in das Smie-Setup übernommen wurden, aber ich finde keine Möglichkeit zu sagen: "Wenn Sie einen 'Block' sehen, rücken Sie den Inhalt ein", zum Beispiel basierend auf einer Grammatik, die einen Block identifiziert .
Drittens scheinen in SMIE viele Regeln "eingebrannt" zu sein. Durch einfaches Anklicken werden beispielsweise Klammern, Klammern und Klammern allgemein behandelt. Gibt es eine Möglichkeit, diese Regeln zu sehen oder zu ändern? Oder ist es so, dass die Syntaxtabelle all dies tut und SMIE buchstäblich gar nichts tut (was ich zu vermuten beginne)?
Beim Versuch, SMIE zu debuggen, versuche ich schließlich, einen "Editier-, Auswertungsmodus-Puffer", einen Testzyklus für Beispielcode in einem anderen Puffer, MX <my mode>, durchzuführen der vorherige Zyklus. Wie kann ich sicher sein, dass der abgeleitete Definitionsmodus von einem leeren Blatt ausgeht? Ich habe (kill-all-local-variables) da drin, aber es scheint nicht genug zu sein und am Ende muss ich Emacs schließen.
Ich poste keine Beispiele für das, was ich habe, weil ich nichts habe, was auch nur vage funktioniert, abgesehen von Hervorheben (mit Font-Lock-Standardeinstellungen, also ist es vermutlich nicht einmal wirklich SMIE). Ich brauche ein paar richtige kleine Schritte.
quelle
lisp/progmodes/sh-script.el
essmie.el
ziemlich umfangreich zu sein scheint . Sie scheinen auch ihre Verwendung zu dokumentieren, vielleicht ist das ein etwas besseres Beispiel?Antworten:
Ein Modus, in dem SMIE häufig verwendet wird, ist https://github.com/elixir-lang/emacs-elixir. Sie sind sich jedoch nicht sicher, ob es wirklich funktioniert - siehe die Liste der Fehler im Zusammenhang mit Einrückungen.
quelle
Sie könnten mit so etwas beginnen
quelle