Function: async-start-process

async-start-process is a natively compiled function defined in async.el.

Signature

(async-start-process NAME PROGRAM FINISH-FUNC &rest PROGRAM-ARGS)

Documentation

Start the executable PROGRAM asynchronously named NAME. See async-start.

PROGRAM is passed PROGRAM-ARGS, calling FINISH-FUNC with the process object when done. If FINISH-FUNC is nil, the future object will return the process object when the program is finished. Set DEFAULT-DIRECTORY to change PROGRAM's current working directory.

Source Code

;; Defined in /nix/store/jhxqyr2zk061dl3wd3vm38lw3zin47b9-emacs-packages-deps/share/emacs/site-lisp/elpa/async-20260729.1431/async.el
;;;###autoload
(defun async-start-process (name program finish-func &rest program-args)
  "Start the executable PROGRAM asynchronously named NAME.  See `async-start'.
PROGRAM is passed PROGRAM-ARGS, calling FINISH-FUNC with the
process object when done.  If FINISH-FUNC is nil, the future
object will return the process object when the program is
finished.  Set DEFAULT-DIRECTORY to change PROGRAM's current
working directory."
  (let* ((buf (generate-new-buffer (concat "*" name "*")))
         (buf-err (generate-new-buffer (concat "*" name ":err*")))
         (prt-for-pwd async-prompt-for-password)
         (proc (let ((process-connection-type nil))
                 (make-process
                  :name name
                  :buffer buf
                  :stderr buf-err
                  :command (cons program program-args)
                  :noquery async-process-noquery-on-exit))))
    (set-process-sentinel
     (get-buffer-process buf-err)
     (lambda (proc _change)
       (unless (or async-debug (process-live-p proc))
         (kill-buffer (process-buffer proc)))))
    (with-current-buffer buf
      (set (make-local-variable 'async-callback) finish-func)
      (set (make-local-variable 'async-read-marker)
           (set-marker (make-marker) (point-min) buf))
      (set-marker-insertion-type async-read-marker nil)
      (set-process-sentinel proc #'async-when-done)
      ;; Pass the value of `async-prompt-for-password' to the process
      ;; filter fn through the lexical local var prt-for-pwd (Issue#182).
      (set-process-filter proc (lambda (proc string)
                                 (async-read-from-client
                                  proc string prt-for-pwd)))
      (unless (string= name "emacs")
        (set (make-local-variable 'async-callback-for-process) t))
      proc)))