emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [BUG] When calling org-tree-to-indirect-buffer: (wrong-type-argument listp org-fold-outline) in org-fold-core-get-folding-spec-from-alias [9.6.6 (release_9.6.6 @ /gnu/store/c7vqk20kf6zw73klr8bacnh0gqahk5dd-emacs-29.1-29.1/share/emacs/29.1/lisp/org/)]
@ 2023-08-24 16:50 Adam Porter
  2023-08-25  8:19 ` Ihor Radchenko
  0 siblings, 1 reply; 5+ messages in thread
From: Adam Porter @ 2023-08-24 16:50 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 721 bytes --]

Hi,

Since upgrading to Emacs 29.1 and Org 9.6.6, I am getting an error when
opening a bookmark to an Org subtree buffer created with burly.el.  When
opening the bookmark, burly calls org-tree-to-indirect-buffer to make a
new indirect buffer showing the subtree in question.  This worked fine
in Emacs 28 and the previous Org version I was using, 9.5.something,
IIRC.  Now I get this error (please see the attached backtrace, which is 
abbreviated, and some functions were re-evaluated so as to be interpreted).

FWIW, I also tried setting org-fold-core-style to overlays and
restarting Emacs, but the error still happens, although with a different
symbol in place of org-fold-outline.

Thanks for your work on Org.

Adam

[-- Attachment #2: backtrace.txt --]
[-- Type: text/plain, Size: 8196 bytes --]

Debugger entered--Lisp error: (wrong-type-argument listp org-fold-outline)
  car(org-fold-outline)
  alist-get(org-fold-outline ((:alias . org-link) (org-link . org-link) (:alias . org-link-description) (org-link-description . org-link-description) (property-drawer . org-fold-drawer) (drawer . org-fold-drawer) (:alias . org-fold-drawer) (org-fold-drawer . org-fold-drawer) (verse-block . org-fold-block) (src-block . org-fold-block) (special-block . org-fold-block) (quote-block . org-fold-block) (export-block . org-fold-block) (example-block . org-fold-block) (dynamic-block . org-fold-block) (comment-block . org-fold-block) (center-block . org-fold-block) (block . org-fold-block) (:alias . org-fold-block) (org-fold-block . org-fold-block) (plain-list . org-fold-outline) (inlinetask . org-fold-outline) (outline . org-fold-outline) (heading . org-fold-outline) (headline . org-fold-outline) (:alias . org-fold-outline) (org-fold-outline . org-fold-outline)))
  org-fold-core-get-folding-spec-from-alias(org-fold-outline)
  org-fold-core--property-symbol-get-create(org-fold-outline)
  org-fold-core-decouple-indirect-buffer-folds()
  org-get-indirect-buffer(#<buffer USHIN.org> #("Meetings / Sessions" 0 19 (fontified nil line-prefix "" wrap-prefix #("* " 0 2 (face org-indent)))))
  #<subr org-tree-to-indirect-buffer>()
  apply(#<subr org-tree-to-indirect-buffer> nil)
  org-tree-to-indirect-buffer()
  (cond (indirect (org-tree-to-indirect-buffer)) (narrowed (progn (org-narrow-to-subtree) (goto-char (org-find-olp (read point-olp) 'this-buffer)))))
  (progn (widen) (if heading-pos (goto-char heading-pos) (goto-char (string-to-number pos))) (cond (indirect (org-tree-to-indirect-buffer)) (narrowed (progn (org-narrow-to-subtree) (goto-char (org-find-olp (read point-olp) 'this-buffer))))) (if (and heading-pos relative-pos) (progn (forward-char (string-to-number relative-pos)))) (current-buffer))
  (let* ((heading-pos (if top-olp (progn (org-find-olp (read top-olp) 'this-buffer))))) (progn (widen) (if heading-pos (goto-char heading-pos) (goto-char (string-to-number pos))) (cond (indirect (org-tree-to-indirect-buffer)) (narrowed (progn (org-narrow-to-subtree) (goto-char (org-find-olp (read point-olp) 'this-buffer))))) (if (and heading-pos relative-pos) (progn (forward-char (string-to-number relative-pos)))) (current-buffer)))
  (let ((pos x2699) (indirect x2700) (narrowed x2701) (top-olp x2702) (point-olp x2703) (relative-pos x2704)) (let* ((heading-pos (if top-olp (progn (org-find-olp (read top-olp) 'this-buffer))))) (progn (widen) (if heading-pos (goto-char heading-pos) (goto-char (string-to-number pos))) (cond (indirect (org-tree-to-indirect-buffer)) (narrowed (progn (org-narrow-to-subtree) (goto-char (org-find-olp ... ...))))) (if (and heading-pos relative-pos) (progn (forward-char (string-to-number relative-pos)))) (current-buffer))))
  (let* ((x2699 (map-elt query "pos")) (x2700 (map-elt query "indirect")) (x2701 (map-elt query "narrowed")) (x2702 (map-elt query "top-olp")) (x2703 (map-elt query "point-olp")) (x2704 (map-elt query "relative-pos"))) (let ((pos x2699) (indirect x2700) (narrowed x2701) (top-olp x2702) (point-olp x2703) (relative-pos x2704)) (let* ((heading-pos (if top-olp (progn (org-find-olp ... ...))))) (progn (widen) (if heading-pos (goto-char heading-pos) (goto-char (string-to-number pos))) (cond (indirect (org-tree-to-indirect-buffer)) (narrowed (progn (org-narrow-to-subtree) (goto-char ...)))) (if (and heading-pos relative-pos) (progn (forward-char (string-to-number relative-pos)))) (current-buffer)))))
  (progn (ignore (mapp query)) (let* ((x2699 (map-elt query "pos")) (x2700 (map-elt query "indirect")) (x2701 (map-elt query "narrowed")) (x2702 (map-elt query "top-olp")) (x2703 (map-elt query "point-olp")) (x2704 (map-elt query "relative-pos"))) (let ((pos x2699) (indirect x2700) (narrowed x2701) (top-olp x2702) (point-olp x2703) (relative-pos x2704)) (let* ((heading-pos (if top-olp (progn ...)))) (progn (widen) (if heading-pos (goto-char heading-pos) (goto-char (string-to-number pos))) (cond (indirect (org-tree-to-indirect-buffer)) (narrowed (progn ... ...))) (if (and heading-pos relative-pos) (progn (forward-char ...))) (current-buffer))))))
  (progn (fset 'alist-get vnew) (progn (ignore (mapp query)) (let* ((x2699 (map-elt query "pos")) (x2700 (map-elt query "indirect")) (x2701 (map-elt query "narrowed")) (x2702 (map-elt query "top-olp")) (x2703 (map-elt query "point-olp")) (x2704 (map-elt query "relative-pos"))) (let ((pos x2699) (indirect x2700) (narrowed x2701) (top-olp x2702) (point-olp x2703) (relative-pos x2704)) (let* ((heading-pos (if top-olp ...))) (progn (widen) (if heading-pos (goto-char heading-pos) (goto-char ...)) (cond (indirect ...) (narrowed ...)) (if (and heading-pos relative-pos) (progn ...)) (current-buffer)))))))
  (unwind-protect (progn (fset 'alist-get vnew) (progn (ignore (mapp query)) (let* ((x2699 (map-elt query "pos")) (x2700 (map-elt query "indirect")) (x2701 (map-elt query "narrowed")) (x2702 (map-elt query "top-olp")) (x2703 (map-elt query "point-olp")) (x2704 (map-elt query "relative-pos"))) (let ((pos x2699) (indirect x2700) (narrowed x2701) (top-olp x2702) (point-olp x2703) (relative-pos x2704)) (let* ((heading-pos ...)) (progn (widen) (if heading-pos ... ...) (cond ... ...) (if ... ...) (current-buffer))))))) (fset 'alist-get old))
  (let* ((vnew #'(lambda (key alist &optional _default _remove _testfn) (car (cdr (assoc-string key alist))))) (old (symbol-function 'alist-get))) (unwind-protect (progn (fset 'alist-get vnew) (progn (ignore (mapp query)) (let* ((x2699 (map-elt query "pos")) (x2700 (map-elt query "indirect")) (x2701 (map-elt query "narrowed")) (x2702 (map-elt query "top-olp")) (x2703 (map-elt query "point-olp")) (x2704 (map-elt query "relative-pos"))) (let ((pos x2699) (indirect x2700) (narrowed x2701) (top-olp x2702) (point-olp x2703) (relative-pos x2704)) (let* (...) (progn ... ... ... ... ...)))))) (fset 'alist-get old)))
  (save-current-buffer (set-buffer buffer) (let* ((vnew #'(lambda (key alist &optional _default _remove _testfn) (car (cdr ...)))) (old (symbol-function 'alist-get))) (unwind-protect (progn (fset 'alist-get vnew) (progn (ignore (mapp query)) (let* ((x2699 ...) (x2700 ...) (x2701 ...) (x2702 ...) (x2703 ...) (x2704 ...)) (let (... ... ... ... ... ...) (let* ... ...))))) (fset 'alist-get old))))
  (progn (let ((--cl-keys-- --cl-rest--)) (while --cl-keys-- (cond ((memq (car --cl-keys--) '(:buffer :query :allow-other-keys)) (if (cdr --cl-keys--) nil (error "Missing argument for %s" (car --cl-keys--))) (setq --cl-keys-- (cdr (cdr --cl-keys--)))) ((car (cdr (memq ... --cl-rest--))) (setq --cl-keys-- nil)) (t (error "Keyword argument %s not one of (:buffer :query)" (car --cl-keys--)))))) (save-current-buffer (set-buffer buffer) (let* ((vnew #'(lambda (key alist &optional _default _remove _testfn) (car ...))) (old (symbol-function 'alist-get))) (unwind-protect (progn (fset 'alist-get vnew) (progn (ignore (mapp query)) (let* (... ... ... ... ... ...) (let ... ...)))) (fset 'alist-get old)))))
  (let* ((buffer (car (cdr (plist-member --cl-rest-- ':buffer)))) (query (car (cdr (plist-member --cl-rest-- ':query))))) (progn (let ((--cl-keys-- --cl-rest--)) (while --cl-keys-- (cond ((memq (car --cl-keys--) '...) (if (cdr --cl-keys--) nil (error "Missing argument for %s" ...)) (setq --cl-keys-- (cdr ...))) ((car (cdr ...)) (setq --cl-keys-- nil)) (t (error "Keyword argument %s not one of (:buffer :query)" (car --cl-keys--)))))) (save-current-buffer (set-buffer buffer) (let* ((vnew #'(lambda ... ...)) (old (symbol-function 'alist-get))) (unwind-protect (progn (fset 'alist-get vnew) (progn (ignore ...) (let* ... ...))) (fset 'alist-get old))))))
  burly-follow-url-org-mode(:buffer #<buffer USHIN.org> :query (("narrowed" "t") ("indirect" "t") ("relative-pos" "0") ("point-olp" "(\"Meetings / Sessions\")") ("top-olp" "(\"Meetings / Sessions\")") ("pos" "35523")))
  funcall(burly-follow-url-org-mode :buffer #<buffer USHIN.org> :query (("narrowed" "t") ("indirect" "t") ("relative-pos" "0") ("point-olp" "(\"Meetings / Sessions\")") ("top-olp" "(\"Meetings / Sessions\")") ("pos" "35523")))

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [BUG] When calling org-tree-to-indirect-buffer: (wrong-type-argument listp org-fold-outline) in org-fold-core-get-folding-spec-from-alias [9.6.6 (release_9.6.6 @ /gnu/store/c7vqk20kf6zw73klr8bacnh0gqahk5dd-emacs-29.1-29.1/share/emacs/29.1/lisp/org/)]
  2023-08-24 16:50 [BUG] When calling org-tree-to-indirect-buffer: (wrong-type-argument listp org-fold-outline) in org-fold-core-get-folding-spec-from-alias [9.6.6 (release_9.6.6 @ /gnu/store/c7vqk20kf6zw73klr8bacnh0gqahk5dd-emacs-29.1-29.1/share/emacs/29.1/lisp/org/)] Adam Porter
@ 2023-08-25  8:19 ` Ihor Radchenko
  2023-08-28  6:35   ` Adam Porter
  0 siblings, 1 reply; 5+ messages in thread
From: Ihor Radchenko @ 2023-08-25  8:19 UTC (permalink / raw)
  To: Adam Porter; +Cc: emacs-orgmode

Adam Porter <adam@alphapapa.net> writes:

> Since upgrading to Emacs 29.1 and Org 9.6.6, I am getting an error when
> opening a bookmark to an Org subtree buffer created with burly.el.  When
> opening the bookmark, burly calls org-tree-to-indirect-buffer to make a
> new indirect buffer showing the subtree in question.  This worked fine
> in Emacs 28 and the previous Org version I was using, 9.5.something,
> IIRC.  Now I get this error (please see the attached backtrace, which is 
> abbreviated, and some functions were re-evaluated so as to be interpreted).

Thanks for reporting!

> Debugger entered--Lisp error: (wrong-type-argument listp org-fold-outline)
>   car(org-fold-outline)
>   alist-get(org-fold-outline ((:alias . org-link) (org-link . org-link) (:alias . org-link-description) (org-link-description . org-link-description) (property-drawer . org-fold-drawer) (drawer . org-fold-drawer) (:alias . org-fold-drawer) (org-fold-drawer . org-fold-drawer) (verse-block . org-fold-block) (src-block . org-fold-block) (special-block . org-fold-block) (quote-block . org-fold-block) (export-block . org-fold-block) (example-block . org-fold-block) (dynamic-block . org-fold-block) (comment-block . org-fold-block) (center-block . org-fold-block) (block . org-fold-block) (:alias . org-fold-block) (org-fold-block . org-fold-block) (plain-list . org-fold-outline) (inlinetask . org-fold-outline) (outline . org-fold-outline) (heading . org-fold-outline) (headline . org-fold-outline) (:alias . org-fold-outline) (org-fold-outline . org-fold-outline)))
>   org-fold-core-get-folding-spec-from-alias(org-fold-outline)
>   org-fold-core--property-symbol-get-create(org-fold-outline)

This is a very strange backtrace.
When I run that `alist-get' call manually, there is no error. And
`alist-get' does not call `car'.

