From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carsten Dominik Subject: Re: Insert subheading at top respect content Date: Wed, 21 Aug 2019 07:28:02 +0200 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="00000000000040d759059099d7fb" Return-path: Received: from eggs.gnu.org ([2001:470:142:3::10]:57523) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i0JAU-0006BY-J1 for emacs-orgmode@gnu.org; Wed, 21 Aug 2019 01:28:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i0JAT-0008UJ-7S for emacs-orgmode@gnu.org; Wed, 21 Aug 2019 01:28:22 -0400 Received: from mail-ed1-f54.google.com ([209.85.208.54]:32773) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1i0JAS-0008To-W0 for emacs-orgmode@gnu.org; Wed, 21 Aug 2019 01:28:21 -0400 Received: by mail-ed1-f54.google.com with SMTP id s15so1480487edx.0 for ; Tue, 20 Aug 2019 22:28:20 -0700 (PDT) In-Reply-To: List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: Nathan Neff Cc: emacs-orgmode --00000000000040d759059099d7fb Content-Type: text/plain; charset="UTF-8" Hi Nate, What do you mean by passing "the right argument". Which argument do you want to pass? At first, I thought the direct way to fix your function would be (defun njn-subheading-respect-content () (interactive "") (org-next-visible-heading 1) (org-insert-heading nil) ) because in your original example, the heading did already have a child. However, that is not guaranteed, and in the above implementation, the new heading is created with the level of the next headline, and that next headline might be a sibling, a child or a parent. So we need to explicitly set the level: (defun njn-subheading-respect-content () (interactive "") (let ((level (car (org-heading-components)))) (org-next-visible-heading 1) (org-insert-heading nil) (while (<= (car (org-heading-components)) level) (org-demote)))) I am using (possibly repeated) calls to `org-demote', because this will do everything correct, also with stuff like org-odd-levels only etc. Hope this helps. - Carsten On Wed, Aug 21, 2019 at 12:43 AM Nathan Neff wrote: > > > On Fri, Aug 16, 2019 at 4:03 AM Carsten Dominik wrote: > >> >> >> On Fri, Aug 16, 2019 at 10:21 AM Nathan Neff >> wrote: >> >>> Hello all, >>> >>> Something that's eluded me all this time has been an >>> "Insert subheading, after the content, but before other subheadings" >>> >>> For example: >>> If my cursor is anywhere between lines 1 and 4, I would like the >>> subheading >>> to be inserted at line 5. >>> >>> 1* Heading >>> :PROPERTIES:... >>> 2 Some content >>> 3 More content >>> 4 >>> 5** Subheading 1 >>> 6** Subheading 2 >>> 7 >>> I know there's org-insert-subheading and C-u which respects content, but >>> respect-content will insert a subheading at line 7 in the example >>> above. I would >>> like to have a new subheading at line 4. >>> >> >> What about C-c C-n M-RET >> > > Thanks Carsten - I created a function: > (defun njn-subheading-respect-content () > (interactive "") > (org-next-visible-heading 1) > (org-insert-subheading 't) > ) > > But I'm trying to find out where to get the "correct" arg > to org-next-visible-heading - I have hard-coded a 1 in the > above example, but this produces the following subheading: > > * Heading <-exec when cursor on this heading > Some content about Heading > *** New heading is inserted here (and is the wrong level - should be 2 > instead of 3) > ** Sub1 > ** Sub2 > > I will mess with this function a bit and post if I find a solution. > > Thanks, > --Nate > >> >> Carsten >> >> >>> >>> Thanks, >>> --Nate >>> >> --00000000000040d759059099d7fb Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Nate,

What do you mean by passing &q= uot;the right argument".=C2=A0 Which argument do you want to pass?

At first, I thought the direct way to fix your functi= on would be

(defun njn-subheading-respect-content = ()
=C2=A0 (interactive "")
=C2=A0 (org-next-visible-heading= 1)
=C2=A0 (org-insert-heading nil)
=C2=A0)

<= div>because in your original example, the heading did already have a child.=
However, that is not guaranteed, and in the above implementation= , the
new heading is created with the level of the next headline,= and that
next headline might be a sibling, a child or a parent.= =C2=A0 So we need to
explicitly set the level:

(def= un njn-subheading-respect-content ()
=C2=A0 (interactive "")=C2=A0 (let ((level (car (org-heading-components))))
=C2=A0 =C2=A0 (or= g-next-visible-heading 1)
=C2=A0 =C2=A0 (org-insert-heading nil)
=C2= =A0 =C2=A0 (while (<=3D (car (org-heading-components)) level)
=C2=A0 = =C2=A0 =C2=A0 (org-demote))))

I am using (poss= ibly repeated) calls to `org-demote', because this will
do ev= erything correct, also with stuff like org-odd-levels only etc.
<= br>
Hope this helps.

- Carsten





On Wed, Aug 21, 201= 9 at 12:43 AM Nathan Neff <nath= an.neff@gmail.com> wrote:


On = Fri, Aug 16, 2019 at 4:03 AM Carsten Dominik <dominik@uva.nl> wrote:
<= br>

On Fri, Aug 16, 2019 at 10:21 AM Nathan Neff <nathan.neff@gmail.com> wrote:
<= div>Hello all,

Something that's eluded me all = this time has been an
"Insert subheading, after the content,= but before other subheadings"

For example:
If my cursor is anywhere between lines 1 and 4, I would like the s= ubheading
to be inserted at line 5.

= 1* Heading
:PROPERTIES:...
2 Some content
3 More content
4
5** Subheading 1
6** Su= bheading 2
7
I know there's org-insert-subheadi= ng and C-u which respects content, but
respect-content will inser= t a subheading at line 7 in the example above.=C2=A0 I would
like= to have a new subheading at line 4.

<= /div>
What about C-c C-n M-RET

<= /div>
Thanks Carsten - I created a function:
(defun njn-subhe= ading-respect-content ()
=C2=A0 (interactive "")
<= div>=C2=A0 (org-next-visible-heading 1)
=C2=A0 (org-insert-subhea= ding 't)
=C2=A0)

But I'm trying = to find out where to get the "correct" arg
to org-next-= visible-heading - I have hard-coded a 1 in the
above example, but= this produces the following subheading:

* Heading= <-exec when cursor on this heading
Some content about Heading=
*** New heading is inserted here (and is the wrong level - shoul= d be 2 instead of 3)
** Sub1
** Sub2
=C2=A0
I will mess with this function a bit and post if I find a solution= .

Thanks,
--Nate

Carsten
=C2=A0

= Thanks,
--Nate
--00000000000040d759059099d7fb--