* [BUG] "Safe" local values for org-entities-user not recognized as such [9.6.11 (release_9.6.11 @ /Applications/MacPorts/Emacs.app/Contents/Resources/lisp/org/)]
@ 2023-12-12 11:40 Aaron Madlon-Kay
2023-12-12 12:01 ` Aaron Madlon-Kay
0 siblings, 1 reply; 6+ messages in thread
From: Aaron Madlon-Kay @ 2023-12-12 11:40 UTC (permalink / raw)
To: emacs-orgmode
Remember to cover the basics, that is, what you expected to happen and
what in fact did happen. You don't know how to make a good report? See
https://orgmode.org/manual/Feedback.html#Feedback
Your bug report will be posted to the Org mailing list.
------------------------------------------------------------------------
Local definitions for `org-entities-user` are not recognized as "safe"
even when they are in the correct format. For instance, including the
following local variables list in an org-mode file will still result in
Emacs prompting you to accept the value:
# Local Variables:
# org-entities-user: (("snowman" "[snowman]" nil "☃" "[snowman]" "[snowman]" "☃"))
# End:
Cause: The defcustom for `org-entities-user` has :safe set to the
function `org-entities--user-safe-p`. This function, however, appears to
be designed to validate a single entry of `org-entities-user`, rather
than the full value. Locally redefining as follows results in the
expected behavior:
(defun org-entities--user-safe-p (v)
"Non-nil if V is a safe value for `org-entities-user'."
(seq-every-p
(lambda (e) (pcase e
(`nil t)
(`(,(and (pred stringp)
(pred (string-match-p "\\`[a-zA-Z][a-zA-Z0-9]*\\'")))
,(pred stringp) ,(pred booleanp) ,(pred stringp)
,(pred stringp) ,(pred stringp) ,(pred stringp))
t)
(_ nil)))
v))
The difference is that the current logic has been supplied as a lambda
to `seq-every-p`.
Thank you,
Aaron
Emacs : GNU Emacs 30.0.50 (build 1, x86_64-apple-darwin23.1.0, NS appkit-2487.20 Version 14.1.1 (Build 23B81))
of 2023-11-26
Package: Org mode version 9.6.11 (release_9.6.11 @ /Applications/MacPorts/Emacs.app/Contents/Resources/lisp/org/)
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [BUG] "Safe" local values for org-entities-user not recognized as such [9.6.11 (release_9.6.11 @ /Applications/MacPorts/Emacs.app/Contents/Resources/lisp/org/)]
2023-12-12 11:40 [BUG] "Safe" local values for org-entities-user not recognized as such [9.6.11 (release_9.6.11 @ /Applications/MacPorts/Emacs.app/Contents/Resources/lisp/org/)] Aaron Madlon-Kay
@ 2023-12-12 12:01 ` Aaron Madlon-Kay
2023-12-12 12:29 ` Aaron Madlon-Kay
0 siblings, 1 reply; 6+ messages in thread
From: Aaron Madlon-Kay @ 2023-12-12 12:01 UTC (permalink / raw)
To: emacs-orgmode
> On Dec 12, 2023, at 20:40, Aaron Madlon-Kay <aaron@madlon-kay.com> wrote:
>
> Locally redefining as follows results in the expected behavior:
The previous formulation was not very good. Actually it seems that the existing
function is correct except that the list case should be wrapped in (seq …).
(defun org-entities--user-safe-p (v)
"Non-nil if V is a safe value for `org-entities-user'."
(pcase v
(`nil t)
((seq `(,(and (pred stringp)
(pred (string-match-p "\\`[a-zA-Z][a-zA-Z0-9]*\\'")))
,(pred stringp) ,(pred booleanp) ,(pred stringp)
,(pred stringp) ,(pred stringp) ,(pred stringp)))
t)
(_ nil)))
Regardless I leave the details to the developers.
-Aaron
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [BUG] "Safe" local values for org-entities-user not recognized as such [9.6.11 (release_9.6.11 @ /Applications/MacPorts/Emacs.app/Contents/Resources/lisp/org/)]
2023-12-12 12:01 ` Aaron Madlon-Kay
@ 2023-12-12 12:29 ` Aaron Madlon-Kay
2023-12-12 12:55 ` Ihor Radchenko
0 siblings, 1 reply; 6+ messages in thread
From: Aaron Madlon-Kay @ 2023-12-12 12:29 UTC (permalink / raw)
To: emacs-orgmode
> On Dec 12, 2023, at 21:01, Aaron Madlon-Kay <aaron@madlon-kay.com> wrote:
>
>> On Dec 12, 2023, at 20:40, Aaron Madlon-Kay <aaron@madlon-kay.com> wrote:
>>
>> Locally redefining as follows results in the expected behavior:
>
> The previous formulation was not very good. Actually it seems that the existing
> function is correct except that the list case should be wrapped in (seq …).
OK this was also wrong, because seq only matches a finite sequence. I couldn’t
find a way to match an arbitrary-length list with pcase, so here’s my final
attempt:
(defun org-entities--user-safe-p (v)
"Non-nil if V is a safe value for `org-entities-user'."
(cond
((not v) t)
((listp v)
(seq-every-p
(lambda (e)
(pcase e
(`(,(and (pred stringp)
(pred (string-match-p "\\`[a-zA-Z][a-zA-Z0-9]*\\'")))
,(pred stringp) ,(pred booleanp) ,(pred stringp)
,(pred stringp) ,(pred stringp) ,(pred stringp))
t)
(_ nil)))
v))))
This seems to handle all cases correctly, but again of course I leave the
details to the devs (is seq-every-p allowed? is there actually a way to do it
with just pcase?).
Thanks,
Aaron
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [BUG] "Safe" local values for org-entities-user not recognized as such [9.6.11 (release_9.6.11 @ /Applications/MacPorts/Emacs.app/Contents/Resources/lisp/org/)]
2023-12-12 12:29 ` Aaron Madlon-Kay
@ 2023-12-12 12:55 ` Ihor Radchenko
[not found] ` <98E48EEB-5E10-42ED-91D4-9369B6B98B20@madlon-kay.com>
0 siblings, 1 reply; 6+ messages in thread
From: Ihor Radchenko @ 2023-12-12 12:55 UTC (permalink / raw)
To: Aaron Madlon-Kay; +Cc: emacs-orgmode
Aaron Madlon-Kay <aaron@madlon-kay.com> writes:
> OK this was also wrong, because seq only matches a finite sequence. I couldn’t
> find a way to match an arbitrary-length list with pcase, so here’s my final
> attempt:
>
> ...
> This seems to handle all cases correctly, but again of course I leave the
> details to the devs (is seq-every-p allowed? is there actually a way to do it
> with just pcase?).
`seq-every-p' is perfectly fine. I am now aware about a way to do it just
with `pcase'.
May you turn your code into a proper patch?
--
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] 6+ messages in thread
* Re: [BUG] "Safe" local values for org-entities-user not recognized as such [9.6.11 (release_9.6.11 @ /Applications/MacPorts/Emacs.app/Contents/Resources/lisp/org/)]
[not found] ` <87y1dz5wxm.fsf@localhost>
@ 2023-12-12 14:36 ` Aaron Madlon-Kay
2023-12-12 15:18 ` Ihor Radchenko
0 siblings, 1 reply; 6+ messages in thread
From: Aaron Madlon-Kay @ 2023-12-12 14:36 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 360 bytes --]
> On Dec 12, 2023, at 23:15, Ihor Radchenko <yantar92@posteo.net> wrote:
>
> This particular change should fit within TINYCHANGE, I think. So, you do
> not need a copyright assignment (unless you have already exhausted the
> 15LOC limit on Emacs patches, which I do not see in git logs).
Ah, yes, that should be OK then. Please see attached.
Thanks,
Aaron
[-- Attachment #2: 0001-lisp-org-entities.el-Fix-safe-value-predicate-for-or.patch --]
[-- Type: application/octet-stream, Size: 1669 bytes --]
From 0716d90fe9a19fb668fd0fc6890adc565205f8d5 Mon Sep 17 00:00:00 2001
From: Aaron Madlon-Kay <aaron@madlon-kay.com>
Date: Tue, 12 Dec 2023 23:21:22 +0900
Subject: [PATCH] lisp/org-entities.el: Fix safe value predicate for
org-entities-user
* lisp/org-entities.el (org-entities--user-safe-p): Fix logic to
validate a list of entries, rather than a single entry.
Reported-by: "Aaron Madlon-Kay" <aaron@madlon-kay.com>
Link: https://list.orgmode.org/874jgn7f7s.fsf@localhost/
TINYCHANGE
---
lisp/org-entities.el | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/lisp/org-entities.el b/lisp/org-entities.el
index 91c17f4d6..87d2fbe67 100644
--- a/lisp/org-entities.el
+++ b/lisp/org-entities.el
@@ -41,14 +41,19 @@ defgroup org-entities
(defun org-entities--user-safe-p (v)
"Non-nil if V is a safe value for `org-entities-user'."
- (pcase v
- (`nil t)
- (`(,(and (pred stringp)
- (pred (string-match-p "\\`[a-zA-Z][a-zA-Z0-9]*\\'")))
- ,(pred stringp) ,(pred booleanp) ,(pred stringp)
- ,(pred stringp) ,(pred stringp) ,(pred stringp))
- t)
- (_ nil)))
+ (cond
+ ((not v) t)
+ ((listp v)
+ (seq-every-p
+ (lambda (e)
+ (pcase e
+ (`(,(and (pred stringp)
+ (pred (string-match-p "\\`[a-zA-Z][a-zA-Z0-9]*\\'")))
+ ,(pred stringp) ,(pred booleanp) ,(pred stringp)
+ ,(pred stringp) ,(pred stringp) ,(pred stringp))
+ t)
+ (_ nil)))
+ v))))
(defcustom org-entities-user nil
"User-defined entities used in Org to produce special characters.
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [BUG] "Safe" local values for org-entities-user not recognized as such [9.6.11 (release_9.6.11 @ /Applications/MacPorts/Emacs.app/Contents/Resources/lisp/org/)]
2023-12-12 14:36 ` Aaron Madlon-Kay
@ 2023-12-12 15:18 ` Ihor Radchenko
0 siblings, 0 replies; 6+ messages in thread
From: Ihor Radchenko @ 2023-12-12 15:18 UTC (permalink / raw)
To: Aaron Madlon-Kay; +Cc: emacs-orgmode
Aaron Madlon-Kay <aaron@madlon-kay.com> writes:
>> This particular change should fit within TINYCHANGE, I think. So, you do
>> not need a copyright assignment (unless you have already exhausted the
>> 15LOC limit on Emacs patches, which I do not see in git logs).
>
> Ah, yes, that should be OK then. Please see attached.
Thanks!
Applied, onto bugfix.
Fixed.
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=1ec18b8eb
--
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] 6+ messages in thread
end of thread, other threads:[~2023-12-12 15:16 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-12 11:40 [BUG] "Safe" local values for org-entities-user not recognized as such [9.6.11 (release_9.6.11 @ /Applications/MacPorts/Emacs.app/Contents/Resources/lisp/org/)] Aaron Madlon-Kay
2023-12-12 12:01 ` Aaron Madlon-Kay
2023-12-12 12:29 ` Aaron Madlon-Kay
2023-12-12 12:55 ` Ihor Radchenko
[not found] ` <98E48EEB-5E10-42ED-91D4-9369B6B98B20@madlon-kay.com>
[not found] ` <87y1dz5wxm.fsf@localhost>
2023-12-12 14:36 ` Aaron Madlon-Kay
2023-12-12 15:18 ` 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).