2008-09-28 4 views

Antwort

1

Geben Sie im Puffer *scratch* einfach C-j ein, um den Ausdruck vor dem Punkt zu bewerten.

0

Nun, wenn Sie für Emacs in einem wörtlichen REPL wirklich interessiert sind, ist es möglich, ein mit dem -batch Modus von Emacs zu schreiben:

(require 'cl) 

(defun read-expression() 
    (condition-case 
     err 
     (read-string "> ") 
    (error 
    (message "Error reading '%s'" form) 
    (message (format "%s" err))))) 

(defun read-expression-from-string (str) 
    (condition-case 
     err 
     (read-from-string str) 
    (error 
    (message "Error parsing '%s'" str) 
    (message (format "%s" err)) 
    nil))) 

(defun repl() 
    (loop for expr = (read-string "> ") then (read-expression) 
     do 
     (let ((form (car (read-expression-from-string expr)))) 
      (condition-case 
       err 
       (message " => %s" (eval form)) 
      (error 
      (message "Error evaluating '%s'" form) 
      (message (format "%s" err))))))) 

(repl) 

Sie können diesen Anruf aus der Befehlszeile oder, wie Sie scheinen zu wollen, innerhalb eines emacs-Puffer läuft eine Shell:

[email protected]:~/projects/elisp$ emacs -batch -l test.el 
Loading 00debian-vars... 
> (defvar x '(lambda (y) (* y 100))) 
=> x 
> (funcall x 0.25) 
=> 25.0 
> 
[email protected]:~/projects/elisp$ 
+0

Dies sieht komplizierter aus, als es sein sollte - Ausführen einer Shell, die eine andere Emacs im Batch-Modus, die die REPL, läuft alle in der Haupt-Emacs-Laufzeit ausgeführt wird. Wie auch immer, es löst mein Problem, also danke für Hilfe! –

+0

Diese REPL-Implementierung verarbeitet keine mehrzeiligen Eingaben. Wenn Sie nicht einen Ausdruck in einer einzigen Zeile Ende gibt es: Fehler bei der Analyse ‚(was auch immer‘ (End-of-Datei repl.el) Gibt es eine einfache Möglichkeit, das zu beheben –

8

Ihre beste Wette ist die *scratch* Puffer. Sie können es wie ein REPL mehr machen, indem man zuerst auf dem Debugger drehen:

M-x set-variable debug-on-error t 

Dann C-j anstelle von C-x C-e, die das Ergebnis der Auswertung des Ausdrucks in die Puffer auf der Linie nach dem Ausdruck einfügen wird. Anstatt Dinge wie Kommandogeschichte, * * * und so weiter, bewegen Sie sich einfach um den *scratch* Puffer und bearbeiten.

Wenn Sie möchten, dass Dinge wie * * * funktionieren, eher wie eine normale REPL, versuchen Sie ielm.

M-x ielm 
1

in der mehr über diese Funktion lesen Sie nur noch ein elisp Ausdruck laufen können M-: Verknüpfung und Eingabe des Ausdrucks in Mini-Puffer. Für andere Fälle können Sie verwenden scratch Puffer

14

Eshell ist eine weitere Option für einen interaktiven Elisp-Interpreter.

M-x eshell 

Es ist nicht nur ein Kommando-Shell wie bash (oder cmd.exe, wenn unter Windows), aber Sie können auch interaktiv schreiben und Elisp Code auszuführen.

+2

ok, das ist einfach ... faszinierend ... die Mischfähigkeit ... Ich werde definitiv mehr damit spielen müssen. Obwohl es eine indirekte Antwort auf die Frage ist, bin ich froh darüber Antwort ist hier! '$ echo (Name des Puffers) | sed -e 's/\ */X/g' 'gibt 'XeshellX' usw. – lindes