Emacs, Namespaces und Defuns

8

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!

    
konr 10.12.2010, 15:54
quelle

4 Antworten

1

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.

    
vpit3833 12.12.2010, 03:23
quelle
5

Da dies das erste Google-Ergebnis für elisp namespaces ...

ist

Es gibt eine minimalistische Implementierung von Namespaces namens fakespace , die Sie auf elpa erhalten, die grundlegende Kapselung durchführt. Ich arbeite selbst an einem ehrgeizigen Projekt, das Sie hier abrufen können.

    
Chris Barrett 04.11.2012 08:45
quelle
3

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).

    
Stefan 07.11.2012 15:44
quelle
0

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%     
Arne Babenhauserheide 06.02.2013 14:29
quelle

Tags und Links