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.
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"
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
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
Dans le *scratch*
buffer, il suffit de taper C-j pour évaluer l'expression avant le point.
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
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$