May you try to re-generate the backtrace again?

-- 
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] 5+ messages in thread

* Re: [BUG] When calling org-tree-to-indirect-buffer: (wrong-type-argument listp org-fold-outline) in org-fold-core-get-folding-spec-from-alias [9.6.6 (release_9.6.6 @ /gnu/store/c7vqk20kf6zw73klr8bacnh0gqahk5dd-emacs-29.1-29.1/share/emacs/29.1/lisp/org/)]
  2023-08-25  8:19 ` Ihor Radchenko
@ 2023-08-28  6:35   ` Adam Porter
  2023-08-28  9:24     ` Ihor Radchenko
  0 siblings, 1 reply; 5+ messages in thread
From: Adam Porter @ 2023-08-28  6:35 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode

Hi Ihor,

On 8/25/23 03:19, Ihor Radchenko wrote:

>> Debugger entered--Lisp error: (wrong-type-argument listp org-fold-outline)
>>    car(org-fold-outline)
>>    alist-get(org-fold-outline ((:alias . org-link) (org-link . org-link) (:alias . org-link-description) (org-link-description . org-link-description) (property-drawer . org-fold-drawer) (drawer . org-fold-drawer) (:alias . org-fold-drawer) (org-fold-drawer . org-fold-drawer) (verse-block . org-fold-block) (src-block . org-fold-block) (special-block . org-fold-block) (quote-block . org-fold-block) (export-block . org-fold-block) (example-block . org-fold-block) (dynamic-block . org-fold-block) (comment-block . org-fold-block) (center-block . org-fold-block) (block . org-fold-block) (:alias . org-fold-block) (org-fold-block . org-fold-block) (plain-list . org-fold-outline) (inlinetask . org-fold-outline) (outline . org-fold-outline) (heading . org-fold-outline) (headline . org-fold-outline) (:alias . org-fold-outline) (org-fold-outline . org-fold-outline)))
>>    org-fold-core-get-folding-spec-from-alias(org-fold-outline)
>>    org-fold-core--property-symbol-get-create(org-fold-outline)
> 
> This is a very strange backtrace.
> When I run that `alist-get' call manually, there is no error. And
> `alist-get' does not call `car'.
> 
> May you try to re-generate the backtrace again?

