* [BUG] org-up-heading-safe navigates above top heading [9.5.5 (release_9.5.5 @ /opt/homebrew/Cellar/emacs-plus@28/28.2/share/emacs/28.2/lisp/org/)]
@ 2023-07-23 14:24 Daniel Liden
2023-07-26 8:03 ` Ihor Radchenko
0 siblings, 1 reply; 2+ messages in thread
From: Daniel Liden @ 2023-07-23 14:24 UTC (permalink / raw)
To: emacs-orgmode
[-- Attachment #1.1: Type: text/plain, Size: 4483 bytes --]
Summary: I started to encounter some errors while using the org-fc package
after. I traced it back to a change in behaviour from org-up-heading-safe
following some updates to my system. I did not see this change documented.
Old behavior: org-up-heading-safe will not move the point above the top
headline in an org hierarchy (e.g. if there is text above a top-level
headline.)
New behavior: org-up-heading-safe *will* move the point above the top
headline in an org hierarchy (e.g. if there is text above a top-level
headline.)
Unfortunately, I'm not sure what version exactly I updated from. However,
see example, I did look at the diff for org-up-heading-safe and found this—
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=dfd36d1969ce2c33f5899e97c02fa62544735977.
The older version has the expected behavior (well, the behavior I
expected); the newer version will go up above the top headline.
See attached org file with (hopefully) reproducible example.
Emacs : GNU Emacs 28.2 (build 2, aarch64-apple-darwin22.4.0, NS
appkit-2299.50 Version 13.3.1 (Build 22E261))
of 2023-05-01
Package: Org mode version 9.5.5 (release_9.5.5 @
/opt/homebrew/Cellar/emacs-plus@28/28.2/share/emacs/28.2/lisp/org/)
current state:
==============
(setq
org-link-elisp-confirm-function 'yes-or-no-p
org-bibtex-headline-format-function #[257 "\300 \236A\207" [:title] 3
"\n\n(fn ENTRY)"]
org-export-before-parsing-hook '(org-attach-expand-links)
org-archive-hook '(org-attach-archive-delete-maybe)
org-cycle-hook '(org-cycle-hide-archived-subtrees org-cycle-hide-drawers
org-cycle-show-empty-lines
org-optimize-window-after-visibility-change)
org-mode-hook '(#[0 "\300\301\302\303\304$\207" [add-hook
change-major-mode-hook org-show-all append local] 5]
#[0 "\300\301\302\303\304$\207" [add-hook change-major-mode-hook
org-babel-show-result-all append local] 5]
org-babel-result-hide-spec org-babel-hide-all-hashes)
org-confirm-shell-link-function 'yes-or-no-p
outline-isearch-open-invisible-function 'outline-isearch-open-invisible
org-agenda-before-write-hook '(org-agenda-add-entry-text)
org-src-mode-hook '(org-src-babel-configure-edit-buffer
org-src-mode-configure-edit-buffer)
org-confirm-elisp-link-function 'yes-or-no-p
org-speed-command-hook '(org-speed-command-activate
org-babel-speed-command-activate)
org-tab-first-hook '(org-babel-hide-result-toggle-maybe
org-babel-header-arg-expand)
org-link-shell-confirm-function 'yes-or-no-p
org-babel-pre-tangle-hook '(save-buffer)
org-agenda-loop-over-headlines-in-active-region nil
org-occur-hook '(org-first-headline-recenter)
org-metadown-hook '(org-babel-pop-to-session-maybe)
org-link-parameters '(("attachment" :follow org-attach-follow :complete
org-attach-complete-link) ("id" :follow org-id-open)
("eww" :follow org-eww-open :store org-eww-store-link)
("rmail" :follow org-rmail-open :store org-rmail-store-link)
("mhe" :follow org-mhe-open :store org-mhe-store-link)
("irc" :follow org-irc-visit :store org-irc-store-link :export
org-irc-export)
("info" :follow org-info-open :export org-info-export :store
org-info-store-link)
("gnus" :follow org-gnus-open :store org-gnus-store-link)
("docview" :follow org-docview-open :export org-docview-export :store
org-docview-store-link)
("bibtex" :follow org-bibtex-open :store org-bibtex-store-link)
("bbdb" :follow org-bbdb-open :export org-bbdb-export :complete
org-bbdb-complete-link :store
org-bbdb-store-link)
("w3m" :store org-w3m-store-link) ("doi" :follow org-link-doi-open
:export org-link-doi-export) ("file+sys")
("file+emacs") ("shell" :follow org-link--open-shell)
("news" :follow #[514 "\301\300\302 Q \"\207" ["news" browse-url ":"]
6 "\n\n(fn URL ARG)"])
("mailto" :follow #[514 "\301\300\302 Q \"\207" ["mailto" browse-url
":"] 6 "\n\n(fn URL ARG)"])
("https" :follow #[514 "\301\300\302 Q \"\207" ["https" browse-url
":"] 6 "\n\n(fn URL ARG)"])
("http" :follow #[514 "\301\300\302 Q \"\207" ["http" browse-url ":"]
6 "\n\n(fn URL ARG)"])
("ftp" :follow #[514 "\301\300\302 Q \"\207" ["ftp" browse-url ":"] 6
"\n\n(fn URL ARG)"])
("help" :follow org-link--open-help :store org-link--store-help)
("file" :complete org-link-complete-file)
("elisp" :follow org-link--open-elisp))
org-metaup-hook '(org-babel-load-in-session-maybe)
)
[-- Attachment #1.2: Type: text/html, Size: 6272 bytes --]
[-- Attachment #2: org-up-heading-safe-example.org --]
[-- Type: application/octet-stream, Size: 2981 bytes --]
Some Text before the Header
* Header 1
** Header 2
*** Header 3
If you run (org-up-heading-safe) repeatedly on the above, the point will end up *above* the top heading.
Now execute the block below to replace the current version of ~org-up-heading-safe~ with the previous version
#+begin_src emacs-lisp
(defun org-up-heading-safe ()
"Move to the heading line of which the present line is a subheading.
This version will not throw an error. It will return the level of the
headline found, or nil if no higher level is found.
Also, this function will be a lot faster than `outline-up-heading',
because it relies on stars being the outline starters. This can really
make a significant difference in outlines with very many siblings."
(let ((element (and (org-element--cache-active-p)
(org-element-at-point nil t))))
(if element
(let* ((current-heading (org-element-lineage element '(headline inlinetask) 'with-self))
(parent (org-element-lineage current-heading 'headline)))
(if (and parent
(<= (point-min) (org-element-begin parent)))
(progn
(goto-char (org-element-begin parent))
(org-element-property :level parent))
(when (and current-heading
(<= (point-min) (org-element-begin current-heading)))
(goto-char (org-element-begin current-heading))
nil)))
(when (ignore-errors (org-back-to-heading t))
(let (level-cache)
(unless org--up-heading-cache
(setq org--up-heading-cache (make-hash-table)))
(if (and (eq (buffer-chars-modified-tick) org--up-heading-cache-tick)
(setq level-cache (gethash (point) org--up-heading-cache)))
(when (<= (point-min) (car level-cache) (point-max))
;; Parent is inside accessible part of the buffer.
(progn (goto-char (car level-cache))
(cdr level-cache)))
;; Buffer modified. Invalidate cache.
(unless (eq (buffer-chars-modified-tick) org--up-heading-cache-tick)
(setq-local org--up-heading-cache-tick
(buffer-chars-modified-tick))
(clrhash org--up-heading-cache))
(let* ((level-up (1- (funcall outline-level)))
(pos (point))
(result (and (> level-up 0)
(re-search-backward
(format "^\\*\\{1,%d\\} " level-up) nil t)
(funcall outline-level))))
(when result (puthash pos (cons (point) result) org--up-heading-cache))
result)))))))
#+end_src
#+RESULTS:
: org-up-heading-safe
Navigate below ~*** Header 3~ below and again call ~(org-up-heading-safe)~ repeatedly. The point will not end up above the top headline.
Some Text before the Header
* Header 1
** Header 2
*** Header 3
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-07-26 8:04 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-23 14:24 [BUG] org-up-heading-safe navigates above top heading [9.5.5 (release_9.5.5 @ /opt/homebrew/Cellar/emacs-plus@28/28.2/share/emacs/28.2/lisp/org/)] Daniel Liden
2023-07-26 8:03 ` 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).