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
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))
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.
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))
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: OpenPGP_signature
Description: OpenPGP digital signature

Reply via email to