43.17 Режим пакетной обработки

Параметр командной строки -batch заставляет Emacs работать неинтерактивно. В этом режиме Emacs не считывает команды из терминала, не изменяет режимы терминала и не ожидает вывода на экран, который можно стереть. Идея в том, что вы указываете программы Lisp для выполнения; когда они завершатся, Emacs должен выйти. Способы указания программ для выполнения — это -l file, который загружает библиотеку с именем file, или -f function, который вызывает function без аргументов, или --eval=form.

Переменная: noninteractive

Эта переменная не равна nil, когда Emacs работает в режиме пакетной обработки.

Если указанная программа Lisp сигнализирует о необработанной ошибке в режиме пакетной обработки, Emacs завершает работу с ненулевым кодом выхода после вызова отладчика Lisp, который выводит трассировку стека Lisp (см. Вызов отладчика) в поток стандартной ошибки:

$ emacs -Q --batch --eval '(error "foo")'; echo $?

Error: error ("foo")
mapbacktrace(#f(compiled-function (evald func args flags) #<bytecode -0x4f85c5
7c45e2f81>))
debug-early-backtrace()
debug-early(error (error "foo"))
signal(error ("foo"))
error("foo")
eval((error "foo") t)
command-line-1(("--eval" "(error \"foo\")"))
command-line()
normal-top-level()
foo
255

Любой вывод программы Lisp, который обычно направляется в область эхо, используя message или prin1 и т. д. с t в качестве потока (см. Потоки вывода), вместо этого направляется в стандартные дескрипторы Emacs в режиме пакетной обработки: message записывает в дескриптор стандартной ошибки, в то время как prin1 и другие функции вывода записывают в стандартный вывод. Аналогично, ввод, который обычно поступает из минибуфера, считывается из дескриптора стандартного ввода. Таким образом, Emacs ведет себя очень похоже на неинтерактивную приложение-программу. (Вывод области эхо, который Emacs сам обычно генерирует, например, эхо команд, полностью подавляется.)

Не-ASCII текст, записанный в стандартные дескрипторы вывода или ошибки, по умолчанию кодируется с использованием locale-coding-system (см. Локальные настройки), если он не равен nil; это можно переопределить, привязав coding-system-for-write к выбранной вами системе кодирования (см. Явное кодирование и декодирование).

В режиме пакетной обработки Emacs увеличит значение переменной gc-cons-percentage с значения по умолчанию 0.1 до 1.0. Задания пакетной обработки, которые должны работать долго, следует снова настроить этот лимит вниз, потому что это означает, что по умолчанию будет выполнено меньше сборки мусора (и будет потребляться больше памяти).