2016-11-29 5 views
1

Angenommen, ich habe einen Emacs Puffer, der den folgenden Text enthält:emacs: Pufferinhalte als s-Ausdruck auswerten?

'(1 2 3) 

ich den Inhalt dieses Puffers als Lisp exprerssion bewerten möchte (ein S-Ausdruck). Wenn ich (eval (Puffer-string)) aufrufen, wird das Ergebnis einfach wie die folgende Zeichenfolge ausgewertet:

"'(1 2 3)" 

ich das Ergebnis wollen als Lisp-Anweisung ausgewertet werden. In diesem Beispiel möchte ich, dass das Ergebnis eine 3-Elemente-Liste und keine Zeichenfolge ist.

Ich habe nicht herausgefunden, wie das geht. Irgendwelche Ideen?

Vielen Dank.

Antwort

2

Sie können (eval-buffer) verwenden, um den gesamten Puffer auszuwerten.eval-buffer ist nicht die Lösung dafür, weil es immer nil zurückgibt.

Wenn Sie eine Zeichenfolge durchlaufen möchten, können Sie read-from-string verwenden. Da, dass beide zurückgibt, was es analysiert und der Index, wo es das Parsen gestoppt, als cons Zelle, in der Regel Sie car auf den Rückgabewert nennen wollen:

(eval (car (read-from-string (buffer-string)))) 
+1

(eval-Puffer) gibt Null, so kann ich nicht Verwenden Sie es, um den Wert des Ausdrucks im Puffer zurückzugeben. Allerdings funktioniert (eval (Auto (Lese-aus-String (Puffer-String)))) tatsächlich. Ich habe das Auslesen vergessen. Vielen Dank! – HippoMan

+0

Ah, sollte das getestet haben, bevor ich antwortete :) – legoscia

Verwandte Themen