It is indeed strange.  I generated the backtrace several times over 
several sessions before reporting.  I also can reproduce it in a clean 
Emacs configuration like so:

Using with-emacs.sh on Emacs 29.1:

1.  Run "with-emacs.sh -i burly"
2.  "C-x C-f /tmp/test.org RET"
3.  Input a file like so:

   * Heading A
   ** Heading A1

4.  With point on Heading A1, "C-c C-x b".
5.  "M-x delete-other-windows RET" to show only the subtree buffer.
6.  "M-x burly-bookmark-windows RET", input name, save bookmark.
7.  Kill the file's buffer and delete-other-windows.
8.  "C-x r b" select bookmark that was created, and open it.
9.  You should get the error, and with debug-on-error, the backtrace.

This bug breaks burly's functionality to bookmark and restore subtree 
buffers, which worked fine before upgrading to Emacs 29.1.

Thanks,
Adam


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [BUG] When calling org-tree-to-indirect-buffer: (wrong-type-argument listp org-fold-outline) in org-fold-core-get-folding-spec-from-alias [9.6.6 (release_9.6.6 @ /gnu/store/c7vqk20kf6zw73klr8bacnh0gqahk5dd-emacs-29.1-29.1/share/emacs/29.1/lisp/org/)]
  2023-08-28  6:35   ` Adam Porter
@ 2023-08-28  9:24     ` Ihor Radchenko
  2023-08-31  4:22       ` Adam Porter
  0 siblings, 1 reply; 5+ messages in thread
From: Ihor Radchenko @ 2023-08-28  9:24 UTC (permalink / raw)
  To: Adam Porter; +Cc: emacs-orgmode

Adam Porter <adam@alphapapa.net> writes:

>> This is a very strange backtrace.
>> When I run that `alist-get' call manually, there is no error. And
>> `alist-get' does not call `car'.
>> 
>> May you try to re-generate the backtrace again?
>
> It is indeed strange.  I generated the backtrace several times over 
> several sessions before reporting.  I also can reproduce it in a clean 
> Emacs configuration like so:

