Ich habe einen einfachen Modus für den Umgang mit JSON geschrieben. Es verwendet die abgeleitete Maschinerie, um den größten Teil des Codes von json-mode wiederzuverwenden. Eine Ergänzung ist jedoch, dass Sie elisp in den JSON-Text einfügen können, der zum Zeitpunkt der JSON-Übermittlung ausgewertet wird. Zum Beispiel sieht ein Auszug aus dem json so aus:
{
"parameters": {
"IRC_USER": "stsquad",
"PUB_KEY": `(format "\"%s\"" (s-trim (shell-command-to-string "cat ~/.ssh/id_rsa.pub")))`
}
}
Derzeit ist die Syntaxhervorhebung dieses Textes unterbrochen, da der JSON-Syntax-Hightlighter vom Elisp geworfen wird. Ich möchte eine verschachtelte Syntaxtabelle einrichten, damit das Elisp innerhalb der Escape-Zeichen ordnungsgemäß als Elisp erkannt wird (in diesem Fall habe ich `gewählt). Ich verstehe, dass Sie char-Tabellen (aus denen Syntax-Tabellen erstellt werden) mit etwas verbinden können wie:
(defvar lava-mode-syntax-table
(let ((json-table (copy-syntax-table json-mode-syntax-table))
(elisp-table (copy-syntax-table lisp-mode-syntax-table)))
(set-char-table-parent elisp-table json-table)
(modify-syntax-entry ?` "(`" json-table)
(modify-syntax-entry ?` ")`" json-table)
json-table)
"LAVA Mode syntax table.
This is a combination of json-mode-syntax-table with an escape into
lisp-mode-syntax table for the embedded elisp.")
Aber ich verstehe nicht, wie ich die Syntaxtabelle ändern kann, um die untergeordnete Syntax-Tabelle (elisp) zwischen den Escape-Zeichen zu verwenden?