Comment invoquer un interpréteur elisp interactif dans Emacs?

en ce moment j'écris des expressions dans le *scratch* tampon et les tester en évaluant avec C-xC-e. J'aimerais vraiment avoir un interprète interactif comme SLIME ou irb, dans lequel je pourrais tester les expressions Lisp D'Emacs.

37
demandé sur Bleeding Fingers 2008-09-28 07:59:52

6 réponses

il est facile d'évaluer les expressions Lisp en mode Emacs-Lisp inférieur:

M-x ielm

Vous pouvez en savoir plus sur cette fonctionnalité dans le manuel d'Emacs section "Lisp Interaction"

55
répondu Greg Mattes 2011-12-12 15:19:34

Eshell est une autre option pour un interprète Elisp interactif.

M-x eshell

Non seulement c'est un shell de commande comme bash (ou cmd.exe si sous Windows) mais vous pouvez aussi écrire et exécuter du code Elisp de manière interactive.

~ $ ls
foo.txt
bar.txt
~ $ (+ 1 1)
2
14
répondu Ray Vega 2010-01-19 00:42:47

votre meilleur pari est le *scratch* tampon. Vous pouvez le faire plus comme une réponse en activant d'abord le débogueur:

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

alors utilisez C-j au lieu de C-x C-e, qui permettra d'insérer le résultat de l'évaluation de l'expression dans le tampon sur la ligne après l'expression. Au lieu de choses comme l'histoire du commandement,* * * et ainsi de suite, il suffit de déplacer autour de l' *scratch* tampon et de la modifier.

Si vous voulez des choses comme * * * pour travailler, plutôt comme un REPL habituel, essayer ielm.

M-x ielm
8
répondu jfm3 2008-09-28 17:08:43

Dans le *scratch* buffer, il suffit de taper C-j pour évaluer l'expression avant le point.

1
répondu cjm 2008-09-28 04:20:16

pour lancer une seule expression elisp, vous pouvez utiliser le raccourci M-: et entrer l'expression dans mini-buffer. Pour d'autres cas vous pouvez utiliser scratch tampon

1
répondu Alex Ott 2008-11-04 08:55:19

Eh bien, si vous êtes vraiment intéressé par une réponse littérale pour emacs, il est possible d'en écrire une en utilisant le mode-batch d'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)

vous pouvez l'appeler depuis la ligne de commande, ou, comme vous semblez le vouloir, depuis un tampon emacs qui exécute 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$
0
répondu Kyle Burton 2008-09-28 04:26:09