12 votes

Évaluer une expression emacs lisp sur la ligne de commande

Je suis un novice en matière d'emacs. Je travaille avec emacs-24.1 sur redhat linux, et j'essaie d'évaluer une expression elisp. Ce que je veux qu'emacs fasse, c'est évaluer l'expression elisp sans lancer emacs lui-même. J'essaie plusieurs choses

emacs --eval '(+ 2 3)'

Je ne sais pas si emacs évalue l'expression, mais le résultat n'est pas affiché sur la console et la fenêtre emacs s'affiche. J'ai ensuite essayé ceci

emacsclient --eval '(+ 2 3)'

Le client Emacs attend un serveur. Il n'a pas pu trouver le serveur et a donc lancé une erreur (can't find socket. start server etc). J'ai donc lancé un serveur (le nom du serveur est SERVER) et j'ai relancé emacsclient.

emacsclient --server-file=SERVER -e '(+ 2 3)'

Cette fois, emacs a évalué l'expression et a imprimé le résultat sur la console. C'est parce qu'emacs utilise le serveur existant pour évaluer l'expression. Maintenant, j'ai un problème lorsque le serveur n'est pas en cours d'exécution.

emacsclient --server-file=ANOTHER_SERVER -e '(+ 2 3)' -a emacs

Cette fois, je n'obtiens aucune erreur sur la console. Emacs lance une nouvelle fenêtre, à cause de -a (mon .emacs contient la commande (server-start) et le nom du serveur est ANOTHER_SERVER). Mais emacs essaie ensuite d'éditer le fichier (+ 2 3). Cela apparaît sur la ligne de mode. Je suis confus. emacsclient --help m'a montré ceci

-e, --eval              Evaluate the FILE arguments as ELisp expressions

et c'est ce que dit le manuel d'emacs.

'-e'
'--eval'
Tell Emacs to evaluate some Emacs Lisp code, instead of visiting some files.
When this option is given, the arguments to emacsclient are interpreted as a
list of expressions to evaluate, not as a list of files to visit.

Je ne sais pas comment procéder. Comme je l'ai dit, mon but est d'évaluer une expression elisp sans lancer emacs. Est-ce possible ?

11voto

Randy Morris Points 16975

Après quelques essais, il semble que vous puissiez utiliser --batch pour qu'emacs envoie tous les messages sur stderr. Vous pouvez alors appeler message pour imprimer des choses sur stderr où vous pourrez les voir. Votre exemple deviendrait emacs --batch --eval '(message (number-to-string (+ 2 3)))' et le résultat sera imprimé sur stderr.

Si vous essayez de rediriger la sortie vers un fichier, vous devrez rediriger stderr au lieu de stdout en utilisant 2> au lieu de > .

7voto

Keith Flower Points 1524

Essayer

emacs --batch --eval '(print (+ 2 3))'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X