Pergunta

Agora eu escrever expressões no buffer *scratch* e testá-los através da avaliação com C-x C-e . Eu realmente aprecio ter um intérprete interativo como SLIME ou irb, no qual eu poderia testar expressões Emacs Lisp.

Foi útil?

Solução

É fácil avaliar expressões Lisp em Inferior Emacs-Lisp Mode:

M-x ielm

Você pode ler mais sobre este recurso no Emacs seção do manual sobre "Interação Lisp"

Outras dicas

eShell é outra opção para um Elisp interativo intérprete.

M-x eshell

Não é apenas um shell de comando como bash (ou cmd.exe se no Windows), mas você também pode interativamente escrever e executar código Elisp.

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

Sua melhor aposta é o buffer *scratch*. Você pode torná-lo mais como um REPL pela primeira viragem no depurador:

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

Em seguida, utilizar em vez de C-j C-x C-e, que irá inserir o resultado da avaliação da expressão para o tampão na linha após a expressão. Em vez de coisas como histórico de comandos, * * * e assim por diante, você só mover o buffer *scratch* e editar.

Se você quiser coisas como * * * ao trabalho, mais como um REPL de costume, tentativa ielm.

M-x ielm

o tampão *scratch*, apenas do tipo C-j para avaliar a expressão antes do ponto.

Bem, se você está realmente interessado em um REPL literal para o Emacs é possível escrever um usando o modo -batch 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)

Você pode chamar isso na linha de comando, ou, como você parece querer, de dentro de uma emacs tampão executando um 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 executar apenas uma expressão elisp você pode usar M-: atalho e digitar a expressão no mini-buffer. Para outros casos, você pode usar zero tampão

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top