Das einzige, was ich an Emacs nicht mag, ist der Mangel an Namespaces, also frage ich mich, ob ich sie alleine implementieren kann.
Dies ist mein erster Versuch, und es ist offensichtlich, dass ich nicht jedes Match eines Namens durch seine Präfix-Version ersetzen kann. aber was soll ich überprüfen? Ich kann nach Bindings mit (let) suchen und dann den gesamten Teilbaum markieren, aber was passiert, wenn jemand eine (my-let) -Funktion erstellt, die let verwendet? Ist meine Anstrengung zum Scheitern verurteilt? : (
Warum definieren meine Defuns die Funktion nicht? Muss ich bei jedem neuen Token etwas Ähnliches wie intern-Symbol ausführen?
Danke!
Das Hinzufügen von Namespaces erfordert mehr als das Voranstellen der Bezeichner mit den Namespace-Namen. Der Interpreter muss die Namespaces angeben können. Etwas Basteln muss auch in den Dolmetscher gehen. Das muss unter gnu.emacs.sources und / oder #emacs unter irc.freenode.org gründlich diskutiert werden.
Um Dinge wie my-let
oder my-defun
zu behandeln, müssen Sie diese Definitionen macroexpandieren, z. mit macroexpand-all
.
Wenn Sie die Funktionen nicht definieren können, müssen Sie intern
anstelle von make-symbol
verwenden (weil make-symbol
immer ein neues, eindeutiges, frisches, nicht unterbrochenes Symbol erstellt).
Dies ist eine feste Version des Codes von @ vpit3833, um Namespace-Unterstützung bereitzustellen (unter Verwendung des Hinweises von @Stefan). Es ist zu schön um halb fix zu gehen:)
%Vor%