Pregunta

Ahora mismo escribo expresiones en el búfer * scratch * y las pruebo evaluando con C-x C-e . Realmente agradecería tener un intérprete interactivo como SLIME o irb, en el que podría probar las expresiones de Emacs Lisp.

¿Fue útil?

Solución

Es fácil evaluar las expresiones Lisp en el Modo Inferior Emacs-Lisp:

M-x ielm

Puede leer más sobre esta función en Emacs sección del manual sobre " Interacción Lisp "

Otros consejos

Eshell es otra opción para un Elisp interactivo. Interprete.

M-x eshell

No solo es un shell de comandos como bash (o cmd.exe si está en Windows) sino que también puede escribir y ejecutar código Elisp de forma interactiva.

~ $ ls
foo.txt
bar.txt
~ $ (+ 1 1)
2

Su mejor apuesta es el búfer * scratch * . Puede hacerlo más como un REPL activando primero el depurador:

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

Luego use C-j en lugar de C-x C-e , que insertará el resultado de evaluar la expresión en el búfer en la línea después de la expresión. En lugar de cosas como el historial de comandos, * * * , etc., solo tienes que moverte alrededor del búfer * scratch * y editar.

Si quieres que cosas como * * * funcionen, más como un REPL habitual, prueba ielm .

M-x ielm

En el búfer * scratch * , simplemente escribe C-j para evaluar la expresión antes del punto.

Bueno, si está realmente interesado en un REPL literal para emacs, es posible escribir uno usando el modo de lote de emacs:

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

Puede llamar a esto desde la línea de comandos o, como parece querer, desde un búfer de emacs que ejecuta un shell:

kburton@hypothesis:~/projects/elisp$ emacs -batch -l test.el
Loading 00debian-vars...
> (defvar x '(lambda (y) (* y 100)))
 => x
> (funcall x 0.25)
 => 25.0
> 
kburton@hypothesis:~/projects/elisp$

Para ejecutar solo una expresión elisp, puedes usar M-: shortcut y ingresar la expresión en mini-buffer. Para otros casos, puede utilizar scratch buffer

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top