From: Maxim Nikulin <manikulin@gmail.com>
To: emacs-orgmode@gnu.org
Cc: 44824@debbugs.gnu.org
Subject: [PATCH] org.el: Avoid xdg-open silent failure
Date: Thu, 18 Feb 2021 19:56:03 +0700 [thread overview]
Message-ID: <eff43744-12e1-a359-39f2-6d8169350f28@gmail.com> (raw)
In-Reply-To: <83o8h56p7o.fsf__8661.17158891342$1612110869$gmane$org@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 1276 bytes --]
On 31/01/2021 23:33, Eli Zaretskii wrote:
>> From: Maxim Nikulin <m.a.nikulin@gmail.com>
>> Date: Sun, 31 Jan 2021 22:57:57 +0700
>> Cc: 44824@debbugs.gnu.org
>>
>>>> To fix the problem it is better to use (make-process :connection-type
>>>> 'pipe ...) that unfortunately has no higher level wrappers.
>>>
>>> Wouldn't it work to let-bind process-connection-type to nil around the
>>> function that starts the async subprocess?
>>
>> Sorry, for me it easier to reason how to express it in terms of system
>> calls and terminal process groups than if let-bind could override a
>> variable when lexical-bind is set to true.
>
> Well, I think we should try this, because if it works, it will show us
> a way to fix the problem. (I don't see how lexical-binding could
> interfere with let-binding.)
I have prepared a patch that uses `make-process'. I hope, error
reporting is improved a bit, but in the case of this particular problem
failure is still quiet since xdg-open exits successfully.
I could not estimate effect of such change on windows, so pipe process
is used only on linux. I am unsure concerning mac however.
Another question is if failure message should be suppressed when
`waiting-for-user-input-p' returns truth to keep user prompt and input
unaffected.
[-- Attachment #2: open-file-pipe-process.patch --]
[-- Type: text/x-patch, Size: 2912 bytes --]
commit 0001bff24864ee16598b4701a05cf40e9abc83af
Author: Max Nikulin <manikulin@gmail.com>
Date: Wed Feb 17 16:35:58 2021 +0000
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.
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
+of `make-process'."
+ (unless (string-match "finished" event)
+ (message "Command %s: %s."
+ (mapconcat 'identity (process-command proc) " ")
+ (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
+ ;; 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 '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))
next prev parent reply other threads:[~2021-02-18 12:56 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-23 17:40 bug#44824: 27.1; Org export as pdf and open file does not open it Geraldo Biotti
2020-11-23 18:37 ` bug#44824: More info gbiotti
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:15 ` Maxim Nikulin
2021-01-31 11:37 ` tomas
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
2021-01-31 17:07 ` Maxim Nikulin
[not found] ` <83o8h56p7o.fsf__8661.17158891342$1612110869$gmane$org@gnu.org>
2021-02-18 12:56 ` bug#44824: [PATCH] org.el: Avoid xdg-open silent failure Maxim Nikulin
2021-02-18 12:56 ` Maxim Nikulin [this message]
2021-02-18 14:48 ` 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-02-19 16:45 ` Maxim Nikulin
2021-02-19 14:54 ` Eli Zaretskii
2021-02-19 12:29 ` Maxim Nikulin
2021-03-19 3:50 ` Kyle Meyer
2021-03-20 15:45 ` Maxim Nikulin
2021-03-20 15:45 ` Maxim Nikulin
2021-03-21 15:01 ` Kyle Meyer
2021-03-21 15:01 ` Kyle Meyer
2021-03-19 3:50 ` Kyle Meyer
2021-01-30 13:49 ` bug#44824: 27.1; Org export as pdf and open file does not open it Eli Zaretskii
2021-01-30 16:39 ` 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
2021-01-30 8:42 ` Eli Zaretskii
[not found] ` <108399a5-66ad-eee6-572b-b3f2181e4e6c__47986.5006914892$1611843550$gmane$org@gmail.com>
2021-01-28 16:10 ` Maxim Nikulin
2021-01-28 3:02 ` Lars Ingebrigtsen
[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
2021-01-27 12:14 ` Maxim Nikulin
2021-01-27 16:21 ` Glenn Morris
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=eff43744-12e1-a359-39f2-6d8169350f28@gmail.com \
--to=manikulin@gmail.com \
--cc=44824@debbugs.gnu.org \
--cc=emacs-orgmode@gnu.org \
/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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.