Related to: https://lists.gnu.org/archive/html/emacs-devel/2014-09/msg00777.html in which I proposed a generalization of start-process, in a similar way to open-network-stream and make-network-process. My motivation behind that was to avoid temporary files in epg.el, by using file descriptors other than 0 and 1 (as you know, gpg has options --status-fd, --command-fd, --attribute-fd, etc. for that). In order to do that, I thought that it would be inevitable to change the calling convention of start-process. However, I hesitate to do such an intrusive change. So, here is an alternative approach: - Add a new process type 'pipe, which represents a bidirectional pipe, not associated with a child process when it is created. - Add a new global variable process-pipe-list, which associates additional pipe processes with a child process, when start-process is called. This is needed for setting the FD_CLOEXEC flag on the child ends of the pipes so they are not leaked to other processes created later, and to delete the pipe processes when the real process is deleted. Here is a basic usage of this: (setq pipe1 (make-pipe-process :name "pipe1")) ;=> # (process-contact pipe1) ;=> (17 20) (kill-buffer "pipe1") ;=>t (process-contact pipe1) ;=> (-1 -1) (setq pipe1 (make-pipe-process :name "pipe1")) ;=> # (process-contact pipe1) ;=> (17 20) (setq pipe2 (make-pipe-process :name "pipe2")) (let ((process-connection-type nil) (process-pipe-list (list pipe1 pipe2))) (start-process-shell-command "process" (current-buffer) (format "\ echo hello to stdout; \ echo hello to pipe1 >&%d; \ echo hello to pipe2 >&%d" (nth 1 (process-contact pipe1)) (nth 1 (process-contact pipe2))))) This delivers the output lines to the respective process buffers: "pipe1", "pipe2", and the current buffer. Would this kind of feature be acceptable? I guess Stefan is not happy with the new global variable, set with dynamic binding. Anyway, I'm attaching a couple of patches: one is the implementation, and thew other is the usage in epg.el. It's already working with gpg, while I haven't tested it with gpgsm. Comments would be appreciated. Regards, -- Daiki Ueno