Асинхронные подпроцессы получают ввод, когда он отправляется им Emacs, что делается с помощью функций в этом разделе. Вы должны указать процесс, в который нужно отправить ввод, и сами данные для отправки. Если подпроцесс запускает программу, данные появляются в стандартном вводе этой программы; для соединений данные отправляются подключенному устройству или программе.
Некоторые операционные системы имеют ограниченное пространство для буферизованного ввода в птй. В таких системах Emacs периодически отправляет EOF среди других символов, чтобы заставить их пройти. Для большинства программ эти EOF не причиняют вреда.
Ввод подпроцесса обычно кодируется с использованием системы кодирования перед тем, как подпроцесс его получит, подобно тексту, записанному в файл. Вы можете использовать set-process-coding-system, чтобы указать, какую систему кодирования использовать (см. Информация о процессе). В противном случае система кодирования берется из coding-system-for-write, если она не равна nil; или из механизма по умолчанию (см. Системы кодирования по умолчанию).
Иногда система не может принять ввод для данного процесса, потому что буфер ввода заполнен. Когда это происходит, функции отправки ждут короткое время, принимая вывод от подпроцессов, а затем пробуют снова. Это дает подпроцессу шанс прочитать больше ожидающего ввода и освободить место в буфере. Это также позволяет фильтрам (включая запущенный в данный момент), сторожам и таймерам работать — поэтому учитывайте это при написании кода.
В этих функциях аргумент process может быть процессом или именем процесса, или буфером или именем буфера (который представляет процесс через get-buffer-process). nil означает процесс текущего буфера.
Эта функция отправляет process содержимое string в качестве стандартного ввода. Она возвращает nil. Например, чтобы заставить буфер Shell выводить список файлов:
(process-send-string "shell<1>" "ls\n")
⇒ nil
Эта функция отправляет текст в области, определенной start и end, в качестве стандартного ввода в process.
Ошибка сигнализируется, если start и end не являются целыми числами или маркерами, указывающими на позиции в текущем буфере. (Неважно, какое число больше.)
Эта функция заставляет process увидеть конец файла во вводе. EOF следует после любого текста, который уже был отправлен ему. Функция возвращает process.
(process-send-eof "shell")
⇒ "shell"
Эта функция сообщит вам, запустил ли process, который не должен быть соединением, а реальным подпроцессом, дочерний процесс, который взял управление своим терминалом. Если это так, функция возвращает числовой идентификатор группы процессов переднего плана process; она возвращает nil, если Emacs может быть уверен, что это не так. Значение равно t, если Emacs не может определить, является ли это правдой. Эта функция сигнализирует об ошибке, если process является сетевым, последовательным или конвейерным соединением, или если подпроцесс неактивен.