Function: read-process-name
read-process-name is an autoloaded and byte-compiled function defined
in subr-x.el.gz.
Signature
(read-process-name PROMPT)
Documentation
Query the user for a process and return the process object.
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/subr-x.el.gz
;;;###autoload
(defun read-process-name (prompt)
"Query the user for a process and return the process object."
;; Currently supports only the PROCESS argument.
;; Must either return a list containing a process, or signal an error.
;; (Returning nil would mean the current buffer's process.)
(unless (fboundp 'process-list)
(error "Asynchronous subprocesses are not supported on this system"))
;; Local function to return cons of a complete-able name, and the
;; associated process object, for use with `completing-read'.
(cl-flet ((procitem
(p) (when (process-live-p p)
(let ((pid (process-id p))
(procname (process-name p))
(procbuf (process-buffer p)))
(and (eq (process-type p) 'real)
(cons (if procbuf
(format "%s (%s) in buffer %s"
procname pid
(buffer-name procbuf))
(format "%s (%s)" procname pid))
p))))))
;; Perform `completing-read' for a process.
(let* ((currproc (get-buffer-process (current-buffer)))
(proclist (or (process-list)
(error "No processes found")))
(collection (delq nil (mapcar #'procitem proclist)))
(selection (completing-read
(format-prompt prompt
(and currproc
(eq (process-type currproc) 'real)
(procitem currproc)))
collection nil :require-match nil nil
(car (seq-find (lambda (proc)
(eq currproc (cdr proc)))
collection))))
(process (and selection
(cdr (assoc selection collection)))))
(unless process
(error "No process selected"))
process)))