avalia expressões do Lisp

2

Eu executei o seguinte comando a partir da linha de comando esperando obter 5 (o resultado da expressão), mas em vez disso recebi uma mensagem de erro sobre "a função do símbolo não está definida".

emacs -e "(+ 2 3)"

Então, o que eu fiz de errado? Qual é a maneira correta de avaliar rapidamente uma expressão sem ter que realmente abrir o emacs?

Obrigado

    
por One Two Three 10.11.2013 / 06:45

2 respostas

4

O que você está procurando é o modo batch do Emacs, que instrui o Emacs a executar o programa Lisp fornecido (seja dado por -l FILE , -f FUNCTION ou --eval FORM ), e então saia. Do Manual de referência do Lisu do GNU Emacs :

The command-line option ‘-batch’ causes Emacs to run noninteractively. In this mode, Emacs does not read commands from the terminal, it does not alter the terminal modes, and it does not expect to be outputting to an erasable screen. The idea is that you specify Lisp programs to run; when they are finished, Emacs should exit. The way to specify the programs to run is with ‘-l file’, which loads the library named file, or ‘-f function’, which calls function with no arguments, or ‘--eval form’.

Any Lisp program output that would normally go to the echo area, either using message, or using prin1, etc., with t as the stream, goes instead to Emacs's standard error descriptor when in batch mode. Similarly, input that would normally come from the minibuffer is read from the standard input descriptor. Thus, Emacs behaves much like a noninteractive application program. (The echo area output that Emacs itself normally generates, such as command echoing, is suppressed entirely.)

E para um exemplo rápido:

me@host $ emacs -batch --eval '(message (format "1+2 equals %d" (+ 1 2)))'
1+2 equals 3
me@host $ 
    
por 12.11.2013 / 19:10
2

Se você está usando o GNU Emacs, então a sintaxe para a opção de linha de comando que avalia um sexp é essa (do manual do Emacs, nó Action Arguments ):

'--eval=EXPRESSION'
'--execute=EXPRESSION'
     Evaluate Lisp expression EXPRESSION.

Ou seja, você pode usar --eval=... ou --execute=... . AFAIK, você não pode usar -e... .

Você pode, no entanto, usar -e... (ou --eval ) com emacsclient . Por exemplo: emacsclient -e (text-mode)

(É melhor especificar a mensagem de erro exata que você obtém, assim como sua versão do Emacs, para obter mais ajuda.)

    
por 10.11.2013 / 18:26

Tags