You re-define `alist-get' in one of the callers in a way that cannot
handle normal alists like (key . value), not (key . list-value).

(cl-defun burly-follow-url-org-mode (&key buffer query)
  "In BUFFER, jump to heading and position from QUERY, and return a buffer.
If QUERY specifies that the buffer should be indirect, a new,
indirect buffer is returned.  Otherwise BUFFER is returned."
  ;; `pcase's map support uses `alist-get', which does not work with string keys
  ;; unless its TESTFN arg is bound to, e.g. `equal', but `map-elt' has deprecated
  ;; its TESTFN arg, and there's no way to pass it or bind it when using `pcase'
  ;; anyway.  So we rebind `alist-get' to a function that uses `assoc-string'.
  (with-current-buffer buffer
    (cl-letf (((symbol-function 'alist-get)
               (lambda (key alist &optional _default _remove _testfn)
                 ;; Only the first value in the list of values is returned, so multiple
                 ;; values are not supported.  I don't expect this to be a problem...
                 (cadr (assoc-string key alist)))))

Handled.
Not an Org bug.

-- 
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] 5+ messages in thread

* Re: [BUG] When calling org-tree-to-indirect-buffer: (wrong-type-argument listp org-fold-outline) in org-fold-core-get-folding-spec-from-alias [9.6.6 (release_9.6.6 @ /gnu/store/c7vqk20kf6zw73klr8bacnh0gqahk5dd-emacs-29.1-29.1/share/emacs/29.1/lisp/org/)]
  2023-08-28  9:24     ` Ihor Radchenko
@ 2023-08-31  4:22       ` Adam Porter
  0 siblings, 0 replies; 5+ messages in thread
From: Adam Porter @ 2023-08-31  4:22 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode

Hi Ihor,

On 8/28/23 04:24, Ihor Radchenko wrote:
> Adam Porter <adam@alphapapa.net> writes:
> 
>>> This is a very strange backtrace.
>>> When I run that `alist-get' call manually, there is no error. And
>>> `alist-get' does not call `car'.
>>>
>>> May you try to re-generate the backtrace again?
>>
>> It is indeed strange.  I generated the backtrace several times over
>> several sessions before reporting.  I also can reproduce it in a clean
>> Emacs configuration like so:
> 
> You re-define `alist-get' in one of the callers in a way that cannot
> handle normal alists like (key . value), not (key . list-value).
> 
> (cl-defun burly-follow-url-org-mode (&key buffer query)
>    "In BUFFER, jump to heading and position from QUERY, and return a buffer.
> If QUERY specifies that the buffer should be indirect, a new,
> indirect buffer is returned.  Otherwise BUFFER is returned."
>    ;; `pcase's map support uses `alist-get', which does not work with string keys
>    ;; unless its TESTFN arg is bound to, e.g. `equal', but `map-elt' has deprecated
>    ;; its TESTFN arg, and there's no way to pass it or bind it when using `pcase'
>    ;; anyway.  So we rebind `alist-get' to a function that uses `assoc-string'.
>    (with-current-buffer buffer
>      (cl-letf (((symbol-function 'alist-get)
>                 (lambda (key alist &optional _default _remove _testfn)
>                   ;; Only the first value in the list of values is returned, so multiple
>                   ;; values are not supported.  I don't expect this to be a problem...
>                   (cadr (assoc-string key alist)))))
> 
> Handled.
> Not an Org bug.

My apologies, I overlooked that when investigating the problem.  Thanks 
for your work.

Adam


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-08-31  4:23 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-24 16:50 [BUG] When calling org-tree-to-indirect-buffer: (wrong-type-argument listp org-fold-outline) in org-fold-core-get-folding-spec-from-alias [9.6.6 (release_9.6.6 @ /gnu/store/c7vqk20kf6zw73klr8bacnh0gqahk5dd-emacs-29.1-29.1/share/emacs/29.1/lisp/org/)] Adam Porter
2023-08-25  8:19 ` Ihor Radchenko
2023-08-28  6:35   ` Adam Porter
2023-08-28  9:24     ` Ihor Radchenko
2023-08-31  4:22       ` Adam Porter

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).