emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
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.




  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 \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public 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).