From: Kyle Meyer <kyle@kyleam.com> To: Maxim Nikulin <manikulin@gmail.com> Cc: Eli Zaretskii <eliz@gnu.org>, 44824@debbugs.gnu.org Subject: bug#44824: [PATCH] org.el: Avoid xdg-open silent failure Date: Thu, 18 Mar 2021 23:50:06 -0400 [thread overview] Message-ID: <87zgyzls41.fsf@kyleam.com> (raw) In-Reply-To: <eff43744-12e1-a359-39f2-6d8169350f28@gmail.com> Maxim Nikulin writes: > org.el: Avoid xdg-open silent failure > > * lisp/org.el (org-open-file): Use 'pipe :connection-type instead of > 'pty to prevent killing of background process on handler exit. > > Problem happens only in some desktop environments where configured > through `org-file-apps' or mailcap handlers launches actual viewer > (as defined in .desktop files and obtained from mimeapps.list) > in background. E.g. xdg-open invokes "gio open" or kde-open5 for Gnome > or KDE accordingly and these handlers launches e.g. eog or okular in > background. As soon as main process exits, temporary terminal session > created by `start-process-shell-command' is terminated. As a result > background processes receive SIGHUP. > > Previously command were executed with no buffer, so the change > does not affect "needsterminal" and "copiousoutput" mailcap features, > they are not supported as earlier. > > If handler main process fails then show a message with exit reason. > Output (including error messages) is ignored as before. > Gtk application tends to report significant amount of failed asserts > hardly informative for majority of users. Thanks for the detailed commit message. A few comments in addition to Eli's advice to drop the (eq system-type 'gnu/linux) condition... > diff --git a/lisp/org.el b/lisp/org.el > index 7d8733448..a199a65c9 100644 > --- a/lisp/org.el > +++ b/lisp/org.el > @@ -8645,6 +8645,15 @@ opened in Emacs." > (when add-auto-mode > (mapcar (lambda (x) (cons (car x) 'emacs)) auto-mode-alist)))) > > +(defun org--error-process-sentinel (proc event) > + "Show a message if process failed (exited with non-zero code > +or killed by a signal. Pass the function as :SENTINEL argument Please rework the first sentence so that it fits on the first line, though I'd be in favor dropping the function and using a lambda in the make-process call. > +of `make-process'." > + (unless (string-match "finished" event) There's no need for substring matching, right? So it could be (equal event "finished\n") Or perhaps (when (and (memq (process-status proc) '(exit signal)) (/= (process-exit-status proc) 0)) ...) > + (message "Command %s: %s." > + (mapconcat 'identity (process-command proc) " ") s/'identity/#'identity/ > + (substring event 0 -1)))) > + > ;;;###autoload > (defun org-open-file (path &optional in-emacs line search) > "Open the file at PATH. > @@ -8766,7 +8775,17 @@ If the file does not exist, throw an error." > > (save-window-excursion > (message "Running %s...done" cmd) > - (start-process-shell-command cmd nil cmd) > + (if (eq system-type 'gnu/linux) > + ;; Handlers as "gio open" and kde-open5 start viewer in background s/as/such as/ ? > + ;; and exit immediately. Avoid start-process since it assumes ^ missing space > + ;; :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 s/'t/t/ > + :buffer nil ; use "*Messages*" for debugging > + :sentinel 'org--error-process-sentinel > + :command (list shell-file-name shell-command-switch cmd)) > + (start-process-shell-command cmd nil cmd)) > (and (boundp 'org-wait) (numberp org-wait) (sit-for org-wait)))) > ((or (stringp cmd) > (eq cmd 'emacs)) Thanks.
next prev parent reply other threads:[~2021-03-19 3:51 UTC|newest] Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top [not found] <CAFbX=UpDN9XtTr3osTC6B=V0trvatayw5WF0gMjGWAWfQQkAXg@mail.gmail.com> [not found] ` <f395c79a-c3e3-52c7-3fbb-608e94868e8e@gmail.com> 2021-01-27 3:36 ` bug#44824: 27.1; Org export as pdf and open file does not open it Lars Ingebrigtsen 2021-01-27 8:33 ` gbiotti 2021-01-28 3:02 ` Lars Ingebrigtsen 2021-01-28 11:20 ` gbiotti 2021-01-28 11:31 ` gbiotti 2021-01-29 4:51 ` Lars Ingebrigtsen 2021-01-29 6:59 ` Geraldo Biotti 2021-01-30 6:09 ` Lars Ingebrigtsen 2021-01-30 7:50 ` Geraldo Biotti 2021-01-30 8:42 ` Eli Zaretskii 2021-01-30 13:31 ` Maxim Nikulin 2021-01-30 13:49 ` Eli Zaretskii 2021-01-30 15:58 ` Maxim Nikulin 2021-01-30 16:28 ` Eli Zaretskii 2021-01-31 11:15 ` Maxim Nikulin 2021-01-31 11:37 ` tomas 2021-01-31 15:05 ` Eli Zaretskii 2021-01-31 15:17 ` Andreas Schwab 2021-01-31 15:34 ` Eli Zaretskii 2021-01-31 15:21 ` Lars Ingebrigtsen 2021-01-31 15:57 ` Maxim Nikulin 2021-01-31 16:33 ` Eli Zaretskii 2021-01-31 17:07 ` Maxim Nikulin [not found] ` <83o8h56p7o.fsf__8661.17158891342$1612110869$gmane$org@gnu.org> 2021-02-18 12:56 ` [PATCH] org.el: Avoid xdg-open silent failure Maxim Nikulin 2021-02-18 14:48 ` bug#44824: " Eli Zaretskii [not found] ` <83a6s15t51.fsf__31631.6350990505$1613659778$gmane$org@gnu.org> 2021-02-19 12:29 ` Maxim Nikulin 2021-02-19 14:54 ` Eli Zaretskii 2021-02-19 16:45 ` Maxim Nikulin 2021-03-19 3:50 ` Kyle Meyer [this message] 2021-03-20 15:45 ` Maxim Nikulin 2021-03-21 15:01 ` Kyle Meyer 2021-01-30 16:39 ` bug#44824: 27.1; Org export as pdf and open file does not open it gbiotti 2021-01-30 18:50 ` Bhavin Gandhi 2021-01-31 7:17 ` Lars Ingebrigtsen 2021-01-31 7:39 ` Tim Cross 2021-01-31 9:09 ` tomas [not found] ` <108399a5-66ad-eee6-572b-b3f2181e4e6c__47986.5006914892$1611843550$gmane$org@gmail.com> 2021-01-28 16:10 ` Maxim Nikulin [not found] ` <87y2gfcape.fsf_-___1545.58022493205$1611718675$gmane$org@gnus.org> 2021-01-27 12:14 ` Maxim Nikulin 2021-01-27 13:33 ` Maxim Nikulin [not found] ` <0f4437bc-3e40-fe47-d6e7-d33c2fb7965a__46427.8968678386$1611759102$gmane$org@gmail.com> 2021-01-27 16:21 ` Glenn Morris
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style List information: https://www.orgmode.org/ * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=87zgyzls41.fsf@kyleam.com \ --to=kyle@kyleam.com \ --cc=44824@debbugs.gnu.org \ --cc=eliz@gnu.org \ --cc=manikulin@gmail.com \ --subject='Re: bug#44824: [PATCH] org.el: Avoid xdg-open silent failure' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Code repositories for project(s) associated with this inbox: https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).