Ответы:
Вы можете запустить фоновые процессы start-process
, которые не должны открывать буфер:
(start-process "process-name" "buffer-name" "program")
Имена процессов модифицируются, чтобы избежать дублирования при необходимости, поэтому не беспокойтесь об этом. Просто дайте ему имя, полезное для отладки в будущем!
Если вы дадите a "buffer-name"
, буфер будет создан, но не показан сразу. Это может быть удобно для управления процессами и просмотра результатов. Если вы вообще не хотите создавать буфер, передайте nil
имя буфера:
(start-process "process-name" nil "program")
"program"
в этом случае только имя программы (например, nautilus, caja, firefox) и "arg1 arg2 ..."
должно быть в четвертом позиционном аргументе start-process
. Я понял это, прочитав документацию :)
Как упоминал Тихон, (start-process)
это путь. Если вы не хотите создавать буфер, но по-прежнему хотите реагировать на состояние фонового процесса, вы также можете использовать его (set-process-sentinel)
. Вот модифицированный пример, который я беру из своей projector
посылки:
(set-process-sentinel (start-process "process-name" nil "command") #'output-message-sentinel)
(defun output-message-sentinel (process msg)
(when (memq (process-status process) '(exit signal))
(message (concat (process-name process) " - " msg))))
Из описания функции Emacs:
(set-process-sentinel PROCESS SENTINEL)
Give PROCESS the sentinel SENTINEL; nil for default.
The sentinel is called as a function when the process changes state.
It gets two arguments: the process, and a string describing the change.
GNU страницы руководства на процессы довольно хорошо для получения дополнительной информации.
set-process-sentinel
делает немного точнее? Я получил общее представление о наличии функции, которая управляет процессом, но я не до конца понимаю все детали. Благодарность!
M-x describe-function
и введете, set-process-sentinel
вы получите краткий ответ из документации Emacs: (set-process-sentinel PROCESS SENTINEL) Дайте PROCESS сторожевого SENTINEL; ноль по умолчанию. Часовой вызывается как функция, когда процесс меняет состояние. Он получает два аргумента: процесс и строку, описывающую изменение.
C-h f
...
Нет необходимости менять способ запуска асинхронной команды. Emacs имеет общую способность , чтобы позволить вам контролировать , где , или любой буфер будет всплывающим, изменяя единую структуру данных, то display-buffer-alist
.
В приведенном ниже решении вы можете видеть, что функция действия display-buffer-no-window
(т. Е. Без всплывающего окна) настроена на привязку к любому буферу с началом имени *Asynchronous Shell Command*
(emacs добавляет инкрементный суффикс, когда его просят создать более одного).
Чтобы увидеть список других доступных параметров отображения, введите C-h f display-buffer
и найдите список «функций действия».
;; Buffers that I don't want popping up by default
(add-to-list 'display-buffer-alist
'("\\*Async Shell Command\\*.*" display-buffer-no-window))
start-process
команду sudo? Я попытался обертывание моего призыва кstart-process
в ,(let ((default-directory "/sudo::")) ... )
но он не работает для меня.