emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Guillaume MULLER <guillaume.muller@alolise.org>
Cc: emacs-org list <emacs-orgmode@gnu.org>
Subject: Re: Change of behavior of org-meta-return in 9.6/DoomEmacs?
Date: Fri, 20 May 2022 22:50:08 +0200	[thread overview]
Message-ID: <f924c1d1-d73b-a9ee-a257-cd71ff7a00e9@alolise.org> (raw)
In-Reply-To: <CAFyQvY3XHf6WWDtdwtKMGLWGApgQ89ziUcGSfHCJnn-c3gV8=A@mail.gmail.com>


[-- Attachment #1.1.1: Type: text/plain, Size: 1039 bytes --]

Hi again,

Thanks for your response.

> If you do C-h f org-meta-return, do you see something like "This
> function has .. advice: .." towards the end of that *Help* buffer?

After investigation, the bug is in org-insert-heading in org 9.6 (Latest Doom - upgraded today - uses exactly version: (9.6-??-971eb68)

The documentation says:
"If point is in the middle of a line, split it and create a new
headline with the text in the current line after point (see
org-M-RET-may-split-line on how to modify this behavior).  As
a special case, on a headline, splitting can only happen on the
title itself.  E.g., this excludes breaking stars or tags.

Whatever the value(s) I put in org-M-RET-may-split-line , org-insert-heading *always* creates a new line with a empty heading/item and leaves anything that was on the initial heading/item in-place.

If someone can confirm this finding, I would be happy to create the corresponding bug report.

Have a nice day

-- 
Guillaume MULLER - PhD
DataScientist
Saint-Étienne

[-- Attachment #1.1.2: org-insert-heading.doom --]
[-- Type: text/plain, Size: 6362 bytes --]

org-insert-heading is an interactive and byte-compiled function
defined in org.el.

Signature
(org-insert-heading &optional ARG INVISIBLE-OK TOP)

Documentation
Insert a new heading or an item with the same depth at point.

If point is at the beginning of a heading, insert a new heading
or a new headline above the current one.  When at the beginning
of a regular line of text, turn it into a heading.

If point is in the middle of a line, split it and create a new
headline with the text in the current line after point (see
org-M-RET-may-split-line on how to modify this behavior).  As
a special case, on a headline, splitting can only happen on the
title itself.  E.g., this excludes breaking stars or tags.

With a C-u prefix, set org-insert-heading-respect-content to
a non-nil value for the duration of the command.  This forces the
insertion of a heading after the current subtree, independently
on the location of point.

With a C-u C-u prefix, insert the heading at the end of the tree
above the current heading.  For example, if point is within a
2nd-level heading, then it will insert a 2nd-level heading at
the end of the 1st-level parent subtree.

When INVISIBLE-OK is set, stop at invisible headlines when going
back.  This is important for non-interactive uses of the
command.

When optional argument TOP is non-nil, insert a level 1 heading,
unconditionally.

Key Bindings
This command is not in any keymaps.

References
References in org.el:
(defun org-insert-heading-after-current ...)   1 reference
(defun org-insert-heading-respect-content ...) 1 reference
(defun org-insert-todo-heading ...)            1 reference
(defun org-insert-subheading ...)              1 reference
(defun org-meta-return ...)                    2 references

Find all references Functions used by org-insert-heading

Debugging
Enable edebug Enable tracing
Disassemble Forget

Source Code
;; Defined in ~/.emacs.doom.d/.local/straight/repos/org/lisp/org.el
(defun org-insert-heading (&optional arg invisible-ok top)
  "Insert a new heading or an item with the same depth at point.

If point is at the beginning of a heading, insert a new heading
or a new headline above the current one.  When at the beginning
of a regular line of text, turn it into a heading.

If point is in the middle of a line, split it and create a new
headline with the text in the current line after point (see
`org-M-RET-may-split-line' on how to modify this behavior).  As
a special case, on a headline, splitting can only happen on the
title itself.  E.g., this excludes breaking stars or tags.

With a `\\[universal-argument]' prefix, set \
`org-insert-heading-respect-content' to
a non-nil value for the duration of the command.  This forces the
insertion of a heading after the current subtree, independently
on the location of point.

With a `\\[universal-argument] \\[universal-argument]' prefix, \
insert the heading at the end of the tree
above the current heading.  For example, if point is within a
2nd-level heading, then it will insert a 2nd-level heading at
the end of the 1st-level parent subtree.

When INVISIBLE-OK is set, stop at invisible headlines when going
back.  This is important for non-interactive uses of the
command.

When optional argument TOP is non-nil, insert a level 1 heading,
unconditionally."
  (interactive "P")
  (let* ((blank? (org--blank-before-heading-p (equal arg '(16))))
	 (level (org-current-level))
	 (stars (make-string (if (and level (not top)) level 1) ?*)))
    (cond
     ((or org-insert-heading-respect-content
	  (member arg '((4) (16)))
	  (and (not invisible-ok)
	       (invisible-p (max (1- (point)) (point-min)))))
      ;; Position point at the location of insertion.  Make sure we
      ;; end up on a visible headline if INVISIBLE-OK is nil.
      (org-with-limited-levels
       (if (not level) (outline-next-heading) ;before first headline
	 (org-back-to-heading invisible-ok)
	 (when (equal arg '(16)) (org-up-heading-safe))
	 (org-end-of-subtree)))
      (unless (bolp) (insert "\n"))
      (when (and blank? (save-excursion
                          (backward-char)
                          (org-before-first-heading-p)))
        (insert "\n")
        (backward-char))
      (when (and (not level) (not (eobp)) (not (bobp)))
        (when (org-at-heading-p) (insert "\n"))
        (backward-char))
      (unless (and blank? (org-previous-line-empty-p))
	(org-N-empty-lines-before-current (if blank? 1 0)))
      (insert stars " ")
      ;; When INVISIBLE-OK is non-nil, ensure newly created headline
      ;; is visible.
      (unless invisible-ok
	(pcase (get-char-property-and-overlay (point) 'invisible)
	  (`(outline . ,o)
	   (move-overlay o (overlay-start o) (line-end-position 0)))
	  (_ nil))))
     ;; At a headline...
     ((org-at-heading-p)
      (cond ((bolp)
	     (when blank? (save-excursion (insert "\n")))
	     (save-excursion (insert stars " \n"))
	     (unless (and blank? (org-previous-line-empty-p))
	       (org-N-empty-lines-before-current (if blank? 1 0)))
	     (end-of-line))
	    ((and (org-get-alist-option org-M-RET-may-split-line 'headline)
		  (org-match-line org-complex-heading-regexp)
		  (org-pos-in-match-range (point) 4))
	     ;; Grab the text that should moved to the new headline.
	     ;; Preserve tags.
	     (let ((split (delete-and-extract-region (point) (match-end 4))))
	       (if (looking-at "[ \t]*$") (replace-match "")
		 (org-align-tags))
	       (end-of-line)
	       (when blank? (insert "\n"))
	       (insert "\n" stars " ")
	       (when (org-string-nw-p split) (insert split))))
	    (t
	     (end-of-line)
	     (when blank? (insert "\n"))
	     (insert "\n" stars " "))))
     ;; On regular text, turn line into a headline or split, if
     ;; appropriate.
     ((bolp)
      (insert stars " ")
      (unless (and blank? (org-previous-line-empty-p))
        (org-N-empty-lines-before-current (if blank? 1 0))))
     (t
      (unless (org-get-alist-option org-M-RET-may-split-line 'headline)
        (end-of-line))
      (insert "\n" stars " ")
      (unless (and blank? (org-previous-line-empty-p))
        (org-N-empty-lines-before-current (if blank? 1 0))))))
  (run-hooks 'org-insert-heading-hook))

Symbol Properties
event-symbol-element-mask
  (org-insert-heading 0)
event-symbol-elements
  (org-insert-heading)
modifier-cache
  ((0 . org-insert-heading))

[-- Attachment #1.1.3: org-insert-heading.vanilla --]
[-- Type: text/plain, Size: 254 bytes --]

org-insert-heading-respect-content is an interactive compiled Lisp
function in ‘org.el’.

It is bound to <C-return>.

(org-insert-heading-respect-content &optional INVISIBLE-OK)

Insert heading with ‘org-insert-heading-respect-content’ set to t.

[-- Attachment #1.1.4: org-meta-ret.doom --]
[-- Type: text/plain, Size: 1394 bytes --]

org-meta-return is an interactive and byte-compiled function defined
in org.el.

Signature
(org-meta-return &optional ARG)

Documentation
Insert a new heading or wrap a region in a table.

Calls org-insert-heading, org-insert-item or
org-table-wrap-region, depending on context.  When called with
an argument, unconditionally call org-insert-heading.

Key Bindings
org-mode-map C-c C-x RET
org-mode-map C-c C-x m
org-mode-map M-RET

References
org-meta-return is unused in org.el.

Find all references Functions used by org-meta-return

Debugging
Enable edebug Enable tracing
Disassemble Forget

Source Code
;; Defined in ~/.emacs.doom.d/.local/straight/repos/org/lisp/org.el
(defun org-meta-return (&optional arg)
  "Insert a new heading or wrap a region in a table.
Calls `org-insert-heading', `org-insert-item' or
`org-table-wrap-region', depending on context.  When called with
an argument, unconditionally call `org-insert-heading'."
  (interactive "P")
  (org-check-before-invisible-edit 'insert)
  (or (run-hook-with-args-until-success 'org-metareturn-hook)
      (call-interactively (cond (arg #'org-insert-heading)
				((org-at-table-p) #'org-table-wrap-region)
				((org-in-item-p) #'org-insert-item)
				(t #'org-insert-heading)))))

Symbol Properties
event-symbol-element-mask
  (org-meta-return 0)
event-symbol-elements
  (org-meta-return)
modifier-cache
  ((0 . org-meta-return))

[-- Attachment #1.1.5: org-meta-ret.vanilla --]
[-- Type: text/plain, Size: 391 bytes --]

org-meta-return is an interactive compiled Lisp function in ‘org.el’.

It is bound to M-RET, C-c C-x RET, C-c C-x m.

(org-meta-return &optional ARG)

Insert a new heading or wrap a region in a table.
Calls ‘org-insert-heading’, ‘org-insert-item’ or
‘org-table-wrap-region’, depending on context.  When called with
an argument, unconditionally call ‘org-insert-heading’.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]

  reply	other threads:[~2022-05-21  6:18 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-16 22:14 Change of behavior of org-meta-return in 9.6/DoomEmacs? Guillaume MULLER
2022-05-17 16:57 ` Kaushal Modi
2022-05-20 20:50   ` Guillaume MULLER [this message]
2022-05-18 18:31 ` Nick Dokos

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f924c1d1-d73b-a9ee-a257-cd71ff7a00e9@alolise.org \
    --to=guillaume.muller@alolise.org \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this 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).