From 869b7a21b94ed112f6640c8f2711c2a68b661dea Mon Sep 17 00:00:00 2001 From: Kyle Meyer Date: Sat, 1 May 2021 00:07:09 -0400 Subject: [PATCH] org-open-file: Avoid make-process for Emacs 24 compatibility * lisp/org.el (org-open-file): Select a pipe connection type with process-connection-type rather than make-process, which isn't available until Emacs 25. This uses the alternative approach suggested by Eli Zaretskii in the thread that led to 5db61eb0f (org.el: Avoid xdg-open silent failure, 2021-03-21): https://orgmode.org/list/83y2g96ta6.fsf@gnu.org Reported-by: Ihor Radchenko Link: https://orgmode.org/list/87y2d2mqik.fsf@localhost --- lisp/org.el | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/lisp/org.el b/lisp/org.el index 05c52a2a7..492824f89 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -8740,20 +8740,15 @@ If the file does not exist, throw an error." (save-window-excursion (message "Running %s...done" cmd) ;; Handlers such as "gio open" and kde-open5 start viewer in background - ;; and exit immediately. Avoid `start-process' since it assumes - ;; :connection-type 'pty and kills children processes with SIGHUP - ;; when temporary terminal session is finished. - (make-process - :name "org-open-file" :connection-type 'pipe :noquery t - :buffer nil ; use "*Messages*" for debugging - :sentinel (lambda (proc event) - (when (and (memq (process-status proc) '(exit signal)) - (/= (process-exit-status proc) 0)) - (message - "Command %s: %s." - (mapconcat #'identity (process-command proc) " ") - (substring event 0 -1)))) - :command (list shell-file-name shell-command-switch cmd)) + ;; and exit immediately. Use pipe connnection type instead of pty to + ;; avoid killing children processes with SIGHUP when temporary terminal + ;; session is finished. + ;; + ;; TODO: Once minimum Emacs version is 25.1 or above, consider using + ;; the `make-process' invocation from 5db61eb0f929 to get more helpful + ;; error messages. + (let ((process-connection-type nil)) + (start-process-shell-command cmd nil cmd)) (and (boundp 'org-wait) (numberp org-wait) (sit-for org-wait)))) ((or (stringp cmd) (eq cmd 'emacs))