* Bug in 9.5.3 org--file-default-apps @ 2022-05-15 16:49 Craig STCR 2022-05-16 4:53 ` Ihor Radchenko 0 siblings, 1 reply; 48+ messages in thread From: Craig STCR @ 2022-05-15 16:49 UTC (permalink / raw) To: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 958 bytes --] I believe a change to the last line of org--file-default-apps introduced in 9.5.3 is a bug. For example, the change prevents shell scripts from being recognized correctly, since the mailcap logic in org-file-apps-gnu is no longer included in org--file-default-apps. Best wishes, -Craig Stcr1 org.el 9.5.2 (defun org--file-default-apps () "Return the default applications for this operating system." (pcase system-type (`darwin org-file-apps-macos) (`windows-nt org-file-apps-windowsnt) ('org-file-apps-gnu))) org.el 9.5.3 (defun org--file-default-apps () "Return the default applications for this operating system." (pcase system-type (`darwin org-file-apps-macos) (`windows-nt org-file-apps-windowsnt) (_ org-file-apps-gnu))) diff 8701c8700 < ('org-file-apps-gnu))) --- > (_ org-file-apps-gnu))) [-- Attachment #2: Type: text/html, Size: 1363 bytes --] ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-15 16:49 Bug in 9.5.3 org--file-default-apps Craig STCR @ 2022-05-16 4:53 ` Ihor Radchenko [not found] ` <6615610d-93ae-171f-b554-3f4cc79354cc@gmail.com> 0 siblings, 1 reply; 48+ messages in thread From: Ihor Radchenko @ 2022-05-16 4:53 UTC (permalink / raw) To: Craig STCR; +Cc: emacs-orgmode Craig STCR <craig.stcr1@gmail.com> writes: > I believe a change to the last line of org--file-default-apps introduced > in 9.5.3 is a bug. For example, the change prevents shell scripts from > being recognized correctly, since the mailcap logic in org-file-apps-gnu > is no longer included in org--file-default-apps. Can you elaborate? In the past version org--file-default-apps returned nil on Linux, while now it returns the value of org-file-apps-gnu, as intended. What else did you expect? Best, Ihor ^ permalink raw reply [flat|nested] 48+ messages in thread
[parent not found: <6615610d-93ae-171f-b554-3f4cc79354cc@gmail.com>]
* Re: Bug in 9.5.3 org--file-default-apps [not found] ` <6615610d-93ae-171f-b554-3f4cc79354cc@gmail.com> @ 2022-05-16 8:33 ` Ihor Radchenko [not found] ` <86692975-4d5f-6933-3227-c6b208f76862@gmail.com> 0 siblings, 1 reply; 48+ messages in thread From: Ihor Radchenko @ 2022-05-16 8:33 UTC (permalink / raw) To: Craig STCR; +Cc: emacs-orgmode Craig STCR <craig.stcr1@gmail.com> writes: > 9.5.3 does not return org-file-apps-gnu because org-file-apps-gnu is not > quoted. Should be (and was in 9.5.2): > > 'org-file-apps-gnu > > but in 9.5.3 it is: > > _ org-file-apps-gnu Please try to run the following form: (pcase 'gnu/linux (`darwin org-file-apps-macos) (`windows-nt org-file-apps-windowsnt) ('org-file-apps-gnu)) ;; => nil and then (pcase 'gnu/linux (`darwin org-file-apps-macos) (`windows-nt org-file-apps-windowsnt) (_ org-file-apps-gnu)) ;; => ((remote . emacs) (system . mailcap) (t . mailcap)) The second case is returning a list, which org--file-default-apps supposed to return. The previous behaviour was erroneous. You may refer to M-x describe-function <RET> pcase <RET> to understand the code. Please, provide more details on the actual error you ran into. The change in the org--file-default-apps is not a bug. Best, Ihor ^ permalink raw reply [flat|nested] 48+ messages in thread
[parent not found: <86692975-4d5f-6933-3227-c6b208f76862@gmail.com>]
* Re: Bug in 9.5.3 org--file-default-apps [not found] ` <86692975-4d5f-6933-3227-c6b208f76862@gmail.com> @ 2022-05-16 11:57 ` Ihor Radchenko 2022-05-16 15:14 ` Max Nikulin [not found] ` <e9b4e88d-3807-9080-fa86-c297b17794cb@gmail.com> 1 sibling, 1 reply; 48+ messages in thread From: Ihor Radchenko @ 2022-05-16 11:57 UTC (permalink / raw) To: Craig STCR; +Cc: emacs-orgmode Craig STCR <craig.stcr1@gmail.com> writes: > OK, I'll take a look as you suggested as soon as I can. > > So the form in 9.5.2 was a bug? Yes, 9.5.2 version of that function was a bug. > The problem I encounter with the new form in 9.5.3 is that when opening > a shell script -- no file extension, e.g. /home/user/myscript -- 9.5.2 > would consult mailcap and open the script in Emacs. The mailcap entry is: > > application/x-shellscript; emacs27 %s; test=test -n "$DISPLAY" > > But with the new form in 9.5.3, /home/user/myscript is opened by > /bin/less, not emacs. I assume mailcap is not consulted. Which does > not work well. These behaviors are only for org. Outside of org, emacs > behaves correctly. mailcap does get consulted. What you are seeing happens because mailcap.el (built-in Emacs library) is only able to recognise mime-types by extension. So, your file is likely recognised as "nil" mimetype thus making Org mode fallback to default mailcap handler, which is /bin/less in your case. In Org 9.5.2 the error in org--file-default-apps made Org mode skip using mailcap and use the last possible fallback, which is opening in emacs. That fallback just happened to be the same with your setting in mailcap file. I guess that Org can also try to use `file' command (when available) to determine the mime type. Though ideally, it should be all handled by mailcap.el Would you mind writing to emacs-devel mailing list and asking to add the feature of using `file' command into mailcap.el? Best, Ihor ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-16 11:57 ` Ihor Radchenko @ 2022-05-16 15:14 ` Max Nikulin 2022-05-16 19:15 ` Craig STCR ` (2 more replies) 0 siblings, 3 replies; 48+ messages in thread From: Max Nikulin @ 2022-05-16 15:14 UTC (permalink / raw) To: Ihor Radchenko, Craig STCR; +Cc: emacs-orgmode On 16/05/2022 18:57, Ihor Radchenko wrote: > Craig STCR writes: >> But with the new form in 9.5.3, /home/user/myscript is opened by >> /bin/less, not emacs. I assume mailcap is not consulted. Which does >> not work well. These behaviors are only for org. Outside of org, emacs >> behaves correctly. > > mailcap does get consulted. What you are seeing happens because > mailcap.el (built-in Emacs library) is only able to recognise mime-types > by extension. So, your file is likely recognised as "nil" mimetype thus > making Org mode fallback to default mailcap handler, which is /bin/less > in your case. Sounds reasonable. However I just have tried a [[file:~/path/to/script]] link running Org main HEAD and the file is opened in emacs (26.3) other window. > I guess that Org can also try to use `file' command (when available) to > determine the mime type. Though ideally, it should be all handled by > mailcap.el Would you mind writing to emacs-devel mailing list and asking > to add the feature of using `file' command into mailcap.el? https://lists.gnu.org/archive/html/emacs-devel/2009-08/msg01057.html Re: using libmagic in Emacs? From: joakim Subject: Re: using libmagic in Emacs? Date: Mon, 24 Aug 2009 14:30:33 +0200 A never committed patch. It is sour from my point of view. https://lists.gnu.org/archive/html/emacs-devel/2009-08/msg01368.html From: Eli Zaretskii Subject: Re: using libmagic in Emacs? Date: Sun, 30 Aug 2009 06:09:23 +0300 >> From: Juri Linkov >> Date: Sun, 30 Aug 2009 02:19:12 +0300 >> >> I agree that running `file' is a simpler solution. > > PLEASE do not base Emacs infrastructure on external programs, unless > they come with Emacs. `file' is not available on every platform, and > even on those it is, the quality and extent of its database is unclear > and so cannot be relied upon. https://lists.gnu.org/archive/html/emacs-devel/2009-08/msg01072.html From: Richard Stallman > How hard would it be to change the code in Emacs to recognize these > using the existing mechanism? ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-16 15:14 ` Max Nikulin @ 2022-05-16 19:15 ` Craig STCR 2022-05-16 19:29 ` Craig STCR 2022-05-18 11:36 ` Ihor Radchenko 2 siblings, 0 replies; 48+ messages in thread From: Craig STCR @ 2022-05-16 19:15 UTC (permalink / raw) To: Max Nikulin, Ihor Radchenko; +Cc: emacs-orgmode On 5/16/22 11:14 AM, Max Nikulin wrote: > However I just have tried a [[file:~/path/to/script]] link running Org > main HEAD and the file is opened in emacs (26.3) other window. Hmmm. That's interesting. I upgraded from Emacs 26.x to 27.x at some point in the not-too-distant past. Maybe that explains it. ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-16 15:14 ` Max Nikulin 2022-05-16 19:15 ` Craig STCR @ 2022-05-16 19:29 ` Craig STCR 2022-05-17 16:03 ` Max Nikulin 2022-05-18 11:36 ` Ihor Radchenko 2 siblings, 1 reply; 48+ messages in thread From: Craig STCR @ 2022-05-16 19:29 UTC (permalink / raw) To: Max Nikulin, Ihor Radchenko; +Cc: emacs-orgmode On 5/16/22 11:14 AM, Max Nikulin wrote: > Sounds reasonable. However I just have tried a > [[file:~/path/to/script]] link running Org main HEAD and the file is > opened in emacs (26.3) other window. Hmmm. That's interesting. I upgraded from Emacs 26.x to 27.x at some point in the not-too-distant past. Maybe that explains it. I'm on ubuntu bionic, using emacs 27.1 from kelleyk emacs ppa. ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-16 19:29 ` Craig STCR @ 2022-05-17 16:03 ` Max Nikulin 0 siblings, 0 replies; 48+ messages in thread From: Max Nikulin @ 2022-05-17 16:03 UTC (permalink / raw) To: Craig STCR; +Cc: emacs-orgmode On 17/05/2022 02:29, Craig STCR wrote: > On 5/16/22 11:14 AM, Max Nikulin wrote: >> Sounds reasonable. However I just have tried a >> [[file:~/path/to/script]] link running Org main HEAD and the file is >> opened in emacs (26.3) other window. > > Hmmm. That's interesting. I upgraded from Emacs 26.x to 27.x at some > point in the not-too-distant past. Maybe that explains it. I'm on > ubuntu bionic, using emacs 27.1 from kelleyk emacs ppa. Craig, Have you tried it in Emacs-27 without your default config? I mean something like emacs -Q -L ~/src/org-mode/lisp test.org I do not think emacs version matters here. It works even with emacs-27 for me. ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-16 15:14 ` Max Nikulin 2022-05-16 19:15 ` Craig STCR 2022-05-16 19:29 ` Craig STCR @ 2022-05-18 11:36 ` Ihor Radchenko 2022-05-18 16:10 ` Max Nikulin 2 siblings, 1 reply; 48+ messages in thread From: Ihor Radchenko @ 2022-05-18 11:36 UTC (permalink / raw) To: Max Nikulin; +Cc: Craig STCR, emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: > On 16/05/2022 18:57, Ihor Radchenko wrote: >> Craig STCR writes: >>> But with the new form in 9.5.3, /home/user/myscript is opened by >>> /bin/less, not emacs. I assume mailcap is not consulted. Which does >>> not work well. These behaviors are only for org. Outside of org, emacs >>> behaves correctly. >> >> mailcap does get consulted. What you are seeing happens because >> mailcap.el (built-in Emacs library) is only able to recognise mime-types >> by extension. So, your file is likely recognised as "nil" mimetype thus >> making Org mode fallback to default mailcap handler, which is /bin/less >> in your case. > > Sounds reasonable. However I just have tried a [[file:~/path/to/script]] > link running Org main HEAD and the file is opened in emacs (26.3) other > window. The behaviour is dependent on the OS-level mailcap defaults. What does (mailcap-mime-info nil) return for you? Best, Ihor ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-18 11:36 ` Ihor Radchenko @ 2022-05-18 16:10 ` Max Nikulin 2022-05-19 13:39 ` Ihor Radchenko 0 siblings, 1 reply; 48+ messages in thread From: Max Nikulin @ 2022-05-18 16:10 UTC (permalink / raw) To: emacs-orgmode On 18/05/2022 18:36, Ihor Radchenko wrote: > Max Nikulin writes: > >> Sounds reasonable. However I just have tried a [[file:~/path/to/script]] >> link running Org main HEAD and the file is opened in emacs (26.3) other >> window. > > The behaviour is dependent on the OS-level mailcap defaults. What does > (mailcap-mime-info nil) return for you? view-mode run-mailcap --norun ~/path/to/script reports less. Craig wrote that he runs ubuntu as well (however even older LTS), so I do not expect significant difference. ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-18 16:10 ` Max Nikulin @ 2022-05-19 13:39 ` Ihor Radchenko 2022-05-19 14:45 ` Max Nikulin 0 siblings, 1 reply; 48+ messages in thread From: Ihor Radchenko @ 2022-05-19 13:39 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: > On 18/05/2022 18:36, Ihor Radchenko wrote: >> Max Nikulin writes: >> >>> Sounds reasonable. However I just have tried a [[file:~/path/to/script]] >>> link running Org main HEAD and the file is opened in emacs (26.3) other >>> window. >> >> The behaviour is dependent on the OS-level mailcap defaults. What does >> (mailcap-mime-info nil) return for you? > > view-mode > > run-mailcap --norun ~/path/to/script Note that mailcap.el does _not_ use run-mailcap or anything external. It is written purely in elisp. So, can you please report the output of M-: (mailcap-mime-info nil)? Best, Ihor ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-19 13:39 ` Ihor Radchenko @ 2022-05-19 14:45 ` Max Nikulin 2022-05-20 8:22 ` Ihor Radchenko 0 siblings, 1 reply; 48+ messages in thread From: Max Nikulin @ 2022-05-19 14:45 UTC (permalink / raw) To: emacs-orgmode On 19/05/2022 20:39, Ihor Radchenko wrote: > Max Nikulin writes: >> On 18/05/2022 18:36, Ihor Radchenko wrote: >>> >>> The behaviour is dependent on the OS-level mailcap defaults. What does >>> (mailcap-mime-info nil) return for you? >> >> view-mode ^^^^^^^^^ >> run-mailcap --norun ~/path/to/script > > Note that mailcap.el does _not_ use run-mailcap or anything external. It > is written purely in elisp. > > So, can you please report the output of M-: (mailcap-mime-info nil)? view-mode ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-19 14:45 ` Max Nikulin @ 2022-05-20 8:22 ` Ihor Radchenko 2022-05-20 11:31 ` Max Nikulin 0 siblings, 1 reply; 48+ messages in thread From: Ihor Radchenko @ 2022-05-20 8:22 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: >>> run-mailcap --norun ~/path/to/script >> >> Note that mailcap.el does _not_ use run-mailcap or anything external. It >> is written purely in elisp. >> >> So, can you please report the output of M-: (mailcap-mime-info nil)? > > view-mode Sorry, I did not consider that you customised mailcap-user-mime-data (I guess). No doubt your Emacs opens the script in other window. What about using emacs -Q? Best, Ihor ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-20 8:22 ` Ihor Radchenko @ 2022-05-20 11:31 ` Max Nikulin 2022-05-21 1:44 ` Ihor Radchenko 0 siblings, 1 reply; 48+ messages in thread From: Max Nikulin @ 2022-05-20 11:31 UTC (permalink / raw) To: emacs-orgmode On 20/05/2022 15:22, Ihor Radchenko wrote: > Max Nikulin <manikulin@gmail.com> writes: > >>>> run-mailcap --norun ~/path/to/script >>> >>> Note that mailcap.el does _not_ use run-mailcap or anything external. It >>> is written purely in elisp. >>> >>> So, can you please report the output of M-: (mailcap-mime-info nil)? >> >> view-mode > > Sorry, I did not consider that you customised mailcap-user-mime-data (I > guess). No doubt your Emacs opens the script in other window. > > What about using emacs -Q? It is the same with and without -Q and no, I have not customized `mailcap-user-mime-data', its value is nil, easy customization interface tells that it is the standard value. There is a chance that debian has some patch, but most of debian specific is disabled when -Q option is used. ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-20 11:31 ` Max Nikulin @ 2022-05-21 1:44 ` Ihor Radchenko 2022-05-21 14:56 ` Max Nikulin 2022-05-23 12:40 ` Craig STCR 0 siblings, 2 replies; 48+ messages in thread From: Ihor Radchenko @ 2022-05-21 1:44 UTC (permalink / raw) To: Max Nikulin, Craig STCR; +Cc: emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: > On 20/05/2022 15:22, Ihor Radchenko wrote: >> Max Nikulin <manikulin@gmail.com> writes: >> >>>>> run-mailcap --norun ~/path/to/script >>>> >>>> Note that mailcap.el does _not_ use run-mailcap or anything external. It >>>> is written purely in elisp. >>>> >>>> So, can you please report the output of M-: (mailcap-mime-info nil)? >>> >>> view-mode >> >> Sorry, I did not consider that you customised mailcap-user-mime-data (I >> guess). No doubt your Emacs opens the script in other window. >> >> What about using emacs -Q? > > It is the same with and without -Q and no, I have not customized > `mailcap-user-mime-data', its value is nil, easy customization interface > tells that it is the standard value. There is a chance that debian has > some patch, but most of debian specific is disabled when -Q option is used. Interesting. In any case, it confirms that mailcap behaviour depends on both Emacs settings and also system settings. As I understand now: 1. (mailcap-mime-info nil) in Emacs 26 returns 'view-mode disregarding ~/.mailcap 2. (mailcap-mime-info nil) in Emacs 27 returns "less %s" on my system unless I have ~/.mailcap, in which case it takes text/plain handler from ~/.mailcap 3. (mailcap-mime-info nil) in Emacs 28/29 returns 'fundamental-mode unless I have ~/.mailcap, in which case it takes text/plain handler from there Dear Craig, your issue will kind of disappear if you upgrade Emacs or provide plain/text handler in ~/.mailcap. On Org side, the very reason we call (mailcap-mime-info nil) with _nil_ argument is because mailcap.el does not recognise file types without extension. I think that we can prefer the output of `file' utility if it is available on the system. However, I am not sure what to do on Windows/Mac. Best, Ihor ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-21 1:44 ` Ihor Radchenko @ 2022-05-21 14:56 ` Max Nikulin 2022-05-22 4:10 ` [PATCH] " Ihor Radchenko 2022-05-23 12:40 ` Craig STCR 1 sibling, 1 reply; 48+ messages in thread From: Max Nikulin @ 2022-05-21 14:56 UTC (permalink / raw) To: emacs-orgmode On 21/05/2022 08:44, Ihor Radchenko wrote: > Max Nikulin writes: > >> It is the same with and without -Q and no, I have not customized >> `mailcap-user-mime-data', its value is nil, easy customization interface >> tells that it is the standard value. There is a chance that debian has >> some patch, but most of debian specific is disabled when -Q option is used. > > Interesting. In any case, it confirms that mailcap behaviour depends on > both Emacs settings and also system settings. You should be even more surprised, if I say that [[file:~/tstorg]] link is opened in emacs buffer in shell-script mode (emacs-27.1, org main HEAD) despite (mailcap-mime-info nil) nil actually it is a minimal LXC container with no mime-support package installed, so /etc/mailcap file is absent. Notice `mailcap-mime-data' has the following entries for a long time ("text" ("plain" (viewer . view-mode) (type . "text/plain")) ("plain" (viewer . fundamental-mode) (type . "text/plain")) The source of the problem is that Emacs-27 was released with the following bug: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=40247 mailcap-mime-data erased when parsing mime parts So `mailcap-parse-mailcaps' called from `mailcap-mime-info' erases predefined associations in Emacs-27. ^ permalink raw reply [flat|nested] 48+ messages in thread
* [PATCH] Re: Bug in 9.5.3 org--file-default-apps 2022-05-21 14:56 ` Max Nikulin @ 2022-05-22 4:10 ` Ihor Radchenko 2022-05-22 7:40 ` Max Nikulin 0 siblings, 1 reply; 48+ messages in thread From: Ihor Radchenko @ 2022-05-22 4:10 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 1315 bytes --] Max Nikulin <manikulin@gmail.com> writes: > On 21/05/2022 08:44, Ihor Radchenko wrote: >> Max Nikulin writes: >> >>> It is the same with and without -Q and no, I have not customized >>> `mailcap-user-mime-data', its value is nil, easy customization interface >>> tells that it is the standard value. There is a chance that debian has >>> some patch, but most of debian specific is disabled when -Q option is used. >> >> Interesting. In any case, it confirms that mailcap behaviour depends on >> both Emacs settings and also system settings. > > You should be even more surprised, if I say that [[file:~/tstorg]] link > is opened in emacs buffer in shell-script mode (emacs-27.1, org main > HEAD) despite > > (mailcap-mime-info nil) > nil > > The source of the problem is that Emacs-27 was released with the > following bug: > > https://debbugs.gnu.org/cgi/bugreport.cgi?bug=40247 > mailcap-mime-data erased when parsing mime parts > > So `mailcap-parse-mailcaps' called from `mailcap-mime-info' erases > predefined associations in Emacs-27. If I understand correctly, this extra complication does not affect most of the systems. I am not sure if we need to work around it. Also, I am attaching a patch to address the original issue. We can just use file command when available. WDYT? Best, Ihor [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-org-open-file-Use-file-command-to-determine-mime-typ.patch --] [-- Type: text/x-patch, Size: 1518 bytes --] From f69824559d62cb6963ff30f11ceb46303bf1b3d4 Mon Sep 17 00:00:00 2001 Message-Id: <f69824559d62cb6963ff30f11ceb46303bf1b3d4.1653192368.git.yantar92@gmail.com> From: Ihor Radchenko <yantar92@gmail.com> Date: Sun, 22 May 2022 12:04:35 +0800 Subject: [PATCH] org-open-file: Use file command to determine mime type, when available * lisp/org.el (org-open-file): Prefer file command to determine file type instead of relying on `mailcap-extension-to-mime'. Only fallback to the latter when file command is not available on the system. Fixes https://list.orgmode.org/874k1n2hpv.fsf@localhost/T/#mcc10df4ea7937360671e6dea8061153dee518807 --- lisp/org.el | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/org.el b/lisp/org.el index d7da8efc4..3102fe611 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -7975,7 +7975,12 @@ (defun org-open-file (path &optional in-emacs line search) (when (eq cmd 'mailcap) (require 'mailcap) (mailcap-parse-mailcaps) - (let* ((mime-type (mailcap-extension-to-mime (or ext ""))) + (let* ((mime-type (if (executable-find "file") + (shell-command-to-string + (format "%s --brief --mime-type %s" + (executable-find "file") + file)) + (mailcap-extension-to-mime (or ext "")))) (command (mailcap-mime-info mime-type))) (if (stringp command) (setq cmd command) -- 2.35.1 ^ permalink raw reply related [flat|nested] 48+ messages in thread
* Re: [PATCH] Re: Bug in 9.5.3 org--file-default-apps 2022-05-22 4:10 ` [PATCH] " Ihor Radchenko @ 2022-05-22 7:40 ` Max Nikulin 2022-05-26 4:23 ` [PATCH v2] " Ihor Radchenko 0 siblings, 1 reply; 48+ messages in thread From: Max Nikulin @ 2022-05-22 7:40 UTC (permalink / raw) To: emacs-orgmode On 22/05/2022 11:10, Ihor Radchenko wrote: > Max Nikulin writes: > >> The source of the problem is that Emacs-27 was released with the >> following bug: >> >> https://debbugs.gnu.org/cgi/bugreport.cgi?bug=40247 >> mailcap-mime-data erased when parsing mime parts >> >> So `mailcap-parse-mailcaps' called from `mailcap-mime-info' erases >> predefined associations in Emacs-27. > > If I understand correctly, this extra complication does not affect most > of the systems. I am not sure if we need to work around it. I would say that view-mode is quite reasonable default to open a "text/plain" file and this bug broke it. I do not think that Craig really wants a new emacs session for every followed link: application/x-shellscript; emacs27 %s; test=test -n "$DISPLAY" > Also, I am attaching a patch to address the original issue. We can just > use file command when available. WDYT? Ihor, have you manged to reproduce the original issue? Are links with explicit .txt suffix [[file:file.txt]] affected by the same problem? My environments sometimes behave in a way unexpected to you and I have not setup any tool to quickly launch transient virtual machines with no fear to "broke" current state, so I have not tried to debug the reported issue in its original form. I may be excessively suspicious. > diff --git a/lisp/org.el b/lisp/org.el > index d7da8efc4..3102fe611 100644 > --- a/lisp/org.el > +++ b/lisp/org.el > @@ -7975,7 +7975,12 @@ (defun org-open-file (path &optional in-emacs line search) > (when (eq cmd 'mailcap) > (require 'mailcap) > (mailcap-parse-mailcaps) > - (let* ((mime-type (mailcap-extension-to-mime (or ext ""))) > + (let* ((mime-type (if (executable-find "file") > + (shell-command-to-string > + (format "%s --brief --mime-type %s" > + (executable-find "file") > + file)) I hate elisp API related to executing of external processes because it encourages proliferation of unsafe code. What if the linked file name has some peculiarities and characters interpreted by shell? See [[file:/tmp/`touch /tmp/hacked`/test][here]] I can not say that I fully understand `org-open-file' code, so I am unsure if remote file name can appear here, e.g. /ssh:user@host:testfie or a file form an archive due to a relative link [[file:testfile]] from a remote .org file. When remote files are not an issue, it is safer to use functions that takes command arguments as a list of string, not the command as a ready to execute string. Unfortunately there is no helper returning a string and accepting a command as a list. > + (mailcap-extension-to-mime (or ext "")))) > (command (mailcap-mime-info mime-type))) > (if (stringp command) > (setq cmd command) P.S. `org-open-file' already has some problems with handling of some file names: Maxim Nikulin to emacs-orgmode. greedy substitution in org-open-file. Wed, 20 Jan 2021 23:08:35 +0700. https://list.orgmode.org/ru9ki4$t5e$1@ciao.gmane.io ^ permalink raw reply [flat|nested] 48+ messages in thread
* [PATCH v2] Re: Bug in 9.5.3 org--file-default-apps 2022-05-22 7:40 ` Max Nikulin @ 2022-05-26 4:23 ` Ihor Radchenko 2022-05-29 6:07 ` Max Nikulin 2022-05-29 7:07 ` [PATCH v2] Re: Bug in 9.5.3 org--file-default-apps Max Nikulin 0 siblings, 2 replies; 48+ messages in thread From: Ihor Radchenko @ 2022-05-26 4:23 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 4534 bytes --] Max Nikulin <manikulin@gmail.com> writes: > On 22/05/2022 11:10, Ihor Radchenko wrote: >> Max Nikulin writes: >> >>> The source of the problem is that Emacs-27 was released with the >>> following bug: >>> >>> https://debbugs.gnu.org/cgi/bugreport.cgi?bug=40247 >>> mailcap-mime-data erased when parsing mime parts >>> >>> So `mailcap-parse-mailcaps' called from `mailcap-mime-info' erases >>> predefined associations in Emacs-27. >> >> If I understand correctly, this extra complication does not affect most >> of the systems. I am not sure if we need to work around it. > > I would say that view-mode is quite reasonable default to open a > "text/plain" file and this bug broke it. I agree. However, I am already a bit lost with all the complications. This particular one does not appear to be directly relevant to the initial problem with a file with no extension. I'd prefer if this Emacs-27 issue were reported in a separate thread. >> Also, I am attaching a patch to address the original issue. We can just >> use file command when available. WDYT? > > Ihor, have you manged to reproduce the original issue? Are links with > explicit .txt suffix [[file:file.txt]] affected by the same problem? My > environments sometimes behave in a way unexpected to you and I have not > setup any tool to quickly launch transient virtual machines with no fear > to "broke" current state, so I have not tried to debug the reported > issue in its original form. > > I may be excessively suspicious. Yes, I have managed to reproduce the original issue. Kind of. We have the following in org-open-file: (when (eq cmd 'mailcap) (require 'mailcap) (mailcap-parse-mailcaps) (let* ((mime-type (mailcap-extension-to-mime (or ext ""))) (command (mailcap-mime-info mime-type))) (if (stringp command) (setq cmd command) (setq cmd 'emacs)))) with EXT being bound to file extension. When file does not have an extension (the original issue), (mailcap-extension-to-mime) returns nil. Then, (mailcap-mime-info nil) returns the same result with (mailcap-mime-info "text/plain"). It is hard-coded inside mailcap-mime-info. So, with the current default value of org-file-apps-gnu, files with no extension always use mime handler assigned to "text/plain" mimetype. In a way, it is not wrong - mailcap spec only considers file extension and has undefined behavior for files with no extension. However, it does not make sense from the user perspective. Hence, I am suggesting this patch. =file= command (when available) is more powerful and looks at the file contents, not just into its extension. >> + (let* ((mime-type (if (executable-find "file") >> + (shell-command-to-string >> + (format "%s --brief --mime-type %s" >> + (executable-find "file") >> + file)) > > I hate elisp API related to executing of external processes because it > encourages proliferation of unsafe code. What if the linked file name > has some peculiarities and characters interpreted by shell? > > See [[file:/tmp/`touch /tmp/hacked`/test][here]] Thanks for the heads up! Updated version of the patch is attached. > I can not say that I fully understand `org-open-file' code, so I am > unsure if remote file name can appear here, e.g. /ssh:user@host:testfie > or a file form an archive due to a relative link [[file:testfile]] from > a remote .org file. When remote files are not an issue, it is safer to > use functions that takes command arguments as a list of string, not the > command as a ready to execute string. Unfortunately there is no helper > returning a string and accepting a command as a list. org-file-apps-gnu defaults to ((remote . emacs) (system . mailcap) (t . mailcap)) All the "remote" files (including /ssh) will be opened in emacs. We should have no issue in this area. >> + (mailcap-extension-to-mime (or ext "")))) >> (command (mailcap-mime-info mime-type))) >> (if (stringp command) >> (setq cmd command) > > P.S. `org-open-file' already has some problems with handling of some > file names: > > Maxim Nikulin to emacs-orgmode. greedy substitution in org-open-file. > Wed, 20 Jan 2021 23:08:35 +0700. > https://list.orgmode.org/ru9ki4$t5e$1@ciao.gmane.io Agree. Though it is not directly related. Maybe you can bump that thread and mark is as a bug report to be listed on https://updates.orgmode.org/? Best, Ihor [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: v2-0001-org-open-file-Use-file-command-to-determine-mime-.patch --] [-- Type: text/x-patch, Size: 1572 bytes --] From 4aeff613c07d9025c5fc1f0b3851870a42d36869 Mon Sep 17 00:00:00 2001 Message-Id: <4aeff613c07d9025c5fc1f0b3851870a42d36869.1653538199.git.yantar92@gmail.com> From: Ihor Radchenko <yantar92@gmail.com> Date: Sun, 22 May 2022 12:04:35 +0800 Subject: [PATCH v2] org-open-file: Use file command to determine mime type, when available * lisp/org.el (org-open-file): Prefer file command to determine file type instead of relying on `mailcap-extension-to-mime'. Only fallback to the latter when file command is not available on the system. Fixes https://list.orgmode.org/874k1n2hpv.fsf@localhost/T/#mcc10df4ea7937360671e6dea8061153dee518807 --- lisp/org.el | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/org.el b/lisp/org.el index d7da8efc4..45a179a8a 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -7975,7 +7975,12 @@ (defun org-open-file (path &optional in-emacs line search) (when (eq cmd 'mailcap) (require 'mailcap) (mailcap-parse-mailcaps) - (let* ((mime-type (mailcap-extension-to-mime (or ext ""))) + (let* ((mime-type (if (executable-find "file") + (shell-command-to-string + (format "%s --brief --mime-type %s" + (executable-find "file") + (shell-quote-argument (convert-standard-filename file)))) + (mailcap-extension-to-mime (or ext "")))) (command (mailcap-mime-info mime-type))) (if (stringp command) (setq cmd command) -- 2.35.1 ^ permalink raw reply related [flat|nested] 48+ messages in thread
* Re: [PATCH v2] Re: Bug in 9.5.3 org--file-default-apps 2022-05-26 4:23 ` [PATCH v2] " Ihor Radchenko @ 2022-05-29 6:07 ` Max Nikulin 2022-05-30 14:00 ` [PATCH v3] " Ihor Radchenko 2022-05-29 7:07 ` [PATCH v2] Re: Bug in 9.5.3 org--file-default-apps Max Nikulin 1 sibling, 1 reply; 48+ messages in thread From: Max Nikulin @ 2022-05-29 6:07 UTC (permalink / raw) To: emacs-orgmode Ihor, Your patch may be an improvement, but it requires an additional fix, see below. However, in my opinion, it does not address original Craig's issue. The patch improves handling of *non-text* files requiring *external* viewers, while Craig complained that behavior for shell script is incorrect and his problem is tightly bound to erased `mailcap-mime-data'. I can not reproduce behavior he observed exactly, Org does not opens shell scripts by less, but it tries and silently (it is expected) fails. My results (emacs-27): 1. If there is no mailcap files at all, the script is opened in the same emacs session that is correct from my point of view. 2. If I add ~/.mailcap text/plain; less '%s'; needsterminal then I get silent failures Running less /etc/profile...done 3. With your patch and the following additional entry in ~/.mailcap (notice "text" instead of "application" and just "emacs") text/x-shellscript; emacs %s; test=test -n "$DISPLAY" new Emacs session is started. It is a problem but partially it is caused by incorrect mailcap configuration. Unlike "text/plain" that would be handled by view-mode unless `mailcap-mime-data' were erased in Emacs-27, "text/x-shellscript" is handled by less on my main system due to mailcap while I would expect same Emacs session. I read implementation of `org-open-file' once more and now I see that currently remote files can not be processed by mailcap code path even with custom `org-file-apps', so thank you for explanation. In some cases it may be handy to launch remote viewer from a host accessed through ssh, but let's leave it aside. > - (let* ((mime-type (mailcap-extension-to-mime (or ext ""))) > + (let* ((mime-type (if (executable-find "file") I would consider (and ... (not remp)) despite currently it is redundant. Just to mitigate consequences if other parts of this complicated function will be modified. On the other hand `start-process-shell-command' is not ready for remote files anyway, so major cleanup would be required. > + (shell-command-to-string > + (format "%s --brief --mime-type %s" > + (executable-find "file") > + (shell-quote-argument (convert-standard-filename file)))) It is not enough to cure my paranoia. However the following case is rather pathological mkdir 'Program Files' ln -s /usr/bin/file 'Program Files'/ PATH="$HOME/Program Files:$PATH" \ emacs -Q -L ~/src/org-mode/lisp/ ~/examples/org/open-script.org & Debugger entered--Lisp error: (wrong-type-argument stringp nil) string-match("/" nil 0) split-string(nil "/") mailcap-mime-info("/bin/bash: line 1: /home/ubuntu/Program: No such f...") (let* ((mime-type (if (executable-find "file") (shell-command-to-string (format "%s --brief --mime-type %s" (executable-find "file") (shell-quote-argument (convert-standard-filename file)))) (mailcap-extension-to-mime (or ext "")))) (command (mailcap-mime-info mime-type))) (if (stringp command) (setq cmd command) (setq cmd 'emacs))) > + (mailcap-extension-to-mime (or ext "")))) > Agree. Though it is not directly related. Maybe you can bump that thread > and mark is as a bug report to be listed on > https://updates.orgmode.org/? It is already tracked there as "org-open-file & org-file-apps multiple substitution bug" but my point was that great care is required otherwise a lot of issues may happen with shell command. Ihor Radchenko. Bug in 9.5.3 org--file-default-apps. Wed, 25 May 2022 14:18:10 +0800. https://list.orgmode.org/8735gy2l0d.fsf@localhost >> '>$ run-mailcap myscript' > > One comment. I do not personally have run-mailcap command on my system, > but searching for its docstring reveals > (http://www.linux-commands-examples.com/run-mailcap): > >>> If the mime-type is omitted, an attempt to determine the type is >>> made by trying to match the file’s extension with those in the >>> mime.types files. > > So, run-mailcap itself does not look inside the file and only checks the > extension. AFAIU. Correct me if I am wrong. It is a Debian extension. Local man page has the following statement (confirmed by code and strace): > If no mime-type is found, a last attempt will be done by running the > file command, if available. ^ permalink raw reply [flat|nested] 48+ messages in thread
* [PATCH v3] Re: Bug in 9.5.3 org--file-default-apps 2022-05-29 6:07 ` Max Nikulin @ 2022-05-30 14:00 ` Ihor Radchenko 2022-05-30 15:38 ` Max Nikulin 0 siblings, 1 reply; 48+ messages in thread From: Ihor Radchenko @ 2022-05-30 14:00 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 5563 bytes --] Max Nikulin <manikulin@gmail.com> writes: > However, in my opinion, it does not address original Craig's issue. The > patch improves handling of *non-text* files requiring *external* > viewers, while Craig complained that behavior for shell script is > incorrect and his problem is tightly bound to erased `mailcap-mime-data'. Ideally, we need a feedback from him. For emacs-27 specifically, we might need to work around the bug. However, I am not sure what would be the best way to do it. The easiest can be changing the default value of org-file-apps-gnu on Emacs 27 specifically to not use mailcap at all. But I am pretty sure that we can do better. > I can not reproduce behavior he observed exactly, Org does not opens > shell scripts by less, but it tries and silently (it is expected) fails. > > My results (emacs-27): > 1. If there is no mailcap files at all, the script is opened > in the same emacs session that is correct from my point of view. > 2. If I add ~/.mailcap > text/plain; less '%s'; needsterminal > then I get silent failures > Running less /etc/profile...done > 3. With your patch and the following additional entry in ~/.mailcap > (notice "text" instead of "application" and just "emacs") > text/x-shellscript; emacs %s; test=test -n "$DISPLAY" > new Emacs session is started. It is a problem but partially > it is caused by incorrect mailcap configuration. > Unlike "text/plain" that would be handled by view-mode > unless `mailcap-mime-data' were erased in Emacs-27, > "text/x-shellscript" is handled by less on my main system > due to mailcap while I would expect same Emacs session. I am confused here. org-file-apps-gnu says that we rely on mailcap: ((remote . emacs) (system . mailcap) (t . mailcap)) So, is (3) following what you would expect from mailcap (regardless whether it is incorrectly configured or not)? Wrong configuration of mailcap is none of Org business - we need not to be "smart" and fix user "errors". They may be deliberate. > I read implementation of `org-open-file' once more and now I see that > currently remote files can not be processed by mailcap code path even > with custom `org-file-apps', so thank you for explanation. In some cases > it may be handy to launch remote viewer from a host accessed through > ssh, but let's leave it aside. This is exactly why you can always customize org-file-apps. >> - (let* ((mime-type (mailcap-extension-to-mime (or ext ""))) >> + (let* ((mime-type (if (executable-find "file") > > I would consider (and ... (not remp)) despite currently it is redundant. > Just to mitigate consequences if other parts of this complicated > function will be modified. On the other hand > `start-process-shell-command' is not ready for remote files anyway, so > major cleanup would be required. I would be in favor of a cleanup (by someone™), but I am against redundancy. Such redundancy may mask bugs making them difficult to debug. Not to mention code readability. >> + (shell-command-to-string >> + (format "%s --brief --mime-type %s" >> + (executable-find "file") >> + (shell-quote-argument (convert-standard-filename file)))) > > It is not enough to cure my paranoia. However the following case is > rather pathological > > mkdir 'Program Files' > ln -s /usr/bin/file 'Program Files'/ > PATH="$HOME/Program Files:$PATH" \ > emacs -Q -L ~/src/org-mode/lisp/ ~/examples/org/open-script.org & > > Debugger entered--Lisp error: (wrong-type-argument stringp nil) > string-match("/" nil 0) > split-string(nil "/") > mailcap-mime-info("/bin/bash: line 1: /home/ubuntu/Program: No such > f...") > (let* ((mime-type (if (executable-find "file") > (shell-command-to-string (format "%s --brief --mime-type %s" > (executable-find "file") (shell-quote-argument > (convert-standard-filename file)))) (mailcap-extension-to-mime (or ext > "")))) (command (mailcap-mime-info mime-type))) (if (stringp command) > (setq cmd command) (setq cmd 'emacs))) Well. If we want to be this paranoid, could you write a generic safe shell-command wrapper that takes care of various edge cases? Then, we can add that wrapper to org-macs and reuse it in various places where we need to run external command. > Another corner case: > > file --brief --mime-type tstorg-sh-symlink > inode/symlink > file --brief --mime-type --dereference tstorg-sh-symlink > text/x-shellscript I added the extra argument as you suggested. See the new version of the patch. Though my man tells me that --dereference is the default. Not on your system apparently. >> + (executable-find "file") >> + (shell-quote-argument (convert-standard-filename file)))) >> + (mailcap-extension-to-mime (or ext "")))) > > Actually MIME type for shell scripts varies a lot > > (mailcap-extension-to-mime "sh") => "text/x-sh" > > run-mailcap --norun examples/org/script/tstorg.sh > Error: no "view" mailcap rules found for type "application/x-sh" > > And "text/x-shellscript" as above. This should not matter for us. As long as mailcap-mime-info returns something meaningful, we should be good to go. Unless mailcap-mime-info itself is buggy. Best, Ihor [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: v3-0001-org-open-file-Use-file-command-to-determine-mime-.patch --] [-- Type: text/x-patch, Size: 1586 bytes --] From 3dac7d62b7c85bde31d27ef48569df9d07ae6eec Mon Sep 17 00:00:00 2001 Message-Id: <3dac7d62b7c85bde31d27ef48569df9d07ae6eec.1653918246.git.yantar92@gmail.com> From: Ihor Radchenko <yantar92@gmail.com> Date: Sun, 22 May 2022 12:04:35 +0800 Subject: [PATCH v3] org-open-file: Use file command to determine mime type, when available * lisp/org.el (org-open-file): Prefer file command to determine file type instead of relying on `mailcap-extension-to-mime'. Only fallback to the latter when file command is not available on the system. Fixes https://list.orgmode.org/874k1n2hpv.fsf@localhost/T/#mcc10df4ea7937360671e6dea8061153dee518807 --- lisp/org.el | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/org.el b/lisp/org.el index 95dff27ad..b9a7b4b2e 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -7981,7 +7981,12 @@ (defun org-open-file (path &optional in-emacs line search) (when (eq cmd 'mailcap) (require 'mailcap) (mailcap-parse-mailcaps) - (let* ((mime-type (mailcap-extension-to-mime (or ext ""))) + (let* ((mime-type (if (executable-find "file") + (shell-command-to-string + (format "%s --brief --mime-type --dereference %s" + (executable-find "file") + (shell-quote-argument (convert-standard-filename file)))) + (mailcap-extension-to-mime (or ext "")))) (command (mailcap-mime-info mime-type))) (if (stringp command) (setq cmd command) -- 2.35.1 ^ permalink raw reply related [flat|nested] 48+ messages in thread
* Re: [PATCH v3] Re: Bug in 9.5.3 org--file-default-apps 2022-05-30 14:00 ` [PATCH v3] " Ihor Radchenko @ 2022-05-30 15:38 ` Max Nikulin 2022-05-31 15:07 ` Max Nikulin 2022-06-04 13:42 ` [DISCUSSION, default settings] Using mailcap as default handler for opening file links (was: [PATCH v3] Re: Bug in 9.5.3 org--file-default-apps) Ihor Radchenko 0 siblings, 2 replies; 48+ messages in thread From: Max Nikulin @ 2022-05-30 15:38 UTC (permalink / raw) To: emacs-orgmode On 30/05/2022 21:00, Ihor Radchenko wrote: > - (let* ((mime-type (mailcap-extension-to-mime (or ext ""))) > + (let* ((mime-type (if (executable-find "file") > + (shell-command-to-string > + (format "%s --brief --mime-type --dereference %s" > + (executable-find "file") (shell-quote-argument (executable-find "file")) For the case of a directory with spaces or other characters interpreted by shell in the PATH environment. Unsure if "file" command variants exist that do not support --dereference. Another pitfalls with `shell-command-to-string' is that it provides no way to handle errors. I would consider 2>/dev/null to not consider error message as MIME type and `mailcap-extension-to-mime' as fallback when "file" command fails. (let* ((file-executable (executable-find "file")) (mime-type-file (and file-executable (shell-command-to-string (format "%s --brief --mime-type --dereference %s 2>/dev/null" ; ... ))) (mime-type (if (org-string-nw-p mime-type-file) mime-type-file (mailcap-extension-to-mime (or ext ""))) > + (shell-quote-argument (convert-standard-filename file)))) > + (mailcap-extension-to-mime (or ext "")))) > Max Nikulin writes: > >> 3. With your patch and the following additional entry in ~/.mailcap >> (notice "text" instead of "application" and just "emacs") >> text/x-shellscript; emacs %s; test=test -n "$DISPLAY" >> new Emacs session is started. It is a problem but partially >> it is caused by incorrect mailcap configuration. >> Unlike "text/plain" that would be handled by view-mode >> unless `mailcap-mime-data' were erased in Emacs-27, >> "text/x-shellscript" is handled by less on my main system >> due to mailcap while I would expect same Emacs session. > > I am confused here. org-file-apps-gnu says that we rely on mailcap: > > ((remote . emacs) > (system . mailcap) > (t . mailcap)) > > So, is (3) following what you would expect from mailcap (regardless > whether it is incorrectly configured or not)? Wrong configuration of > mailcap is none of Org business - we need not to be "smart" and fix user > "errors". They may be deliberate. Ihor, I am afraid that your patch may break some subtle equilibrium existing despite discrepancy in MIME type names for shell script. Worst scenario: without the patch shell scripts are opened in the same Emacs session, with it attempt to open a script silently fails due to "less" handler requiring a terminal. I admit that your patch may improve handling of e.g. images, however it is more rare case when an image file has no suffix, while it is quite common for various scripts (shell, python, perl, etc.) I have not tried emacs-28 yet or some other full fledged desktop environment (in VM). There is no official MIME type for shell scripts http://www.iana.org/assignments/media-types/media-types.xhtml so definitions "text" or "application", "x-sh" or "x-shellscript" vary. E.g. https://wiki.debian.org/ShellScript : "The MIME type of shell scripts is nowadays text/x-shellscript but other systems may still use application/x-shellscript." Emacs uses application/x-sh for the .sh suffix. There is no association for this type in `mailcap-mime-data'. The "file" command reports "text/x-shellscript". I have neither "application/x-sh" nor "text/x-shellscript" in /etc/mailcap (Ubuntu-20.04), there are only several entries for "application/x-shellscript". That is why your patch should not make handling of shell scripts worse... till mailcap and "file" will start to use the same type. >> In some cases >> it may be handy to launch remote viewer from a host accessed through >> ssh, but let's leave it aside. > > This is exactly why you can always customize org-file-apps. I am confused by this phrase. `org-file-apps' is ignored for remote files, otherwise more care would be required for executing "file". > I added the extra argument as you suggested. See the new version of the > patch. Though my man tells me that --dereference is the default. Not on > your system apparently. I have no idea. Quick search have not provided a changelog, but I have noticed https://bugs.astron.com/view.php?id=29 >> (mailcap-extension-to-mime "sh") => "text/x-sh" >> >> run-mailcap --norun examples/org/script/tstorg.sh >> Error: no "view" mailcap rules found for type "application/x-sh" >> >> And "text/x-shellscript" as above. > > This should not matter for us. As long as mailcap-mime-info returns > something meaningful, we should be good to go. Unless mailcap-mime-info > itself is buggy. Following a link to a shell script from an org file (without customization) I expect that it is opened in the same Emacs session. Maybe my expectation is wrong and system-wide handler (gedit, kate, etc.) should be launched. It seems current status quo (at least for some linux distributions) is consistent with my expectations, but only due to inconsistency in naming of the MIME type. ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: [PATCH v3] Re: Bug in 9.5.3 org--file-default-apps 2022-05-30 15:38 ` Max Nikulin @ 2022-05-31 15:07 ` Max Nikulin 2022-06-04 13:42 ` [DISCUSSION, default settings] Using mailcap as default handler for opening file links (was: [PATCH v3] Re: Bug in 9.5.3 org--file-default-apps) Ihor Radchenko 1 sibling, 0 replies; 48+ messages in thread From: Max Nikulin @ 2022-05-31 15:07 UTC (permalink / raw) To: emacs-orgmode On 30/05/2022 22:38, Max Nikulin wrote: > (let* ((file-executable (executable-find "file")) > (mime-type-file > (and file-executable > (shell-command-to-string > (format "%s --brief --mime-type --dereference %s 2>/dev/null" > ; ... > ))) > (mime-type (if (org-string-nw-p mime-type-file) > mime-type-file > (mailcap-extension-to-mime (or ext ""))) There is an implementation of "file" that does not support --mime-type in particular and long options at all in general: https://landley.net/toybox/help.html#file toybox that is installed on Android. Windows port http://gnuwin32.sourceforge.net/packages/file.htm looks dead, but anyway for cmd.exe "2> nul" should be used instead of ">/dev/null". It may be safer to check (string-match-p "\\`[-a-zA-Z0-9+_.]+/[-a-zA-Z0-9+_.]+\\'" mime-file-type) instead of error redirection. I still think that `mailcap-extension-to-mime' should be fallback, not just alternative to trying file command. ^ permalink raw reply [flat|nested] 48+ messages in thread
* [DISCUSSION, default settings] Using mailcap as default handler for opening file links (was: [PATCH v3] Re: Bug in 9.5.3 org--file-default-apps) 2022-05-30 15:38 ` Max Nikulin 2022-05-31 15:07 ` Max Nikulin @ 2022-06-04 13:42 ` Ihor Radchenko 2022-06-04 17:01 ` Greg Minshall 2022-06-06 12:50 ` [DISCUSSION, default settings] Using mailcap as default handler for opening file links Max Nikulin 1 sibling, 2 replies; 48+ messages in thread From: Ihor Radchenko @ 2022-06-04 13:42 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: >> I am confused here. org-file-apps-gnu says that we rely on mailcap: >> >> ((remote . emacs) >> (system . mailcap) >> (t . mailcap)) >> >> So, is (3) following what you would expect from mailcap (regardless >> whether it is incorrectly configured or not)? Wrong configuration of >> mailcap is none of Org business - we need not to be "smart" and fix user >> "errors". They may be deliberate. > > Ihor, I am afraid that your patch may break some subtle equilibrium > existing despite discrepancy in MIME type names for shell script. Worst > scenario: without the patch shell scripts are opened in the same Emacs > session, with it attempt to open a script silently fails due to "less" > handler requiring a terminal. > > I admit that your patch may improve handling of e.g. images, however it > is more rare case when an image file has no suffix, while it is quite > common for various scripts (shell, python, perl, etc.) As Craig found out, Org 9.5.2 didn't try to use mailcap at all (because of typo). So, the equilibrium you are talking about only exists since Org 9.5.3 (April, 2022). Before Org 9.5.3, the default behavior on Linux (not Windows or Mac) was opening links in Emacs or, more precisely (funcall (cdr (assq 'file org-link-frame-setup)) file) Since Org 9.5.3, the default behavior on Linux is using mailcap with all the side-effects we are observing. It appears that using mailcap is giving us more trouble than benefits. I am not sure about the situation on Windows and Mac though. Should we change the default file handlers to Emacs globally (unless user customizes otherwise)? Should we continue efforts to work around mailcap issues? Maybe there is yet another alternative generic way to open files? Best, Ihor ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: [DISCUSSION, default settings] Using mailcap as default handler for opening file links (was: [PATCH v3] Re: Bug in 9.5.3 org--file-default-apps) 2022-06-04 13:42 ` [DISCUSSION, default settings] Using mailcap as default handler for opening file links (was: [PATCH v3] Re: Bug in 9.5.3 org--file-default-apps) Ihor Radchenko @ 2022-06-04 17:01 ` Greg Minshall 2022-06-06 12:50 ` [DISCUSSION, default settings] Using mailcap as default handler for opening file links Max Nikulin 1 sibling, 0 replies; 48+ messages in thread From: Greg Minshall @ 2022-06-04 17:01 UTC (permalink / raw) To: Ihor Radchenko; +Cc: Max Nikulin, emacs-orgmode hi, Ihor, > It appears that using mailcap is giving us more trouble than benefits. > I am not sure about the situation on Windows and Mac though. > Should we change the default file handlers to Emacs globally (unless > user customizes otherwise)? Should we continue efforts to work around > mailcap issues? Maybe there is yet another alternative generic way to > open files? do you, or anyone else who might chime in, have a sense to what extent "mainline emacs development" is committed to pushing the mailcap solution? and, to what extent are they running up against, and trying to solve, problems similar to the ones you mention? if "commitment + yes, trying", it might make sense to have, at least, the *goal* of going mailcap. my 2c. cheers, Greg ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: [DISCUSSION, default settings] Using mailcap as default handler for opening file links 2022-06-04 13:42 ` [DISCUSSION, default settings] Using mailcap as default handler for opening file links (was: [PATCH v3] Re: Bug in 9.5.3 org--file-default-apps) Ihor Radchenko 2022-06-04 17:01 ` Greg Minshall @ 2022-06-06 12:50 ` Max Nikulin 2022-06-06 15:22 ` Max Nikulin ` (2 more replies) 1 sibling, 3 replies; 48+ messages in thread From: Max Nikulin @ 2022-06-06 12:50 UTC (permalink / raw) To: emacs-orgmode On 04/06/2022 20:42, Ihor Radchenko wrote: > > It appears that using mailcap is giving us more trouble than benefits. > I am not sure about the situation on Windows and Mac though. > > Should we change the default file handlers to Emacs globally (unless > user customizes otherwise)? Should we continue efforts to work around > mailcap issues? Maybe there is yet another alternative generic way to > open files? First of all, does someone has reproducible examples when `org-open-file' behaves against expectations in *default* configuration? My current impression is that even despite serious problems with wiping of `mailcap-mime-data' in Emacs-27, "most" files are still opened in Emacs due to `auto-mode-alist'. Mailcap is used more rare than I expected. I believe, there are enough issues with mailcap implementation in Emacs, but do we have some alternative? There is no support of queries to mimeapps.list files in Emacs (XDG). Like Chrome it is possible to call xdg-open for any type that can not be handled internally. Maybe it possible to leave it in Org as is or with the patch to call "file" utility (after some fixes). At least Arch and Debian with Ubuntu have packages for SEMI (emacs-mime), but I am unsure what it is http://git.chise.org/elisp/semi/ http://git.chise.org/gitweb/?p=elisp/semi.git;a=tree P.S. Some observations. MIME is mess. On my system I have in the /etc/mime.types file application/x-sh sh application/x-shellscript text/x-sh sh Notice that for a file with no extension MIME type is different. The "file" utility reports another variant: "text/x-shellscript". To be on the safe side users should configure all variants... Unsure if the latest version is the same https://gitlab.freedesktop.org/xdg/shared-mime-info/-/raw/master/data/freedesktop.org.xml.in <mime-type type="application/x-shellscript"> <comment>shell script</comment> <sub-class-of type="application/x-executable"/> <sub-class-of type="text/plain"/> <alias type="text/x-sh"/> <generic-icon name="text-x-script"/> <magic> <!-- ... --> </magic> <glob pattern="*.sh"/> </mime-type> Emacs behavior for (mailcap-mime-info "text/plain") when no mailcap files are present in the system - 26: view-mode - 27: nil since initial value of `mailcap-mime-data' erased - 28: fundamental-mode because when `mailcap-mime-data' is copied to `mailcap--computed-mime-data' order of fundamental-mode and view-mode is reverted. By default user's ~/.mailcap has higher priority than initial `mailcap-mime-data' configuration in Emacs-28, but it was not so in Emacs-26. Though it should not matter due to `auto-mode-alist'. P.P.S. I had a hope that recent Fedora-36 release has Emacs-28 packaged, so it would be possible to test live image in qemu to quickly check behavior in full-fledged desktop environment, but version 27 is really packaged there. ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: [DISCUSSION, default settings] Using mailcap as default handler for opening file links 2022-06-06 12:50 ` [DISCUSSION, default settings] Using mailcap as default handler for opening file links Max Nikulin @ 2022-06-06 15:22 ` Max Nikulin 2022-06-06 17:47 ` Bhavin Gandhi 2024-02-12 12:36 ` Ihor Radchenko 2 siblings, 0 replies; 48+ messages in thread From: Max Nikulin @ 2022-06-06 15:22 UTC (permalink / raw) To: emacs-orgmode > On 04/06/2022 20:42, Ihor Radchenko wrote: >> >> Should we change the default file handlers to Emacs globally (unless >> user customizes otherwise)? Should we continue efforts to work around >> mailcap issues? Maybe there is yet another alternative generic way to >> open files? Ihor, back to your patch introducing invocation of the "file" utility. To get consistent behavior it should be done much earlier, when it becomes known that the file is not a remote one, not only as a part of mailcap code path (perhaps as a fallback for a file with no extension). Unfortunately it requires more work since Emacs mostly uses file suffixes, not MIME types, so the determined type should be converted to file extension to query e.g. auto-mode-alist. Ideally both MIME type and file suffix should be taken into account since e.g. .xpi mozilla extensions are recognized as regular zip archives. Ihor Radchenko. [PATCH v3] Re: Bug in 9.5.3 org--file-default-apps. Mon, 30 May 2022 22:00:27 +0800. https://list.orgmode.org/8735gr15ok.fsf@localhost > > ((remote . emacs) > (system . mailcap) > (t . mailcap)) > > So, is (3) following what you would expect from mailcap (regardless > whether it is incorrectly configured or not)? Wrong configuration of > mailcap is none of Org business - we need not to be "smart" and fix user > "errors". They may be deliberate. I was trying to say that mailcap.el has some predefined associations that are intended to handle some file types by Emacs instead of external handlers configured in mailcap files, unless `mailcap-user-mime-data' or `mailcap-prefer-mailcap-viewers' prescribes another behavior. > Max Nikulin writes: >> I read implementation of `org-open-file' once more and now I see that >> currently remote files can not be processed by mailcap code path even >> with custom `org-file-apps', so thank you for explanation. In some cases >> it may be handy to launch remote viewer from a host accessed through >> ssh, but let's leave it aside. > > This is exactly why you can always customize org-file-apps. Have I missed something of `org-file-apps' are ignored for remote files? P.S. Earlier it was discussed whether run-mailcap inspects file content or relies solely on file suffix. A side note: originally mailcap processes parts of mail messages and MIME type is specified by the Cotntent-Type header. So handling of standalone files with no original MIME type is not a really native way to use mailcap. On the other hand sometimes there is no better way than reusing existing database. ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: [DISCUSSION, default settings] Using mailcap as default handler for opening file links 2022-06-06 12:50 ` [DISCUSSION, default settings] Using mailcap as default handler for opening file links Max Nikulin 2022-06-06 15:22 ` Max Nikulin @ 2022-06-06 17:47 ` Bhavin Gandhi 2022-06-10 16:38 ` Max Nikulin 2024-02-12 12:36 ` Ihor Radchenko 2 siblings, 1 reply; 48+ messages in thread From: Bhavin Gandhi @ 2022-06-06 17:47 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode Hello Max, On Mon, 6 Jun 2022 at 19:09, Max Nikulin <manikulin@gmail.com> wrote: > P.P.S. I had a hope that recent Fedora-36 release has Emacs-28 packaged, > so it would be possible to test live image in qemu to quickly check > behavior in full-fledged desktop environment, but version 27 is really > packaged there. I think we will have Emacs 28 in Fedora 37 (that's because major changes are not introduced in beta/released versions)[1]. I can test the Emacs 28 + Fedora 36 combination, if you give me steps to perform. Sorry, I don't have full context on how MIME type stuff applies to Org mode etc., so I can try the steps and report back the behavior. If you want to try it, run these commands when you boot into Fedora 36. This Copr is maintained by me, and is built from the official RPM spec file + modifications for Emacs 28[2]. sudo dnf copr enable bhavin192/emacs-pretest sudo dnf install emacs [1] https://gitlab.com/bhavin192/emacs-pretest-rpm/-/issues/3 [2] https://src.fedoraproject.org/rpms/emacs/pull-request/12#comment-105727 -- Regards, Bhavin Gandhi (bhavin192) | https://geeksocket.in ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: [DISCUSSION, default settings] Using mailcap as default handler for opening file links 2022-06-06 17:47 ` Bhavin Gandhi @ 2022-06-10 16:38 ` Max Nikulin 0 siblings, 0 replies; 48+ messages in thread From: Max Nikulin @ 2022-06-10 16:38 UTC (permalink / raw) To: emacs-orgmode On 07/06/2022 00:47, Bhavin Gandhi wrote: > On Mon, 6 Jun 2022 at 19:09, Max Nikulin <manikulin@gmail.com> wrote: >> P.P.S. I had a hope that recent Fedora-36 release has Emacs-28 packaged, >> so it would be possible to test live image in qemu to quickly check >> behavior in full-fledged desktop environment, but version 27 is really >> packaged there. > > I think we will have Emacs 28 in Fedora 37 (that's because major changes > are not introduced in beta/released versions)[1]. I have noticed your activity in search results but finally I decided to revive existing minimal LXC container with Arch. > I can test the Emacs 28 + Fedora 36 combination, if you give me steps to > perform. Sorry, I don't have full context on how MIME type stuff applies > to Org mode etc., so I can try the steps and report back the behavior. Thank you for offering a hand. Actually there are too many variables to ask for particular actions. I was trying various functions and stepping through them in debugger having side by side windows of Emacs-26 from Ubuntu-20.04 and Emacs-28 from ArchLinux (Emacs-27 has a bug in mailcap.el rather serious in this case). Content of /etc/mime.types (e.g. shell script definitions) and /etc/mailcap (presence of */* less %s) varies in Linux distributions, `mailcap-mime-apps' is not the only map of handlers withing Emacs, `org-open-file' uses `auto-mode-alist' and `org-file-apps'... It is even more off-topic here, but since packaging Emacs for next Fedora has been mentioned, I have another question. To test my patches for Org I have LXC containers with various versions of Ubuntu and installing Emacs there pulls reasonable amount of X11 libraries. Several months ago I tried to install Emacs in a Fedora-35 container. I gave up because of enormous amount of requirements including wayland, libraries related to hardware acceleration and maybe even drivers. Often I do not mount /dev/dri inside containers, so a lot of packages were completely useless for me. Amount of required libraries in Arch is not so huge. ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: [DISCUSSION, default settings] Using mailcap as default handler for opening file links 2022-06-06 12:50 ` [DISCUSSION, default settings] Using mailcap as default handler for opening file links Max Nikulin 2022-06-06 15:22 ` Max Nikulin 2022-06-06 17:47 ` Bhavin Gandhi @ 2024-02-12 12:36 ` Ihor Radchenko 2024-02-13 10:59 ` Max Nikulin 2 siblings, 1 reply; 48+ messages in thread From: Ihor Radchenko @ 2024-02-12 12:36 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: > On 04/06/2022 20:42, Ihor Radchenko wrote: >> >> It appears that using mailcap is giving us more trouble than benefits. >> I am not sure about the situation on Windows and Mac though. >> >> Should we change the default file handlers to Emacs globally (unless >> user customizes otherwise)? Should we continue efforts to work around >> mailcap issues? Maybe there is yet another alternative generic way to >> open files? > > ... > I believe, there are enough issues with mailcap implementation in Emacs, > but do we have some alternative? There is no support of queries to > mimeapps.list files in Emacs (XDG). Like Chrome it is possible to call > xdg-open for any type that can not be handled internally. Maybe it > possible to leave it in Org as is or with the patch to call "file" > utility (after some fixes). I have been digging more on this issue recently, and I have found that Carsten once attempted to tweak this default to use xdg-mime: https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=15ae89b39 Use `xdg-open' to open files where available * lisp/org.el (org-file-apps-defaults-gnu): Use `xdg-open' to open files where available. (defconst org-file-apps-defaults-gnu - '((remote . emacs) - (system . mailcap) - (t . mailcap)) + (append + '((remote . emacs)) + (if (executable-find "xdg-open") + '((system . "xdg-open %s") + (t . "xdg-open %s")) + '((system . mailcap) + (t . mailcap)))) However, that commit had been reverted because xdg-open did not work for some users, "failing silently": https://list.orgmode.org/CAN_Dec8n=yNTto6Uh0dN50fG_HbqHFQtmYOCchH7wsyJdm3_Gg@mail.gmail.com/ I believe that xdg-open issue has been fixed by you in https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=5db61eb0f org.el: Avoid xdg-open silent failure So, it may be safe to re-apply that Carsten's commit now. WDYT? -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: [DISCUSSION, default settings] Using mailcap as default handler for opening file links 2024-02-12 12:36 ` Ihor Radchenko @ 2024-02-13 10:59 ` Max Nikulin 2024-02-13 11:27 ` Ihor Radchenko 0 siblings, 1 reply; 48+ messages in thread From: Max Nikulin @ 2024-02-13 10:59 UTC (permalink / raw) To: emacs-orgmode On 12/02/2024 19:36, Ihor Radchenko wrote: > Max Nikulin writes: > >> I believe, there are enough issues with mailcap implementation in Emacs, >> but do we have some alternative? [...] > > I have been digging more on this issue recently, and I have found that > Carsten once attempted to tweak this default to use xdg-mime: Have you faced another issue with mailcap? Frankly speaking, I am unsure what particular issues we are going to address (file type, Emacs and Org versions, OS). Did you intentionally mentioned "xdg-mime"? While xdg-open tries to find suitable .desktop file to open a file, xdg-mime is more close to the file(1) tool, but it consults signatures from shared-mime-info and site&user config files. In addition, unlike file(1), it uses file extensions to guess media type. An advantage of mailcap.el is that it should allow users have Emacs-specific Emacs-wide configuration for viewers. In principle it should be more reliable when invoking emacs through xdg-open when Emacs is configured as a handler for some media types. Is it necessary to modify Org? Maybe an alternative is to add "xdg-open %s" for */* to `mailcap-user-mime-data'. > I believe that xdg-open issue has been fixed by you in > https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=5db61eb0f > org.el: Avoid xdg-open silent failure I am still not really comfortable due to the strategy to start external processes diverged from methods used in browse-url.el. I have not had a look into xdg.el yet. ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: [DISCUSSION, default settings] Using mailcap as default handler for opening file links 2024-02-13 10:59 ` Max Nikulin @ 2024-02-13 11:27 ` Ihor Radchenko 2024-02-13 15:44 ` Max Nikulin 0 siblings, 1 reply; 48+ messages in thread From: Ihor Radchenko @ 2024-02-13 11:27 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: >> I have been digging more on this issue recently, and I have found that >> Carsten once attempted to tweak this default to use xdg-mime: > > Have you faced another issue with mailcap? Frankly speaking, I am unsure > what particular issues we are going to address (file type, Emacs and Org > versions, OS). I am mostly going to address user confusion about mailcap - (1) a number of people are using DMs that rely on FreeDesktop and xdg-open; they get surprised when .mailcap is used - I've seen a number of questions in IRC/Matrix and on reddit related to how Org mode opens file links; (2) Emacs' mailcap does not implement the specification fully - only a subset of mailcap format is obeyed. So, I do not feel that Emacs' implementation of mailcap support is a good default for most users. > Did you intentionally mentioned "xdg-mime"? No. I meant xdg-open. > ... While xdg-open tries to find > suitable .desktop file to open a file, xdg-mime is more close to the > file(1) tool, but it consults signatures from shared-mime-info and > site&user config files. In addition, unlike file(1), it uses file > extensions to guess media type. That might be a good alternative to file indeed; although file is probably more widely installed. > An advantage of mailcap.el is that it should allow users have > Emacs-specific Emacs-wide configuration for viewers. Yes, but mailcap is not documented in Emacs manual. FYI, I first heard that .mailcap files are a thing when I encountered org-file-apps. > ... In principle it > should be more reliable when invoking emacs through xdg-open when Emacs > is configured as a handler for some media types. I doubt so. There are problems with mailcap.el and there might be problems with Emacs media type configuration. I prefer xdg. > Is it necessary to modify Org? Maybe an alternative is to add "xdg-open > %s" for */* to `mailcap-user-mime-data'. Do you mean changing the default value of `mailcap-mime-data'? >> I believe that xdg-open issue has been fixed by you in >> https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=5db61eb0f >> org.el: Avoid xdg-open silent failure > > I am still not really comfortable due to the strategy to start external > processes diverged from methods used in browse-url.el. Is it related to the problem at hand? > I have not had a look into xdg.el yet. AFAIK, xdg.el does not support xdg-open functionality. We cannot use it here. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: [DISCUSSION, default settings] Using mailcap as default handler for opening file links 2024-02-13 11:27 ` Ihor Radchenko @ 2024-02-13 15:44 ` Max Nikulin 2024-02-13 15:47 ` Max Nikulin 2024-02-14 14:51 ` Ihor Radchenko 0 siblings, 2 replies; 48+ messages in thread From: Max Nikulin @ 2024-02-13 15:44 UTC (permalink / raw) To: emacs-orgmode On 13/02/2024 18:27, Ihor Radchenko wrote: > Max Nikulin writes: > > I am mostly going to address user confusion about mailcap XDG configuration and so xdg-open behavior is often confusing to users as well, especially in the cases of KDE and no DE. In GNOME it is alleviated by a step with the application chooser if default application has not been set yet. > (1) a number > of people are using DMs that rely on FreeDesktop and xdg-open; DM is display manager. Even DE (desktop environment) is not necessary, some toolkits and applications have their own implementations of XDG specs. > (2) Emacs' mailcap does not implement the specification fully - only a > subset of mailcap format is obeyed. Agree. On the other hand, mailcap.el is aware that Emacs can handle some files internally. This feature should be preserved in some way. In addition, mailcap has to be used if neither DISPLAY nor WAYLAND_DISPLAY is set for current terminal. >> xdg-mime is more close to the file(1) tool > > That might be a good alternative to file indeed; although file is > probably more widely installed. xdg-mime and xdg-open belong to the same package. In the case of no DE xdg-mime calls file(1) (if mimetype(1) is not installed). > Yes, but mailcap is not documented in Emacs manual. (info "emacs-mailcap") However it is not as useful as it should be. >> Is it necessary to modify Org? Maybe an alternative is to add "xdg-open >> %s" for */* to `mailcap-user-mime-data'. > > Do you mean changing the default value of `mailcap-mime-data'? I am unsure what is a proper way to do it. I am not confident enough with the code that selects handlers for files. >>> I believe that xdg-open issue has been fixed by you in >>> https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=5db61eb0f >>> org.el: Avoid xdg-open silent failure >> >> I am still not really comfortable due to the strategy to start external >> processes diverged from methods used in browse-url.el. > > Is it related to the problem at hand? - Eli had objections, but did not provide any details. - Error handling code was dropped for the sake of Emacs-25. - In the case of no DE, quit from emacs means terminating of started applications. - I hope a bug I faced is exotic enough to never happen in real life. Unfortunately another approach is a kind of trade-off, not an unambiguous advantage. > AFAIK, xdg.el does not support xdg-open functionality. We cannot use it > here. `xdg-mime-apps' looks like a building block. However it is not enough and perhaps has enough bugs. Ideally Emacs should provide API that uses either xdg.el or mailcap.el as backend depending on runtime and user configuration. Org is not the only package that needs it. P.S. Ihor, perhaps your clock is several minutes ahead. ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: [DISCUSSION, default settings] Using mailcap as default handler for opening file links 2024-02-13 15:44 ` Max Nikulin @ 2024-02-13 15:47 ` Max Nikulin 2024-02-14 14:51 ` Ihor Radchenko 1 sibling, 0 replies; 48+ messages in thread From: Max Nikulin @ 2024-02-13 15:47 UTC (permalink / raw) To: emacs-orgmode On 13/02/2024 22:44, Max Nikulin wrote: > (info "emacs-mailcap") (info "emacs-mime") ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: [DISCUSSION, default settings] Using mailcap as default handler for opening file links 2024-02-13 15:44 ` Max Nikulin 2024-02-13 15:47 ` Max Nikulin @ 2024-02-14 14:51 ` Ihor Radchenko 2024-02-27 10:43 ` Max Nikulin 1 sibling, 1 reply; 48+ messages in thread From: Ihor Radchenko @ 2024-02-14 14:51 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: > On 13/02/2024 18:27, Ihor Radchenko wrote: >> Max Nikulin writes: >> >> I am mostly going to address user confusion about mailcap > > XDG configuration and so xdg-open behavior is often confusing to users > as well, especially in the cases of KDE and no DE. In GNOME it is > alleviated by a step with the application chooser if default application > has not been set yet. I'd say that it is less confusing. Of course, if you know anything even less confusing than xdg-open, please share. >> (2) Emacs' mailcap does not implement the specification fully - only a >> subset of mailcap format is obeyed. > > Agree. On the other hand, mailcap.el is aware that Emacs can handle some > files internally. This feature should be preserved in some way. In > addition, mailcap has to be used if neither DISPLAY nor WAYLAND_DISPLAY > is set for current terminal. May you please explain more about this? What happens if a mailcap entry, say, declares "less" as a mimetype handler and Emacs is running in terminal? Also, I tried to run xdg-open from terminal (not emulator - C-M-<F1> on Linux) and it runs w3m for .png image vs. feh when running from terminal emulator on X. >>> xdg-mime is more close to the file(1) tool >> >> That might be a good alternative to file indeed; although file is >> probably more widely installed. > > xdg-mime and xdg-open belong to the same package. In the case of no DE > xdg-mime calls file(1) (if mimetype(1) is not installed). So, we can try xdg-mime and fall back to file. >> Yes, but mailcap is not documented in Emacs manual. > > (info "emacs-mailcap") However it is not as useful as it should be. It is not expected to be read by Emacs users: This manual is directed at users who want to modify the behaviour of the MIME encoding/decoding process or want a more detailed picture of how the Emacs MIME library works, and people who want to write functions and commands that manipulate MIME elements. So, I'd say that ordinary Emacs user probably has no idea that Emacs consults .mailcap to open /files/. Maybe some users (who are already familiar with .mailcap) expect .mailcap to be consulted when opening email attachments. But I am not sure - even reading https://man.archlinux.org/man/mailcap.5.en I cannot easily see why this would be used to open files; not to render them inline. >>> Is it necessary to modify Org? Maybe an alternative is to add "xdg-open >>> %s" for */* to `mailcap-user-mime-data'. >> >> Do you mean changing the default value of `mailcap-mime-data'? > > I am unsure what is a proper way to do it. I am not confident enough > with the code that selects handlers for files. I feel that we are abusing the scope of mailcap when opening file links. >>> I am still not really comfortable due to the strategy to start external >>> processes diverged from methods used in browse-url.el. >> >> Is it related to the problem at hand? > > - Eli had objections, but did not provide any details. > - Error handling code was dropped for the sake of Emacs-25. > - In the case of no DE, quit from emacs means terminating of started > applications. > - I hope a bug I faced is exotic enough to never happen in real life. > > Unfortunately another approach is a kind of trade-off, not an > unambiguous advantage. Sorry, but I have no idea what you are talking about. I assume that it is some kind of Emacs bug you reported some time ago. I am not sure which one. And I do not see how it is related to this discussion. >> AFAIK, xdg.el does not support xdg-open functionality. We cannot use it >> here. > > `xdg-mime-apps' looks like a building block. However it is not enough > and perhaps has enough bugs. > > Ideally Emacs should provide API that uses either xdg.el or mailcap.el > as backend depending on runtime and user configuration. Org is not the > only package that needs it. Yes. But that's a lot of work; adding support of libmagic being just the first step. Implementing something more reasonable for Org mode only is a lower-handing fruit. > P.S. > Ihor, perhaps your clock is several minutes ahead. I know. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: [DISCUSSION, default settings] Using mailcap as default handler for opening file links 2024-02-14 14:51 ` Ihor Radchenko @ 2024-02-27 10:43 ` Max Nikulin 0 siblings, 0 replies; 48+ messages in thread From: Max Nikulin @ 2024-02-27 10:43 UTC (permalink / raw) To: emacs-orgmode Ihor, To be clear, I am not against taking into account XDG media types associations. I just believe that emacs settings should have higher priorities. Another point is that xdg-open is not intelligent enough to be used unconditionally. I have the following idea. If (mailcap-mime-info mime-type) returns a function then it is used to open the file. If it is a string (shell command) then depending on some user option and DISPLAY, WAYLAND_DISPLAY environment variables either xdg-open or mailcap shell command is executed. Notice the following issue: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=12972 Move `org-open-file' and associated code out of Org mode Several issues with running external handlers are highlighted in comments. The changes were committed before I discovered history of code around xdg-open in browse-url.el. It is unclear to me what Eli had in mind. If some XDG-related code appears in Org then likely it will be demand to have it in Emacs core (dired already has some kludge). However my experience of communication with Emacs developers is not encouraging. A side note. On Debian there is the "open" command that may be configured to either xdg-open or run-mailcap through alternatives. Some notes are inline. On 14/02/2024 21:51, Ihor Radchenko wrote: > Max Nikulin writes: > > May you please explain more about this? > What happens if a mailcap entry, say, declares "less" as a mimetype > handler and Emacs is running in terminal? An entry for "less" likely has terminal requirement in the "test" field and likely will be discarded by mailcap.el (I have not checked it). > Also, I tried to run xdg-open from terminal (not emulator - C-M-<F1> on > Linux) and it runs w3m for .png image vs. feh when running from terminal > emulator on X. xdg-open has a fallback to some hardcoded list of browsers. It is far from mailcap configuration. It does not use "see" and similar mailcap-related tools. > So, I'd say that ordinary Emacs user probably has no idea that Emacs > consults .mailcap to open /files/. Maybe some users (who are already > familiar with .mailcap) expect .mailcap to be consulted when opening > email attachments. But I am not sure - even reading > https://man.archlinux.org/man/mailcap.5.en I cannot easily see why this > would be used to open files; not to render them inline. Users of mutt/pine/alpine have more chances to be familiar with mailcap. Debian's version https://manpages.debian.org/bookworm/mailcap/mailcap.5.en.html is linked to more informative https://manpages.debian.org/bookworm/mailcap/mailcap.order.5.en.html https://manpages.debian.org/bookworm/mailcap/update-mime.8.en.html though these tools are specific to Debian. > I feel that we are abusing the scope of mailcap when opening file links. From my point of view, Org just uses facility that Emacs provides. >> - Eli had objections, but did not provide any details. >> - Error handling code was dropped for the sake of Emacs-25. >> - In the case of no DE, quit from emacs means terminating of started >> applications. >> - I hope a bug I faced is exotic enough to never happen in real life. > > Sorry, but I have no idea what you are talking about. I assume that it > is some kind of Emacs bug you reported some time ago. I am not sure > which one. And I do not see how it is related to this discussion. See the link above. >> Ideally Emacs should provide API that uses either xdg.el or mailcap.el >> as backend depending on runtime and user configuration. Org is not the >> only package that needs it. > > Yes. But that's a lot of work; adding support of libmagic being just the > first step. Implementing something more reasonable for Org mode only is > a lower-handing fruit. There are two orthogonal XDG specs: - Lookup for a handler when media type is known - Database of media types with file suffixes and signatures (magic sequences) The former one is more important, unfortunately its implementation in Emacs has not nearly completed. ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: [PATCH v2] Re: Bug in 9.5.3 org--file-default-apps 2022-05-26 4:23 ` [PATCH v2] " Ihor Radchenko 2022-05-29 6:07 ` Max Nikulin @ 2022-05-29 7:07 ` Max Nikulin 1 sibling, 0 replies; 48+ messages in thread From: Max Nikulin @ 2022-05-29 7:07 UTC (permalink / raw) To: emacs-orgmode On 26/05/2022 11:23, Ihor Radchenko wrote: > diff --git a/lisp/org.el b/lisp/org.el > index d7da8efc4..45a179a8a 100644 > --- a/lisp/org.el > +++ b/lisp/org.el > @@ -7975,7 +7975,12 @@ (defun org-open-file (path &optional in-emacs line search) > (when (eq cmd 'mailcap) > (require 'mailcap) > (mailcap-parse-mailcaps) > - (let* ((mime-type (mailcap-extension-to-mime (or ext ""))) > + (let* ((mime-type (if (executable-find "file") > + (shell-command-to-string > + (format "%s --brief --mime-type %s" Another corner case: file --brief --mime-type tstorg-sh-symlink inode/symlink file --brief --mime-type --dereference tstorg-sh-symlink text/x-shellscript > + (executable-find "file") > + (shell-quote-argument (convert-standard-filename file)))) > + (mailcap-extension-to-mime (or ext "")))) Actually MIME type for shell scripts varies a lot (mailcap-extension-to-mime "sh") => "text/x-sh" run-mailcap --norun examples/org/script/tstorg.sh Error: no "view" mailcap rules found for type "application/x-sh" And "text/x-shellscript" as above. ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-21 1:44 ` Ihor Radchenko 2022-05-21 14:56 ` Max Nikulin @ 2022-05-23 12:40 ` Craig STCR 2022-05-23 12:59 ` Craig STCR ` (2 more replies) 1 sibling, 3 replies; 48+ messages in thread From: Craig STCR @ 2022-05-23 12:40 UTC (permalink / raw) To: Ihor Radchenko, Max Nikulin; +Cc: emacs-orgmode Thanks all for your help! On 5/20/22 9:44 PM, Ihor Radchenko wrote: > Dear Craig, ... or provide plain/text handler in ~/.mailcap. > OK, I did a first-try on this and was unsuccessful, but I'm sure it's user error. I need to refresh my knowledge on how to customize user-local mime database, and that will write-out a new ~/.mailcap, etc, I think? I've done it before, but it was awhile ago, and I wasn't paying attention to ~/.mailcap when I did it. I know for Gnome I can create a .desktop file. But I know there's a way to customize user-local mime database without Gnome desktop. I'll take a closer look when I have a little more time. On 5/20/22 9:44 PM, Ihor Radchenko wrote: > However, I am not sure what to do on Windows/Mac. Maybe try a quick-and-dirty, cross-platform solution that checks non-binary files for a first-line shebang? Could use existing Emacs hooks that determine major-mode when opening files. Again, thanks all for your help! Best, -Craig ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-23 12:40 ` Craig STCR @ 2022-05-23 12:59 ` Craig STCR 2022-05-23 14:14 ` Craig STCR 2022-05-25 6:18 ` Ihor Radchenko 2022-05-23 15:28 ` Max Nikulin 2022-05-25 6:10 ` Ihor Radchenko 2 siblings, 2 replies; 48+ messages in thread From: Craig STCR @ 2022-05-23 12:59 UTC (permalink / raw) To: Ihor Radchenko, Max Nikulin; +Cc: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 1885 bytes --] I guess maybe I should have given a little better description of what I tried that did NOT work? But it's a little off-topic for this mailing list. Nevertheless, here it is... I created a ~/.mailcap file and put this in it, which I cut and pasted from /etc/mailcap: application/x-shellscript; emacs27 %s; test=test -n "$DISPLAY" But obviously that's not going to change anything, since it's already in the system mailcap file, /etc/mailcap. DOH! And sure enough, running '>$ run-mailcap myscript' invokes 'less'. But what I wasn't expecting is that running '>$ update-mime -- local' gives me: "Error: '/home/user/.mailcap' is not in required format -- not updated". Not sure why I'm getting that when I cut-and-pasted from /etc/mailcap. No worries. I'll look in more depth later. On 5/23/22 8:40 AM, Craig STCR wrote: > Thanks all for your help! > > On 5/20/22 9:44 PM, Ihor Radchenko wrote: >> Dear Craig, ... or provide plain/text handler in ~/.mailcap. >> > OK, I did a first-try on this and was unsuccessful, but I'm sure it's > user error. I need to refresh my knowledge on how to customize > user-local mime database, and that will write-out a new ~/.mailcap, > etc, I think? I've done it before, but it was awhile ago, and I > wasn't paying attention to ~/.mailcap when I did it. I know for Gnome > I can create a .desktop file. But I know there's a way to customize > user-local mime database without Gnome desktop. I'll take a closer > look when I have a little more time. > > > On 5/20/22 9:44 PM, Ihor Radchenko wrote: >> However, I am not sure what to do on Windows/Mac. > Maybe try a quick-and-dirty, cross-platform solution that checks > non-binary files for a first-line shebang? Could use existing Emacs > hooks that determine major-mode when opening files. > > Again, thanks all for your help! > > Best, > -Craig > [-- Attachment #2: Type: text/html, Size: 2671 bytes --] ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-23 12:59 ` Craig STCR @ 2022-05-23 14:14 ` Craig STCR 2022-05-23 14:32 ` Craig STCR 2022-05-25 6:18 ` Ihor Radchenko 1 sibling, 1 reply; 48+ messages in thread From: Craig STCR @ 2022-05-23 14:14 UTC (permalink / raw) To: Ihor Radchenko, Max Nikulin; +Cc: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 2598 bytes --] Everything I mentioned so far has been my Bionic desktop. Which, incidentally was an upgrade from Xenial, not a clean install. But... in my Focal headless container, if I run: >$ run-mailcap myscript it invokes emacs. Yay! It works! DISPLAY, EDITOR, and VISUAL are all unset or empty. There's nothing in /etc/mailcap for emacs, and what *IS* in /etc/mailcap is (amongst others of course): application/x-shellscript; vim %s; needsterminal So I really need to spend some time reading man pages about mailcap, mime, etc because that's not what I would expect, and I'm really confused. On 5/23/22 8:59 AM, Craig STCR wrote: > I guess maybe I should have given a little better description of what > I tried that did NOT work? But it's a little off-topic for this > mailing list. Nevertheless, here it is... > > I created a ~/.mailcap file and put this in it, which I cut and pasted > from /etc/mailcap: > > application/x-shellscript; emacs27 %s; test=test -n "$DISPLAY" > > But obviously that's not going to change anything, since it's already > in the system mailcap file, /etc/mailcap. DOH! And sure enough, > running '>$ run-mailcap myscript' invokes 'less'. But what I wasn't > expecting is that running '>$ update-mime -- local' gives me: "Error: > '/home/user/.mailcap' is not in required format -- not updated". Not > sure why I'm getting that when I cut-and-pasted from /etc/mailcap. > > No worries. I'll look in more depth later. > > > On 5/23/22 8:40 AM, Craig STCR wrote: >> Thanks all for your help! >> >> On 5/20/22 9:44 PM, Ihor Radchenko wrote: >>> Dear Craig, ... or provide plain/text handler in ~/.mailcap. >>> >> OK, I did a first-try on this and was unsuccessful, but I'm sure it's >> user error. I need to refresh my knowledge on how to customize >> user-local mime database, and that will write-out a new ~/.mailcap, >> etc, I think? I've done it before, but it was awhile ago, and I >> wasn't paying attention to ~/.mailcap when I did it. I know for >> Gnome I can create a .desktop file. But I know there's a way to >> customize user-local mime database without Gnome desktop. I'll take >> a closer look when I have a little more time. >> >> >> On 5/20/22 9:44 PM, Ihor Radchenko wrote: >>> However, I am not sure what to do on Windows/Mac. >> Maybe try a quick-and-dirty, cross-platform solution that checks >> non-binary files for a first-line shebang? Could use existing Emacs >> hooks that determine major-mode when opening files. >> >> Again, thanks all for your help! >> >> Best, >> -Craig >> > [-- Attachment #2: Type: text/html, Size: 3739 bytes --] ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-23 14:14 ` Craig STCR @ 2022-05-23 14:32 ` Craig STCR 0 siblings, 0 replies; 48+ messages in thread From: Craig STCR @ 2022-05-23 14:32 UTC (permalink / raw) To: Ihor Radchenko, Max Nikulin; +Cc: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 282 bytes --] On 5/23/22 10:14 AM, Craig STCR wrote: > > >$ run-mailcap myscript > > it invokes emacs. Yay! It works! Double DOH! Forget what I said. It invokes vim, lol. That *is* what I would expect. Sorry for the noise. I need to think a little more before I hit <SEND>. [-- Attachment #2: Type: text/html, Size: 750 bytes --] ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-23 12:59 ` Craig STCR 2022-05-23 14:14 ` Craig STCR @ 2022-05-25 6:18 ` Ihor Radchenko 1 sibling, 0 replies; 48+ messages in thread From: Ihor Radchenko @ 2022-05-25 6:18 UTC (permalink / raw) To: Craig STCR; +Cc: Max Nikulin, emacs-orgmode Craig STCR <craig.stcr1@gmail.com> writes: > '>$ run-mailcap myscript' One comment. I do not personally have run-mailcap command on my system, but searching for its docstring reveals (http://www.linux-commands-examples.com/run-mailcap): >> If the mime-type is omitted, an attempt to determine the type is >> made by trying to match the file’s extension with those in the >> mime.types files. So, run-mailcap itself does not look inside the file and only checks the extension. AFAIU. Correct me if I am wrong. Best, Ihor ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-23 12:40 ` Craig STCR 2022-05-23 12:59 ` Craig STCR @ 2022-05-23 15:28 ` Max Nikulin 2022-05-25 6:24 ` Ihor Radchenko 2022-05-25 6:10 ` Ihor Radchenko 2 siblings, 1 reply; 48+ messages in thread From: Max Nikulin @ 2022-05-23 15:28 UTC (permalink / raw) To: Craig STCR; +Cc: emacs-orgmode Craig, discussing the issue with Ihor, I sent some messages to the mail list only without your address in Cc. You may check complete thread at https://list.orgmode.org On 23/05/2022 19:40, Craig STCR wrote: > > OK, I did a first-try on this and was unsuccessful, but I'm sure it's > user error. I need to refresh my knowledge on how to customize > user-local mime database, and that will write-out a new ~/.mailcap, etc, > I think? I've done it before, but it was awhile ago, and I wasn't > paying attention to ~/.mailcap when I did it. I know for Gnome I can > create a .desktop file. But I know there's a way to customize > user-local mime database without Gnome desktop. I'll take a closer look > when I have a little more time. Debian package scripts (that work on Ubuntu as well) extract MIME info from *system* .desktop files to add them to mailcap database. There were some mailcap related changes and bugs around Emacs-27 release, e.g. https://debbugs.gnu.org/cgi/bugreport.cgi?bug=36771 > application/x-shellscript; emacs27 %s; test=test -n "$DISPLAY" Notice that such entry will be ignored when DISPLAY is not set due to specified "test" property. You need to pass X socket and pass or set DISPLAY environment to you "headless" container. update-mime likely assumes that you created ~/.mailcap.order to generate ~/.mailcap from it. Emacs may just read ~/.mailcap, so if you created this file, nothing more is required. Actually I do not think you wish to launch another emacs session in response to following a link in an .org file. I suppose, you experienced https://debbugs.gnu.org/cgi/bugreport.cgi?bug=40247 otherwise (mailcap-mime-info nil) (or "text/plain") would return view-mode and your scripts would be opened in another emacs window. It should work without mailcap entries. ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-23 15:28 ` Max Nikulin @ 2022-05-25 6:24 ` Ihor Radchenko 2022-05-25 11:38 ` Craig STCR 0 siblings, 1 reply; 48+ messages in thread From: Ihor Radchenko @ 2022-05-25 6:24 UTC (permalink / raw) To: Max Nikulin; +Cc: Craig STCR, emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: >> application/x-shellscript; emacs27 %s; test=test -n "$DISPLAY" > > Notice that such entry will be ignored when DISPLAY is not set due to > specified "test" property. You need to pass X socket and pass or set > DISPLAY environment to you "headless" container. Also, note that mailcap.el contains `mailcap-mailcap-entry-passes-test' and that function is ... interesting. At least, it should work fine with the test above, but only very limited number of tests appears to be supported. Best, Ihor ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-25 6:24 ` Ihor Radchenko @ 2022-05-25 11:38 ` Craig STCR 0 siblings, 0 replies; 48+ messages in thread From: Craig STCR @ 2022-05-25 11:38 UTC (permalink / raw) To: Ihor Radchenko, Max Nikulin; +Cc: emacs-orgmode Yeah I was wondering about that 'test' line. I was wondering if, like you say, it gets ignored. Or if the true / false value gets passed to some other logic that would, for example, add a '-nw' to the emacs command line. I have no idea. On 5/25/22 2:24 AM, Ihor Radchenko wrote: > Max Nikulin <manikulin@gmail.com> writes: > >>> application/x-shellscript; emacs27 %s; test=test -n "$DISPLAY" >> Notice that such entry will be ignored when DISPLAY is not set due to >> specified "test" property. You need to pass X socket and pass or set >> DISPLAY environment to you "headless" container. > Also, note that mailcap.el contains `mailcap-mailcap-entry-passes-test' > and that function is ... interesting. At least, it should work fine with > the test above, but only very limited number of tests appears to be > supported. > > Best, > Ihor ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-23 12:40 ` Craig STCR 2022-05-23 12:59 ` Craig STCR 2022-05-23 15:28 ` Max Nikulin @ 2022-05-25 6:10 ` Ihor Radchenko 2 siblings, 0 replies; 48+ messages in thread From: Ihor Radchenko @ 2022-05-25 6:10 UTC (permalink / raw) To: Craig STCR; +Cc: Max Nikulin, emacs-orgmode Craig STCR <craig.stcr1@gmail.com> writes: > On 5/20/22 9:44 PM, Ihor Radchenko wrote: >> However, I am not sure what to do on Windows/Mac. > Maybe try a quick-and-dirty, cross-platform solution that checks > non-binary files for a first-line shebang? Could use existing Emacs > hooks that determine major-mode when opening files. Good idea. Currently, Org only supports auto-mode-alist (see org-file-apps docstring) checking the filename. I think that the same option can be extended to use magic-mode-alist and such. I will leave it for others to implement. Patches are welcome! Best, Ihor ^ permalink raw reply [flat|nested] 48+ messages in thread
[parent not found: <e9b4e88d-3807-9080-fa86-c297b17794cb@gmail.com>]
* Re: Bug in 9.5.3 org--file-default-apps [not found] ` <e9b4e88d-3807-9080-fa86-c297b17794cb@gmail.com> @ 2022-05-16 12:38 ` Craig STCR 2022-05-18 11:38 ` Ihor Radchenko 0 siblings, 1 reply; 48+ messages in thread From: Craig STCR @ 2022-05-16 12:38 UTC (permalink / raw) To: Ihor Radchenko, emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 4426 bytes --] [ With 'Reply All' ] Here's a summary of what I currently observe: 1) I was mistaken about the change from 9.5.2 to 9.5.3. You are correct. As you noted, the 9.5.2, 9.5.3 diff I previously mentioned was erroneous. 2) The problem I encounter with both 9.5.2 and 9.5.3 is that when opening a shell script -- no file extension, e.g. /home/user/myscript -- mailcap should be consulted and org should open the script file in Emacs. The mailcap entry is: application/x-shellscript; emacs27 %s; test=test -n "$DISPLAY" But instead, org opens the script file using /bin/less, not emacs. 3) The misbehavior in #2 is new. I don't know exactly when it started misbehaving but I suspect it happened after updating org to 9.5.3. But other packages -- elpa, emacs binaries, OS binaries -- may have been updated at the same time, or before that, or after that, so hard to pin it down. I can't even say for sure if the upgrade to org 9.5.3 was from org 9.5.2. It may have been an upgrade from an org version older than 9.5.2. 4) Throughout this discussion, when I say "org opens" I am referring to the key sequence "C-c C-o" bound to org-open-at-point. It opens script file with /bin/less, which is not what I would expect. <mouse-1>, bound to org-open-at-mouse (which calls org-open-file?) has the same misbehavior. 5) <mouse-3>, bound to org-find-file-at-mouse, *works as expected* and opens the script file in emacs. Also, using a single prefix argument, "C-u C-c C-o" *works as expected* and opens the script file in emacs. 6) Last but not lease, when I *manually edit* org.el and change the last line of the org--file-default-apps function definition, removing underscore and space, and replacing with single quote like this: diff 8701c8700 < (_ org-file-apps-gnu))) --- > ('org-file-apps-gnu))) I no longer observe the misbehavior described in #2 and #4. Instead, org *works as expected*, like it does with #5, and opens the script file in emacs, not /bin/less. I know your time is valuable. No need for you to spend a lot of time on this if I am the only one having this problem. It could be some random artifact in my installation, maybe something in my ~/.emacs. My ~/.emacs has a lot in it. And I have a work-around, since I can use #5. Best wishes, -C On 5/16/22 6:29 AM, Craig STCR wrote: > It's possible my elpa is FUBAR. I will uninstall, rm .elc, > re-install, and re-compile org 9.5.3 when I get a chance. > > On 5/16/22 6:08 AM, Craig STCR wrote: >> OK, I'll take a look as you suggested as soon as I can. >> >> So the form in 9.5.2 was a bug? >> >> The problem I encounter with the new form in 9.5.3 is that when >> opening a shell script -- no file extension, e.g. /home/user/myscript >> -- 9.5.2 would consult mailcap and open the script in Emacs. The >> mailcap entry is: >> >> application/x-shellscript; emacs27 %s; test=test -n "$DISPLAY" >> >> But with the new form in 9.5.3, /home/user/myscript is opened by >> /bin/less, not emacs. I assume mailcap is not consulted. Which does >> not work well. These behaviors are only for org. Outside of org, >> emacs behaves correctly. >> >> I'll take a look as you suggested as soon as I can. >> >> Thanks, Ihor. >> >> >> On 5/16/22 4:33 AM, Ihor Radchenko wrote: >>> Craig STCR<craig.stcr1@gmail.com> writes: >>> >>>> 9.5.3 does not return org-file-apps-gnu because org-file-apps-gnu is not >>>> quoted. Should be (and was in 9.5.2): >>>> >>>> 'org-file-apps-gnu >>>> >>>> but in 9.5.3 it is: >>>> >>>> _ org-file-apps-gnu >>> Please try to run the following form: >>> >>> (pcase 'gnu/linux >>> (`darwin org-file-apps-macos) >>> (`windows-nt org-file-apps-windowsnt) >>> ('org-file-apps-gnu)) ;; => nil >>> >>> and then >>> >>> (pcase 'gnu/linux >>> (`darwin org-file-apps-macos) >>> (`windows-nt org-file-apps-windowsnt) >>> (_ org-file-apps-gnu)) ;; => ((remote . emacs) (system . mailcap) (t . mailcap)) >>> >>> The second case is returning a list, which org--file-default-apps >>> supposed to return. The previous behaviour was erroneous. You may refer >>> to M-x describe-function <RET> pcase <RET> to understand the code. >>> >>> Please, provide more details on the actual error you ran into. The >>> change in the org--file-default-apps is not a bug. >>> >>> Best, >>> Ihor >>> >> > [-- Attachment #2: Type: text/html, Size: 6228 bytes --] ^ permalink raw reply [flat|nested] 48+ messages in thread
* Re: Bug in 9.5.3 org--file-default-apps 2022-05-16 12:38 ` Craig STCR @ 2022-05-18 11:38 ` Ihor Radchenko 0 siblings, 0 replies; 48+ messages in thread From: Ihor Radchenko @ 2022-05-18 11:38 UTC (permalink / raw) To: Craig STCR; +Cc: emacs-orgmode Craig STCR <craig.stcr1@gmail.com> writes: > I know your time is valuable. No need for you to spend a lot of time on > this if I am the only one having this problem. It could be some random > artifact in my installation, maybe something in my ~/.emacs. My > ~/.emacs has a lot in it. And I have a work-around, since I can use #5. Using #5 may surprise you if you actually set something via mailcap. Can you instead try to put text/plain; emacs27 %s; test=test -n "$DISPLAY" into your mailcap file and report if it helps? Best, Ihor ^ permalink raw reply [flat|nested] 48+ messages in thread
end of thread, other threads:[~2024-02-27 10:44 UTC | newest] Thread overview: 48+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-05-15 16:49 Bug in 9.5.3 org--file-default-apps Craig STCR 2022-05-16 4:53 ` Ihor Radchenko [not found] ` <6615610d-93ae-171f-b554-3f4cc79354cc@gmail.com> 2022-05-16 8:33 ` Ihor Radchenko [not found] ` <86692975-4d5f-6933-3227-c6b208f76862@gmail.com> 2022-05-16 11:57 ` Ihor Radchenko 2022-05-16 15:14 ` Max Nikulin 2022-05-16 19:15 ` Craig STCR 2022-05-16 19:29 ` Craig STCR 2022-05-17 16:03 ` Max Nikulin 2022-05-18 11:36 ` Ihor Radchenko 2022-05-18 16:10 ` Max Nikulin 2022-05-19 13:39 ` Ihor Radchenko 2022-05-19 14:45 ` Max Nikulin 2022-05-20 8:22 ` Ihor Radchenko 2022-05-20 11:31 ` Max Nikulin 2022-05-21 1:44 ` Ihor Radchenko 2022-05-21 14:56 ` Max Nikulin 2022-05-22 4:10 ` [PATCH] " Ihor Radchenko 2022-05-22 7:40 ` Max Nikulin 2022-05-26 4:23 ` [PATCH v2] " Ihor Radchenko 2022-05-29 6:07 ` Max Nikulin 2022-05-30 14:00 ` [PATCH v3] " Ihor Radchenko 2022-05-30 15:38 ` Max Nikulin 2022-05-31 15:07 ` Max Nikulin 2022-06-04 13:42 ` [DISCUSSION, default settings] Using mailcap as default handler for opening file links (was: [PATCH v3] Re: Bug in 9.5.3 org--file-default-apps) Ihor Radchenko 2022-06-04 17:01 ` Greg Minshall 2022-06-06 12:50 ` [DISCUSSION, default settings] Using mailcap as default handler for opening file links Max Nikulin 2022-06-06 15:22 ` Max Nikulin 2022-06-06 17:47 ` Bhavin Gandhi 2022-06-10 16:38 ` Max Nikulin 2024-02-12 12:36 ` Ihor Radchenko 2024-02-13 10:59 ` Max Nikulin 2024-02-13 11:27 ` Ihor Radchenko 2024-02-13 15:44 ` Max Nikulin 2024-02-13 15:47 ` Max Nikulin 2024-02-14 14:51 ` Ihor Radchenko 2024-02-27 10:43 ` Max Nikulin 2022-05-29 7:07 ` [PATCH v2] Re: Bug in 9.5.3 org--file-default-apps Max Nikulin 2022-05-23 12:40 ` Craig STCR 2022-05-23 12:59 ` Craig STCR 2022-05-23 14:14 ` Craig STCR 2022-05-23 14:32 ` Craig STCR 2022-05-25 6:18 ` Ihor Radchenko 2022-05-23 15:28 ` Max Nikulin 2022-05-25 6:24 ` Ihor Radchenko 2022-05-25 11:38 ` Craig STCR 2022-05-25 6:10 ` Ihor Radchenko [not found] ` <e9b4e88d-3807-9080-fa86-c297b17794cb@gmail.com> 2022-05-16 12:38 ` Craig STCR 2022-05-18 11:38 ` Ihor Radchenko
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).