emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* org-insert-heading rewritten from scratch
@ 2013-08-08  6:43 Carsten Dominik
  2013-08-08  7:41 ` Eric Abrahamsen
  2013-09-09 16:42 ` Michael Brand
  0 siblings, 2 replies; 27+ messages in thread
From: Carsten Dominik @ 2013-08-08  6:43 UTC (permalink / raw)
  To: Emacs Org mode mailing list

Hi,

I have rewritten org-insert-heading, because it had become an unmaintainable beast.
Please follow up in this thread if you find problems with the new implementation.
Very likely there will be bugs, but now I am at least confident they can be fixed.

- Carsten

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

* Re: org-insert-heading rewritten from scratch
  2013-08-08  6:43 org-insert-heading rewritten from scratch Carsten Dominik
@ 2013-08-08  7:41 ` Eric Abrahamsen
  2013-08-31 14:00   ` Carsten Dominik
  2013-09-09 16:42 ` Michael Brand
  1 sibling, 1 reply; 27+ messages in thread
From: Eric Abrahamsen @ 2013-08-08  7:41 UTC (permalink / raw)
  To: emacs-orgmode

Carsten Dominik <carsten.dominik@gmail.com> writes:

> Hi,
>
> I have rewritten org-insert-heading, because it had become an unmaintainable beast.
> Please follow up in this thread if you find problems with the new implementation.
> Very likely there will be bugs, but now I am at least confident they can be fixed.
>
> - Carsten

Awesome! Thanks very much for doing this. Will report back with bugs.

E

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

* Re: org-insert-heading rewritten from scratch
  2013-08-08  7:41 ` Eric Abrahamsen
@ 2013-08-31 14:00   ` Carsten Dominik
  2013-08-31 14:34     ` Nicolas Goaziou
                       ` (2 more replies)
  0 siblings, 3 replies; 27+ messages in thread
From: Carsten Dominik @ 2013-08-31 14:00 UTC (permalink / raw)
  To: Eric Abrahamsen; +Cc: emacs-orgmode


On 8.8.2013, at 09:41, Eric Abrahamsen <eric@ericabrahamsen.net> wrote:

> Carsten Dominik <carsten.dominik@gmail.com> writes:
> 
>> Hi,
>> 
>> I have rewritten org-insert-heading, because it had become an unmaintainable beast.
>> Please follow up in this thread if you find problems with the new implementation.
>> Very likely there will be bugs, but now I am at least confident they can be fixed.
>> 
>> - Carsten
> 
> Awesome! Thanks very much for doing this. Will report back with bugs.

I take it none have been found?

- Carsten

> 
> E
> 
> 

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

* Re: org-insert-heading rewritten from scratch
  2013-08-31 14:00   ` Carsten Dominik
@ 2013-08-31 14:34     ` Nicolas Goaziou
  2013-09-01  6:13       ` Carsten Dominik
  2013-09-01  2:38     ` Eric Abrahamsen
  2013-09-01  3:11     ` Samuel Wales
  2 siblings, 1 reply; 27+ messages in thread
From: Nicolas Goaziou @ 2013-08-31 14:34 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: Eric Abrahamsen, emacs-orgmode

Hello,

Carsten Dominik <carsten.dominik@gmail.com> writes:

> On 8.8.2013, at 09:41, Eric Abrahamsen <eric@ericabrahamsen.net> wrote:
>
>> Carsten Dominik <carsten.dominik@gmail.com> writes:
>> 
>>> Hi,
>>> 
>>> I have rewritten org-insert-heading, because it had become an unmaintainable beast.
>>> Please follow up in this thread if you find problems with the new implementation.
>>> Very likely there will be bugs, but now I am at least confident they can be fixed.
>>> 
>>> - Carsten
>> 
>> Awesome! Thanks very much for doing this. Will report back with bugs.
>
> I take it none have been found?

Not really a bug, but I find some behaviour surprising: when at a the
beginning of a regular text line, there is no way to create a headline
just above it. In the following example:

  XCursor is at "X"

Neither M-RET, C-u M-RET, C-RET nor C-u C-RET can do it. Is it intended?

Also in this case, I think C-RET should create the new headline _after_
the subtree, since that's its whole point anyway, AFAIU.

Eventually, it seems that behaviour towards empty lines is a bit
unpredictable. In the following example, M-RET will be behave
differently on each blank line between Paragraph and "H2". C-RET will be
consistent. Note: I have `auto' as value for `heading' key in
`org-blank-before-new-entry'.

  * H1

    Paragraph



  * H2

IMO, using M-RET and C-RET should be as smooth an experience as
possible.

I also suggest to write function specifications as tests in test-org.el.


Regards,

-- 
Nicolas Goaziou

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

* Re: org-insert-heading rewritten from scratch
  2013-08-31 14:00   ` Carsten Dominik
  2013-08-31 14:34     ` Nicolas Goaziou
@ 2013-09-01  2:38     ` Eric Abrahamsen
  2013-09-01  3:11     ` Samuel Wales
  2 siblings, 0 replies; 27+ messages in thread
From: Eric Abrahamsen @ 2013-09-01  2:38 UTC (permalink / raw)
  To: emacs-orgmode

Carsten Dominik <carsten.dominik@gmail.com> writes:

> On 8.8.2013, at 09:41, Eric Abrahamsen <eric@ericabrahamsen.net> wrote:
>
>> Carsten Dominik <carsten.dominik@gmail.com> writes:
>> 
>>> Hi,
>>> 
>>> I have rewritten org-insert-heading, because it had become an unmaintainable beast.
>>> Please follow up in this thread if you find problems with the new implementation.
>>> Very likely there will be bugs, but now I am at least confident they can be fixed.
>>> 
>>> - Carsten
>> 
>> Awesome! Thanks very much for doing this. Will report back with bugs.
>
> I take it none have been found?
>
> - Carsten
>

Nope, I've been using this heavily and haven't seen anything surprising.
I do confirm Nicolas' observations on whitespace, though...

E

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

* Re: org-insert-heading rewritten from scratch
  2013-08-31 14:00   ` Carsten Dominik
  2013-08-31 14:34     ` Nicolas Goaziou
  2013-09-01  2:38     ` Eric Abrahamsen
@ 2013-09-01  3:11     ` Samuel Wales
  2013-09-01  3:13       ` Samuel Wales
  2 siblings, 1 reply; 27+ messages in thread
From: Samuel Wales @ 2013-09-01  3:11 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: Eric Abrahamsen, emacs-orgmode

I've found four, but they are minor.  In capture, you can create a
blank line with m-ret at the top.Repeated invocation creates invalid
headlines.  There is no c-ret way to create a headline above the first
child.  M-ret is slow.

On 8/31/13, Carsten Dominik <carsten.dominik@gmail.com> wrote:
> I take it none have been found?

-- 
The Kafka Pandemic: http://thekafkapandemic.blogspot.com

The disease DOES progress.  MANY people have died from it.  ANYBODY can get it.

Denmark: free Karina Hansen NOW.

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

* Re: org-insert-heading rewritten from scratch
  2013-09-01  3:11     ` Samuel Wales
@ 2013-09-01  3:13       ` Samuel Wales
  0 siblings, 0 replies; 27+ messages in thread
From: Samuel Wales @ 2013-09-01  3:13 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: Eric Abrahamsen, emacs-orgmode

Clarification: it is no more slow than the original and it fixes bugs.
 Just answering your question about whether there are any bugs.

-- 
The Kafka Pandemic: http://thekafkapandemic.blogspot.com

The disease DOES progress.  MANY people have died from it.  ANYBODY can get it.

Denmark: free Karina Hansen NOW.

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

* Re: org-insert-heading rewritten from scratch
  2013-08-31 14:34     ` Nicolas Goaziou
@ 2013-09-01  6:13       ` Carsten Dominik
  2013-09-01  8:19         ` Nicolas Goaziou
  0 siblings, 1 reply; 27+ messages in thread
From: Carsten Dominik @ 2013-09-01  6:13 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: Eric Abrahamsen, emacs-orgmode

Hi Nicolas,

On 31.8.2013, at 16:34, Nicolas Goaziou <n.goaziou@gmail.com> wrote:

> Hello,
> 
> Carsten Dominik <carsten.dominik@gmail.com> writes:
> 
>> On 8.8.2013, at 09:41, Eric Abrahamsen <eric@ericabrahamsen.net> wrote:
>> 
>>> Carsten Dominik <carsten.dominik@gmail.com> writes:
>>> 
>>>> Hi,
>>>> 
>>>> I have rewritten org-insert-heading, because it had become an unmaintainable beast.
>>>> Please follow up in this thread if you find problems with the new implementation.
>>>> Very likely there will be bugs, but now I am at least confident they can be fixed.
>>>> 
>>>> - Carsten
>>> 
>>> Awesome! Thanks very much for doing this. Will report back with bugs.
>> 
>> I take it none have been found?
> 
> Not really a bug, but I find some behaviour surprising: when at a the
> beginning of a regular text line, there is no way to create a headline
> just above it. In the following example:
> 
>  XCursor is at "X"
> 
> Neither M-RET, C-u M-RET, C-RET nor C-u C-RET can do it. Is it intended?

Which behavior would you propose?  I guess you mean that, at the beginning of a line,
the result is so different for normal lines versus headlines?

The way I was thinking about the behavior at the beginning of a non-headline
is that it is the same as in the middle of a line:  Take the rest of the line
and turn it into a headline.

To create a headline before a nonempty line, I use `C-o M-RET'

To be sure:  I am happy to change the behavior if that is what people
want and if it makes logically sense.

> Also in this case, I think C-RET should create the new headline _after_
> the subtree, since that's its whole point anyway, AFAIU.

That is what happens for me.  It does not for you?

> 
> Eventually, it seems that behaviour towards empty lines is a bit
> unpredictable. In the following example, M-RET will be behave
> differently on each blank line between Paragraph and "H2". C-RET will be
> consistent.

Because it does what M-RET does in the last line of the subtree.

> Note: I have `auto' as value for `heading' key in
> `org-blank-before-new-entry'.
> 
>  * H1
> 
>    Paragraph
> 
> 
> 
>  * H2


Hmm, I do find this behavior consistent. M-RET does not change the number
of while lines after the current, only before, in order to either have
an empty line or not.

Which behavior would you propose?

> 
> IMO, using M-RET and C-RET should be as smooth an experience as
> possible.

I fully agree.

> 
> I also suggest to write function specifications as tests in test-org.el.

Yes, I have yet to write my first test.  Need to figure out how that works.

- Carsten

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

* Re: org-insert-heading rewritten from scratch
  2013-09-01  6:13       ` Carsten Dominik
@ 2013-09-01  8:19         ` Nicolas Goaziou
  2013-09-01 12:04           ` Carsten Dominik
  0 siblings, 1 reply; 27+ messages in thread
From: Nicolas Goaziou @ 2013-09-01  8:19 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: Eric Abrahamsen, emacs-orgmode

Hello,

Carsten Dominik <carsten.dominik@gmail.com> writes:

> On 31.8.2013, at 16:34, Nicolas Goaziou <n.goaziou@gmail.com> wrote:

>> Not really a bug, but I find some behaviour surprising: when at a the
>> beginning of a regular text line, there is no way to create a headline
>> just above it. In the following example:
>> 
>>  XCursor is at "X"
>> 
>> Neither M-RET, C-u M-RET, C-RET nor C-u C-RET can do it. Is it intended?
>
> Which behavior would you propose?  I guess you mean that, at the beginning of a line,
> the result is so different for normal lines versus headlines?

Yes.

I never, ever, want to turn a regular text line into a headline. OTOH
during note taking, I very often write paragraphs and, afterwards,
decide to split them into sections.

Moreover, AFAICT, there's no more difference between C-u M-RET, which
meant "create headline right here" and M-RET.

> The way I was thinking about the behavior at the beginning of a non-headline
> is that it is the same as in the middle of a line:  Take the rest of the line
> and turn it into a headline.p
>
> To create a headline before a nonempty line, I use `C-o M-RET'

That's what I do. But that's not optimal and it introduces another
problem. In the following example

  * H

  XText

I want to create a headline above "Text" and point is at "X". I use C-o
M-RET and the latter greedily eat the blank line above, resulting in

  * H
  * X
  Text

as if I had typed C-p M-RET instead.

Again, I have `org-blank-before-new-entry' set to `auto' for headlines.
Since there is no information about how many blank lines I usually want
before headlines, I think the algorithm should trust me and do not
remove any blank lines (see `org-list-separating-blank-lines-number').

In the same vein, in the following situation

  * H1

    Text1

  * H2

    XText2

C-o M-RET should leave blank above "Text2" because it has information
about my preferences.

Oddly, in an empty buffer, it will create a blank line above.

>> Also in this case, I think C-RET should create the new headline _after_
>> the subtree, since that's its whole point anyway, AFAIU.
>
> That is what happens for me.  It does not for you?

It does, sorry about the noise.

> Hmm, I do find this behavior consistent. M-RET does not change the number
> of while lines after the current, only before, in order to either have
> an empty line or not.
>
> Which behavior would you propose?

Well same as above: I think it eats blank lines where it shouldn't. It
the following cases:

  * H1

  ** H2

     H
  X

and

  * H1

  * H2

    H

  X  

I don't think there's any reason for M-RET to eat blank line before
point with either `org-blank-before-new-entry' set to `auto' or t. It
should know that a blank line is expected before the new entry and
therefore should create the headline at point.

>> I also suggest to write function specifications as tests in test-org.el.
>
> Yes, I have yet to write my first test.  Need to figure out how that
> works.

That's simple. You can use the following pattern:

  (ert-deftest test-org/insert-heading ()
    "Test specifications for heading insertion."
    ;; In an empty buffer, headline should be created at its beginning,
    ;; notwithstanding value for `org-blank-before-new-entry'.
    (should
     (equal "* "
            (org-test-with-temp-text ""
              (let ((org-blank-before-new-entry '((heading . nil))))
                (org-insert-heading))
              (buffer-string))))
    (should
     (equal "* "
            (org-test-with-temp-text ""
              (let ((org-blank-before-new-entry '((heading . t))))
                (org-insert-heading))
              (buffer-string))))
    (should
     (equal "* "
            (org-test-with-temp-text ""
              (let ((org-blank-before-new-entry '((heading . auto))))
                (org-insert-heading))
              (buffer-string))))
    ;; At the end of a single headline: Create headline below, following
    ;; `org-blank-before-new-entry' specifications.  When it is `auto',
    ;; since there's not enough information to deduce what is expected,
    ;; create it just below.
    (should
     (equal "* H\n* "
            (org-test-with-temp-text "* H"
              (end-of-line)
              (let ((org-blank-before-new-entry '((heading . nil))))
                (org-insert-heading))
              (buffer-string))))
    (should
     (equal "* H\n\n* "
            (org-test-with-temp-text "* H"
              (end-of-line)
              (let ((org-blank-before-new-entry '((heading . t))))
                (org-insert-heading))
              (buffer-string))))
    (should
     (equal "* H\n* "
            (org-test-with-temp-text "* H"
              (end-of-line)
              (let ((org-blank-before-new-entry '((heading . auto))))
                (org-insert-heading))
              (buffer-string))))
    ;; Etc.
    )

I suggest to always put the `should' (or `should-not', `should-error')
outside each test: it makes it easier to inspect results from partial
evaluations.

You run each test individually with C-x C-e at the end of the `should'
sexp. You run all tests with "make test" from "org/" directory.


Regards,

-- 
Nicolas Goaziou

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

* Re: org-insert-heading rewritten from scratch
  2013-09-01  8:19         ` Nicolas Goaziou
@ 2013-09-01 12:04           ` Carsten Dominik
  2013-09-01 12:25             ` Nicolas Goaziou
  2013-09-03 13:16             ` Nicolas Goaziou
  0 siblings, 2 replies; 27+ messages in thread
From: Carsten Dominik @ 2013-09-01 12:04 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: Eric Abrahamsen, emacs-orgmode

Hi Nioclas,

thank you for the feedback.

On 1.9.2013, at 10:19, Nicolas Goaziou <n.goaziou@gmail.com> wrote:

> Hello,
> 
> Carsten Dominik <carsten.dominik@gmail.com> writes:
> 
>> On 31.8.2013, at 16:34, Nicolas Goaziou <n.goaziou@gmail.com> wrote:
> 
>>> Not really a bug, but I find some behaviour surprising: when at a the
>>> beginning of a regular text line, there is no way to create a headline
>>> just above it. In the following example:
>>> 
>>> XCursor is at "X"
>>> 
>>> Neither M-RET, C-u M-RET, C-RET nor C-u C-RET can do it. Is it intended?
>> 
>> Which behavior would you propose?  I guess you mean that, at the beginning of a line,
>> the result is so different for normal lines versus headlines?
> 
> Yes.
> 
> I never, ever, want to turn a regular text line into a headline. OTOH
> during note taking, I very often write paragraphs and, afterwards,
> decide to split them into sections.

OK, I'll go along with this.  `C-c *' if for turning a line into a headline,
M-RET for making a *new* headline.  That is logical.  Fixed now.

> 
> Moreover, AFAICT, there's no more difference between C-u M-RET, which
> meant "create headline right here" and M-RET.

C-u means: Do not ask org-insert-item, just go ahead and insert a heading.
That is supposed to be the only difference.

> 
>> The way I was thinking about the behavior at the beginning of a non-headline
>> is that it is the same as in the middle of a line:  Take the rest of the line
>> and turn it into a headline.p
>> 
>> To create a headline before a nonempty line, I use `C-o M-RET'
> 
> That's what I do. But that's not optimal and it introduces another
> problem. In the following example
> 
>  * H
> 
>  XText
> 
> I want to create a headline above "Text" and point is at "X". I use C-o
> M-RET and the latter greedily eat the blank line above, resulting in
> 
>  * H
>  * X
>  Text
> 
> as if I had typed C-p M-RET instead.
> 
> Again, I have `org-blank-before-new-entry' set to `auto' for headlines.
> Since there is no information about how many blank lines I usually want
> before headlines, I think the algorithm should trust me and do not
> remove any blank lines (see `org-list-separating-blank-lines-number').

I believe this is now better, please check.

> 
> In the same vein, in the following situation
> 
>  * H1
> 
>    Text1
> 
>  * H2
> 
>    XText2
> 
> C-o M-RET should leave blank above "Text2" because it has information
> about my preferences.

I think this is fixed as well.

> 
> Oddly, in an empty buffer, it will create a blank line above.

Fixed.

> 
>>> Also in this case, I think C-RET should create the new headline _after_
>>> the subtree, since that's its whole point anyway, AFAIU.
>> 
>> That is what happens for me.  It does not for you?
> 
> It does, sorry about the noise.
> 
>> Hmm, I do find this behavior consistent. M-RET does not change the number
>> of while lines after the current, only before, in order to either have
>> an empty line or not.
>> 
>> Which behavior would you propose?
> 
> Well same as above: I think it eats blank lines where it shouldn't. It
> the following cases:
> 
>  * H1
> 
>  ** H2
> 
>     H
>  X
> 
> and
> 
>  * H1
> 
>  * H2
> 
>    H
> 
>  X  
> 
> I don't think there's any reason for M-RET to eat blank line before
> point with either `org-blank-before-new-entry' set to `auto' or t. It
> should know that a blank line is expected before the new entry and
> therefore should create the headline at point.

Please take another look.

Thank you!

- Carsten

> 
>>> I also suggest to write function specifications as tests in test-org.el.
>> 
>> Yes, I have yet to write my first test.  Need to figure out how that
>> works.
> 
> That's simple. You can use the following pattern:
> 
>  (ert-deftest test-org/insert-heading ()
>    "Test specifications for heading insertion."
>    ;; In an empty buffer, headline should be created at its beginning,
>    ;; notwithstanding value for `org-blank-before-new-entry'.
>    (should
>     (equal "* "
>            (org-test-with-temp-text ""
>              (let ((org-blank-before-new-entry '((heading . nil))))
>                (org-insert-heading))
>              (buffer-string))))
>    (should
>     (equal "* "
>            (org-test-with-temp-text ""
>              (let ((org-blank-before-new-entry '((heading . t))))
>                (org-insert-heading))
>              (buffer-string))))
>    (should
>     (equal "* "
>            (org-test-with-temp-text ""
>              (let ((org-blank-before-new-entry '((heading . auto))))
>                (org-insert-heading))
>              (buffer-string))))
>    ;; At the end of a single headline: Create headline below, following
>    ;; `org-blank-before-new-entry' specifications.  When it is `auto',
>    ;; since there's not enough information to deduce what is expected,
>    ;; create it just below.
>    (should
>     (equal "* H\n* "
>            (org-test-with-temp-text "* H"
>              (end-of-line)
>              (let ((org-blank-before-new-entry '((heading . nil))))
>                (org-insert-heading))
>              (buffer-string))))
>    (should
>     (equal "* H\n\n* "
>            (org-test-with-temp-text "* H"
>              (end-of-line)
>              (let ((org-blank-before-new-entry '((heading . t))))
>                (org-insert-heading))
>              (buffer-string))))
>    (should
>     (equal "* H\n* "
>            (org-test-with-temp-text "* H"
>              (end-of-line)
>              (let ((org-blank-before-new-entry '((heading . auto))))
>                (org-insert-heading))
>              (buffer-string))))
>    ;; Etc.
>    )
> 
> I suggest to always put the `should' (or `should-not', `should-error')
> outside each test: it makes it easier to inspect results from partial
> evaluations.
> 
> You run each test individually with C-x C-e at the end of the `should'
> sexp. You run all tests with "make test" from "org/" directory.
> 
> 
> Regards,
> 
> -- 
> Nicolas Goaziou

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

* Re: org-insert-heading rewritten from scratch
  2013-09-01 12:04           ` Carsten Dominik
@ 2013-09-01 12:25             ` Nicolas Goaziou
  2013-09-03 13:16             ` Nicolas Goaziou
  1 sibling, 0 replies; 27+ messages in thread
From: Nicolas Goaziou @ 2013-09-01 12:25 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: Eric Abrahamsen, emacs-orgmode

Carsten Dominik <carsten.dominik@gmail.com> writes:

> Please take another look.

There is no new commit in maint or master.


Regards,

-- 
Nicolas Goaziou

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

* Re: org-insert-heading rewritten from scratch
  2013-09-01 12:04           ` Carsten Dominik
  2013-09-01 12:25             ` Nicolas Goaziou
@ 2013-09-03 13:16             ` Nicolas Goaziou
  2013-09-03 13:25               ` Carsten Dominik
  1 sibling, 1 reply; 27+ messages in thread
From: Nicolas Goaziou @ 2013-09-03 13:16 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: Eric Abrahamsen, emacs-orgmode

Hello,

Carsten Dominik <carsten.dominik@gmail.com> writes:

>> Moreover, AFAICT, there's no more difference between C-u M-RET, which
>> meant "create headline right here" and M-RET.
>
> C-u means: Do not ask org-insert-item, just go ahead and insert a heading.
> That is supposed to be the only difference.

Point taken. I thought C-u had another meaning too.

> Please take another look.

It looks better. Though it seems to ignore a nil
`org-blank-before-new-entry' value for `heading':

  * H

  X

Here I get,

  * H

  * X

but, with a nil value, it should be:

  * H
  * X


Thanks.

Regards,

-- 
Nicolas Goaziou

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

* Re: org-insert-heading rewritten from scratch
  2013-09-03 13:16             ` Nicolas Goaziou
@ 2013-09-03 13:25               ` Carsten Dominik
  2013-09-03 13:33                 ` Carsten Dominik
  2013-09-03 13:38                 ` Nicolas Goaziou
  0 siblings, 2 replies; 27+ messages in thread
From: Carsten Dominik @ 2013-09-03 13:25 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: Eric Abrahamsen, emacs-orgmode


On Sep 3, 2013, at 3:16 PM, Nicolas Goaziou <n.goaziou@gmail.com> wrote:

> Hello,
> 
> Carsten Dominik <carsten.dominik@gmail.com> writes:
> 
>>> Moreover, AFAICT, there's no more difference between C-u M-RET, which
>>> meant "create headline right here" and M-RET.
>> 
>> C-u means: Do not ask org-insert-item, just go ahead and insert a heading.
>> That is supposed to be the only difference.
> 
> Point taken. I thought C-u had another meaning too.
> 
>> Please take another look.
> 
> It looks better. Though it seems to ignore a nil
> `org-blank-before-new-entry' value for `heading':
> 
>  * H
> 
>  X
> 
> Here I get,
> 
>  * H
> 
>  * X
> 
> but, with a nil value, it should be:
> 
>  * H
>  * X


Hmmm, I thought you just asked me to implement exactly what you see, namely that M-RET will not remove empty lines above the cursor - only add them.  Did I misunderstand?

Thanks

- Carsten

> 
> 
> Thanks.
> 
> Regards,
> 
> -- 
> Nicolas Goaziou

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

* Re: org-insert-heading rewritten from scratch
  2013-09-03 13:25               ` Carsten Dominik
@ 2013-09-03 13:33                 ` Carsten Dominik
  2013-09-03 13:38                 ` Nicolas Goaziou
  1 sibling, 0 replies; 27+ messages in thread
From: Carsten Dominik @ 2013-09-03 13:33 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: Eric Abrahamsen, emacs-orgmode


On Sep 3, 2013, at 3:25 PM, Carsten Dominik <carsten.dominik@gmail.com> wrote:

> 
> On Sep 3, 2013, at 3:16 PM, Nicolas Goaziou <n.goaziou@gmail.com> wrote:
> 
>> Hello,
>> 
>> Carsten Dominik <carsten.dominik@gmail.com> writes:
>> 
>>>> Moreover, AFAICT, there's no more difference between C-u M-RET, which
>>>> meant "create headline right here" and M-RET.
>>> 
>>> C-u means: Do not ask org-insert-item, just go ahead and insert a heading.
>>> That is supposed to be the only difference.
>> 
>> Point taken. I thought C-u had another meaning too.
>> 
>>> Please take another look.
>> 
>> It looks better. Though it seems to ignore a nil
>> `org-blank-before-new-entry' value for `heading':
>> 
>> * H
>> 
>> X
>> 
>> Here I get,
>> 
>> * H
>> 
>> * X
>> 
>> but, with a nil value, it should be:
>> 
>> * H
>> * X
> 
> 
> Hmmm, I thought you just asked me to implement exactly what you see, namely that M-RET will not remove empty lines above the cursor - only add them.  Did I misunderstand?


OK, I just re-read your earlier mail, and you had only made this request for auto and t values of org-blank before new entry.

I'll contemplate this.

- Carsten

> 
> Thanks
> 
> - Carsten
> 
>> 
>> 
>> Thanks.
>> 
>> Regards,
>> 
>> -- 
>> Nicolas Goaziou
> 

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

* Re: org-insert-heading rewritten from scratch
  2013-09-03 13:25               ` Carsten Dominik
  2013-09-03 13:33                 ` Carsten Dominik
@ 2013-09-03 13:38                 ` Nicolas Goaziou
  2013-09-03 13:47                   ` Carsten Dominik
  1 sibling, 1 reply; 27+ messages in thread
From: Nicolas Goaziou @ 2013-09-03 13:38 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: Eric Abrahamsen, emacs-orgmode

Carsten Dominik <carsten.dominik@gmail.com> writes:

> Hmmm, I thought you just asked me to implement exactly what you see,
> namely that M-RET will not remove empty lines above the cursor - only
> add them.  Did I misunderstand?

I think so.

M-RET should not remove (or add) anything when it has no information
whatsoever about what the user want, namely when behaviour is set to
`auto' _and_ number of blank lines (or lack thereof) cannot be deduced
from other headlines.

When `org-blank-before-new-entry' is set to t (respectively nil), the
message is pretty clear. There are no heuristics involved and the
function can add (respectively remove) blank lines to its heart's
contents.

Sorry if I wasn't clear enough.


Regards,

-- 
Nicolas Goaziou

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

* Re: org-insert-heading rewritten from scratch
  2013-09-03 13:38                 ` Nicolas Goaziou
@ 2013-09-03 13:47                   ` Carsten Dominik
  2013-09-03 13:58                     ` Nicolas Goaziou
  0 siblings, 1 reply; 27+ messages in thread
From: Carsten Dominik @ 2013-09-03 13:47 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: Eric Abrahamsen, emacs-orgmode

I am still not clear about this.  In your earlier mail you made this example:

> Well same as above: I think it eats blank lines where it shouldn't. It
> the following cases:
> 
>  * H1
> 
>  ** H2
> 
>     H
>  X
> 
> and
> 
>  * H1
> 
>  * H2
> 
>    H
> 
>  X  
> 
> I don't think there's any reason for M-RET to eat blank line before
> point with either `org-blank-before-new-entry' set to `auto' or t. It
> should know that a blank line is expected before the new entry and
> therefore should create the headline at point.

WIth `auto', there will be an empty line before the next entry in both cases.  In both cases it looks at the H2 headline and sees the empty line before it.  Are you saying the behaviour should be different in both cases?

Cheers

- Carsten


On Sep 3, 2013, at 3:38 PM, Nicolas Goaziou <n.goaziou@gmail.com> wrote:

> Carsten Dominik <carsten.dominik@gmail.com> writes:
> 
>> Hmmm, I thought you just asked me to implement exactly what you see,
>> namely that M-RET will not remove empty lines above the cursor - only
>> add them.  Did I misunderstand?
> 
> I think so.
> 
> M-RET should not remove (or add) anything when it has no information
> whatsoever about what the user want, namely when behaviour is set to
> `auto' _and_ number of blank lines (or lack thereof) cannot be deduced
> from other headlines.
> 
> When `org-blank-before-new-entry' is set to t (respectively nil), the
> message is pretty clear. There are no heuristics involved and the
> function can add (respectively remove) blank lines to its heart's
> contents.
> 
> Sorry if I wasn't clear enough.
> 
> 
> Regards,
> 
> -- 
> Nicolas Goaziou

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

* Re: org-insert-heading rewritten from scratch
  2013-09-03 13:47                   ` Carsten Dominik
@ 2013-09-03 13:58                     ` Nicolas Goaziou
  2013-09-03 14:04                       ` Carsten Dominik
  0 siblings, 1 reply; 27+ messages in thread
From: Nicolas Goaziou @ 2013-09-03 13:58 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: Eric Abrahamsen, emacs-orgmode

Carsten Dominik <carsten.dominik@gmail.com> writes:

> I am still not clear about this.  In your earlier mail you made this example:
>
>> Well same as above: I think it eats blank lines where it shouldn't. It
>> the following cases:
>> 
>>  * H1
>> 
>>  ** H2
>> 
>>     H
>>  X
>> 
>> and
>> 
>>  * H1
>> 
>>  * H2
>> 
>>    H
>> 
>>  X  
>> 
>> I don't think there's any reason for M-RET to eat blank line before
>> point with either `org-blank-before-new-entry' set to `auto' or t. It
>> should know that a blank line is expected before the new entry and
>> therefore should create the headline at point.
>
> WIth `auto', there will be an empty line before the next entry in both
> cases. In both cases it looks at the H2 headline and sees the empty
> line before it. Are you saying the behaviour should be different in
> both cases?

Yes, it should.

As you point out, in both cases the algorithm knows that there should be
a blank line before the new entry (with the assumption that behaviour is
set to `auto'). In the first case, if it inserts the headline at point,
there will be none, so it has to add one. In the second case, there is
no need to add one since creating it at point will fulfill the
requirement (which is "a blank line before new headline").

Re-reading myself, I agree that my quoted explanations are a bit
confusing. I hope this should clarify my point.


Regards,

-- 
Nicolas Goaziou

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

* Re: org-insert-heading rewritten from scratch
  2013-09-03 13:58                     ` Nicolas Goaziou
@ 2013-09-03 14:04                       ` Carsten Dominik
  2013-09-03 14:12                         ` Nicolas Goaziou
  2013-09-07 10:50                         ` Nicolas Goaziou
  0 siblings, 2 replies; 27+ messages in thread
From: Carsten Dominik @ 2013-09-03 14:04 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: Eric Abrahamsen, emacs-orgmode


On Sep 3, 2013, at 3:58 PM, Nicolas Goaziou <n.goaziou@gmail.com> wrote:

> Carsten Dominik <carsten.dominik@gmail.com> writes:
> 
>> I am still not clear about this.  In your earlier mail you made this example:
>> 
>>> Well same as above: I think it eats blank lines where it shouldn't. It
>>> the following cases:
>>> 
>>> * H1
>>> 
>>> ** H2
>>> 
>>>    H
>>> X
>>> 
>>> and
>>> 
>>> * H1
>>> 
>>> * H2
>>> 
>>>   H
>>> 
>>> X  
>>> 
>>> I don't think there's any reason for M-RET to eat blank line before
>>> point with either `org-blank-before-new-entry' set to `auto' or t. It
>>> should know that a blank line is expected before the new entry and
>>> therefore should create the headline at point.
>> 
>> WIth `auto', there will be an empty line before the next entry in both
>> cases. In both cases it looks at the H2 headline and sees the empty
>> line before it. Are you saying the behaviour should be different in
>> both cases?
> 
> Yes, it should.
> 
> As you point out, in both cases the algorithm knows that there should be
> a blank line before the new entry (with the assumption that behaviour is
> set to `auto'). In the first case, if it inserts the headline at point,
> there will be none, so it has to add one. In the second case, there is
> no need to add one since creating it at point will fulfill the
> requirement (which is "a blank line before new headline").

Yes.  But you agree that the *result* should be the same, i.e. that there will
be an empty line before the newly inserted headline.

I think/hope we do agree now.

> 
> Re-reading myself, I agree that my quoted explanations are a bit
> confusing. I hope this should clarify my point.

I think so.

Thank you for your patience.

- Carsten

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

* Re: org-insert-heading rewritten from scratch
  2013-09-03 14:04                       ` Carsten Dominik
@ 2013-09-03 14:12                         ` Nicolas Goaziou
  2013-09-07 10:50                         ` Nicolas Goaziou
  1 sibling, 0 replies; 27+ messages in thread
From: Nicolas Goaziou @ 2013-09-03 14:12 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: Eric Abrahamsen, emacs-orgmode

Carsten Dominik <carsten.dominik@gmail.com> writes:

> Yes.  But you agree that the *result* should be the same, i.e. that there will
> be an empty line before the newly inserted headline.
>
> I think/hope we do agree now.

We do.


Regards,

-- 
Nicolas Goaziou

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

* Re: org-insert-heading rewritten from scratch
  2013-09-03 14:04                       ` Carsten Dominik
  2013-09-03 14:12                         ` Nicolas Goaziou
@ 2013-09-07 10:50                         ` Nicolas Goaziou
  2013-09-07 12:01                           ` Nicolas Goaziou
  1 sibling, 1 reply; 27+ messages in thread
From: Nicolas Goaziou @ 2013-09-07 10:50 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: Eric Abrahamsen, emacs-orgmode

Hello,

There seem to be a bug when using M-RET at "X" in the following buffer:

  * H1
  TextX

Try it with different values for `org-blank-before-new-entry'.


Regards,

-- 
Nicolas Goaziou

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

* Re: org-insert-heading rewritten from scratch
  2013-09-07 10:50                         ` Nicolas Goaziou
@ 2013-09-07 12:01                           ` Nicolas Goaziou
  0 siblings, 0 replies; 27+ messages in thread
From: Nicolas Goaziou @ 2013-09-07 12:01 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: Eric Abrahamsen, emacs-orgmode

Nicolas Goaziou <n.goaziou@gmail.com> writes:

> There seem to be a bug when using M-RET at "X" in the following buffer:
>
>   * H1
>   TextX
>
> Try it with different values for `org-blank-before-new-entry'.

Well, please scratch that: I was on a dubious local branch. Sorry for
the noise.


Regards,

-- 
Nicolas Goaziou

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

* Re: org-insert-heading rewritten from scratch
  2013-08-08  6:43 org-insert-heading rewritten from scratch Carsten Dominik
  2013-08-08  7:41 ` Eric Abrahamsen
@ 2013-09-09 16:42 ` Michael Brand
  2013-09-09 19:10   ` Nicolas Goaziou
  1 sibling, 1 reply; 27+ messages in thread
From: Michael Brand @ 2013-09-09 16:42 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: Emacs Org mode mailing list

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

Hi Carsten

On Thu, Aug 8, 2013 at 8:43 AM, Carsten Dominik
<carsten.dominik@gmail.com> wrote:
> I have rewritten org-insert-heading, because it had become an unmaintainable beast.
> Please follow up in this thread if you find problems with the new implementation.
> Very likely there will be bugs, but now I am at least confident they can be fixed.

On the way of rewiring my muscle memory from C-RET to M-RET for some
cases, I stumbled across this:

#+DRAWERS: MyStructuredDrawer
:MyStructuredDrawer:
- a
:END:

To insert a new item I once changed to use C-RET also on items. How is
one supposed to do this now within a drawer? M-RET just inserts an
empty line. I would like to suggest the attached patches with an ERT.
They change (fix?) org-meta-return to insert a new item in this case.

About the following different issue I don't care as much and only
wanted to report: C-RET before any headline when within a drawer, or
generally before any headline(?), could bark instead of changing to a
headline leading to invalid Org syntax within a drawer.

Michael

[-- Attachment #2: 0001-Add-ERTs-for-org-meta-return.patch.txt --]
[-- Type: text/plain, Size: 1621 bytes --]

From 6bc4c15c4a76a98c841e8a200c75f5a0737ffece Mon Sep 17 00:00:00 2001
From: Michael Brand <michael.ch.brand@gmail.com>
Date: Mon, 9 Sep 2013 18:38:58 +0200
Subject: [PATCH 1/2] Add ERTs for org-meta-return

* testing/lisp/test-org-list.el (test-org-list/insert-item): Adapt
docstring.
* (test-org-list/meta-return): New `ert-deftest' to test
`org-meta-return'.
---
 testing/lisp/test-org-list.el | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/testing/lisp/test-org-list.el b/testing/lisp/test-org-list.el
index ac81d4d..ea19606 100644
--- a/testing/lisp/test-org-list.el
+++ b/testing/lisp/test-org-list.el
@@ -627,7 +627,7 @@
     (should (org-invisible-p2))))
 
 (ert-deftest test-org-list/insert-item ()
-  "Test item insertion."
+  "Test item insertion with `org-insert-item'."
   ;; Blank lines specifications.
   ;;
   ;; Non-nil `org-blank-before-new-entry': insert a blank line, unless
@@ -713,6 +713,22 @@
        (forward-line -1)
        (looking-at "$")))))
 
+(ert-deftest test-org-list/meta-return ()
+  "Test item insertion with `org-meta-return'."
+  (should
+   (org-test-with-temp-text "- a"
+     (org-meta-return)
+     (beginning-of-line)
+     (looking-at "- $")))
+  ;; TODO Insert an item also in a drawer.
+  (should
+   (let ((org-drawers '("MYDRAWER")))
+     (org-test-with-temp-text ":MYDRAWER:\n- a\n:END:"
+       (forward-line)
+       (org-meta-return)
+       (forward-line -1)
+       (looking-at "$")))))
+
 (ert-deftest test-org-list/repair ()
   "Test `org-list-repair' specifications."
   ;; Repair indentation.
-- 
1.7.12.4 (Apple Git-37)


[-- Attachment #3: 0002-org-meta-return-Insert-an-item-also-in-a-drawer.patch.txt --]
[-- Type: text/plain, Size: 1846 bytes --]

From 9896499fb7f497a13857b5b86f33cfbf1b918029 Mon Sep 17 00:00:00 2001
From: Michael Brand <michael.ch.brand@gmail.com>
Date: Mon, 9 Sep 2013 18:40:07 +0200
Subject: [PATCH 2/2] org-meta-return: Insert an item also in a drawer

* lisp/org.el (org-meta-return): Exclude item from cond for drawer.
* testing/lisp/test-org-list.el (test-org-list/meta-return): On an
item in a drawer expect an item to be inserted.
---
 lisp/org.el                   | 3 ++-
 testing/lisp/test-org-list.el | 6 +++---
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/lisp/org.el b/lisp/org.el
index 59a22a2..edc8725 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -20698,7 +20698,8 @@ See the individual commands for more information."
   (org-check-before-invisible-edit 'insert)
   (cond
    ((run-hook-with-args-until-success 'org-metareturn-hook))
-   ((or (org-at-drawer-p) (org-in-drawer-p) (org-at-property-p))
+   ((and (or (org-at-drawer-p) (org-in-drawer-p) (org-at-property-p))
+	 (not (org-in-item-p)))
     (newline-and-indent))
    ((org-at-table-p)
     (call-interactively 'org-table-wrap-region))
diff --git a/testing/lisp/test-org-list.el b/testing/lisp/test-org-list.el
index ea19606..f3ced15 100644
--- a/testing/lisp/test-org-list.el
+++ b/testing/lisp/test-org-list.el
@@ -720,14 +720,14 @@
      (org-meta-return)
      (beginning-of-line)
      (looking-at "- $")))
-  ;; TODO Insert an item also in a drawer.
+  ;; Insert an item also in a drawer.
   (should
    (let ((org-drawers '("MYDRAWER")))
      (org-test-with-temp-text ":MYDRAWER:\n- a\n:END:"
        (forward-line)
        (org-meta-return)
-       (forward-line -1)
-       (looking-at "$")))))
+       (beginning-of-line)
+       (looking-at "- $")))))
 
 (ert-deftest test-org-list/repair ()
   "Test `org-list-repair' specifications."
-- 
1.7.12.4 (Apple Git-37)


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

* Re: org-insert-heading rewritten from scratch
  2013-09-09 16:42 ` Michael Brand
@ 2013-09-09 19:10   ` Nicolas Goaziou
  2013-09-09 20:37     ` Michael Brand
  0 siblings, 1 reply; 27+ messages in thread
From: Nicolas Goaziou @ 2013-09-09 19:10 UTC (permalink / raw)
  To: Michael Brand; +Cc: Emacs Org mode mailing list, Carsten Dominik

Hello,

Michael Brand <michael.ch.brand@gmail.com> writes:

> About the following different issue I don't care as much and only
> wanted to report: C-RET before any headline when within a drawer, or
> generally before any headline(?), could bark instead of changing to a
> headline leading to invalid Org syntax within a drawer.

I don't think it should bark, but it should insert the headline after
the drawer, i.e. just before the first headline, if there's one at all,
or at the end of the buffer.

> From 9896499fb7f497a13857b5b86f33cfbf1b918029 Mon Sep 17 00:00:00 2001
> From: Michael Brand <michael.ch.brand@gmail.com>
> Date: Mon, 9 Sep 2013 18:40:07 +0200
> Subject: [PATCH 2/2] org-meta-return: Insert an item also in a drawer
>
> * lisp/org.el (org-meta-return): Exclude item from cond for drawer.
> * testing/lisp/test-org-list.el (test-org-list/meta-return): On an
> item in a drawer expect an item to be inserted.

FWIW, I think the test belongs to test-org.el, not to test-org-list.el.


Regards,

-- 
Nicolas Goaziou

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

* Re: org-insert-heading rewritten from scratch
  2013-09-09 19:10   ` Nicolas Goaziou
@ 2013-09-09 20:37     ` Michael Brand
  2013-09-12 20:20       ` Carsten Dominik
  0 siblings, 1 reply; 27+ messages in thread
From: Michael Brand @ 2013-09-09 20:37 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: Emacs Org mode mailing list

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

Hi Nicolas

On Mon, Sep 9, 2013 at 9:10 PM, Nicolas Goaziou <n.goaziou@gmail.com> wrote:
> FWIW, I think the test belongs to test-org.el, not to test-org-list.el.

Ok, I assume, then better also with more tests than only for list items.
See the attached patches that replace the previous ones.

Michael

[-- Attachment #2: 0001-Add-ERTs-for-org-meta-return.patch.txt --]
[-- Type: text/plain, Size: 1892 bytes --]

From 66f6d15234bda97fc2e197efd2f9cb7c6439fef1 Mon Sep 17 00:00:00 2001
From: Michael Brand <michael.ch.brand@gmail.com>
Date: Mon, 9 Sep 2013 22:32:36 +0200
Subject: [PATCH 1/2] Add ERTs for org-meta-return

* testing/lisp/test-org.el (test-org/meta-return): New `ert-deftest'
to test `org-meta-return'.
---
 testing/lisp/test-org.el | 45 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el
index 8a1e9f1..4944c24 100644
--- a/testing/lisp/test-org.el
+++ b/testing/lisp/test-org.el
@@ -365,6 +365,51 @@
 
 
 \f
+;;; Editing
+
+;;;; Insert elements
+
+(ert-deftest test-org/meta-return ()
+  "Test M-RET (`org-meta-return')."
+  ;; In a table field insert a row above.
+  (should
+   (org-test-with-temp-text "| a |"
+     (forward-char)
+     (org-meta-return)
+     (forward-line -1)
+     (looking-at "|   |$")))
+  ;; In a paragraph change current line into a header.
+  (should
+   (org-test-with-temp-text "a"
+     (org-meta-return)
+     (beginning-of-line)
+     (looking-at "\* a$")))
+  ;; In an item insert an item, in this case above.
+  (should
+   (org-test-with-temp-text "- a"
+     (org-meta-return)
+     (beginning-of-line)
+     (looking-at "- $")))
+  ;; In a drawer and paragraph insert an empty line, in this case above.
+  (should
+   (let ((org-drawers '("MYDRAWER")))
+     (org-test-with-temp-text ":MYDRAWER:\na\n:END:"
+       (forward-line)
+       (org-meta-return)
+       (forward-line -1)
+       (looking-at "$"))))
+  ;; TODO In a drawer and item insert an item, in this case above.
+  (should
+   (let ((org-drawers '("MYDRAWER")))
+     (org-test-with-temp-text ":MYDRAWER:\n- a\n:END:"
+       (forward-line)
+       (org-meta-return)
+       (forward-line -1)
+       (looking-at "$")))))
+
+
+
+\f
 ;;; Links
 
 ;;;; Fuzzy Links
-- 
1.7.12.4 (Apple Git-37)


[-- Attachment #3: 0002-org-meta-return-Insert-an-item-also-in-a-drawer.patch.txt --]
[-- Type: text/plain, Size: 1762 bytes --]

From fddcaaed03630e7acc26ed701937b2ca17184fe5 Mon Sep 17 00:00:00 2001
From: Michael Brand <michael.ch.brand@gmail.com>
Date: Mon, 9 Sep 2013 22:33:47 +0200
Subject: [PATCH 2/2] org-meta-return: Insert an item also in a drawer

* lisp/org.el (org-meta-return): Exclude item from cond for drawer.
* testing/lisp/test-org.el (test-org/meta-return): In a drawer and
item insert an item.
---
 lisp/org.el              | 3 ++-
 testing/lisp/test-org.el | 6 +++---
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/lisp/org.el b/lisp/org.el
index 59a22a2..edc8725 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -20698,7 +20698,8 @@ See the individual commands for more information."
   (org-check-before-invisible-edit 'insert)
   (cond
    ((run-hook-with-args-until-success 'org-metareturn-hook))
-   ((or (org-at-drawer-p) (org-in-drawer-p) (org-at-property-p))
+   ((and (or (org-at-drawer-p) (org-in-drawer-p) (org-at-property-p))
+	 (not (org-in-item-p)))
     (newline-and-indent))
    ((org-at-table-p)
     (call-interactively 'org-table-wrap-region))
diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el
index 4944c24..3538242 100644
--- a/testing/lisp/test-org.el
+++ b/testing/lisp/test-org.el
@@ -398,14 +398,14 @@
        (org-meta-return)
        (forward-line -1)
        (looking-at "$"))))
-  ;; TODO In a drawer and item insert an item, in this case above.
+  ;; In a drawer and item insert an item, in this case above.
   (should
    (let ((org-drawers '("MYDRAWER")))
      (org-test-with-temp-text ":MYDRAWER:\n- a\n:END:"
        (forward-line)
        (org-meta-return)
-       (forward-line -1)
-       (looking-at "$")))))
+       (beginning-of-line)
+       (looking-at "- $")))))
 
 
 
-- 
1.7.12.4 (Apple Git-37)


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

* Re: org-insert-heading rewritten from scratch
  2013-09-09 20:37     ` Michael Brand
@ 2013-09-12 20:20       ` Carsten Dominik
  2013-09-12 20:52         ` Michael Brand
  0 siblings, 1 reply; 27+ messages in thread
From: Carsten Dominik @ 2013-09-12 20:20 UTC (permalink / raw)
  To: Michael Brand; +Cc: Emacs Org mode mailing list, Nicolas Goaziou

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

Hi Michael,

thanks for the patch - I think we will go with Nicolas' patch for fixing org-insert-heading.  May I ask you to check if your tests still to the right thing, and resubmit the test patch?

Many thanks in advance.

- Carsten

On 9.9.2013, at 22:37, Michael Brand <michael.ch.brand@gmail.com> wrote:

> Hi Nicolas
> 
> On Mon, Sep 9, 2013 at 9:10 PM, Nicolas Goaziou <n.goaziou@gmail.com> wrote:
>> FWIW, I think the test belongs to test-org.el, not to test-org-list.el.
> 
> Ok, I assume, then better also with more tests than only for list items.
> See the attached patches that replace the previous ones.
> 
> Michael
> <0001-Add-ERTs-for-org-meta-return.patch.txt><0002-org-meta-return-Insert-an-item-also-in-a-drawer.patch.txt>


[-- Attachment #2: Message signed with OpenPGP using GPGMail --]
[-- Type: application/pgp-signature, Size: 455 bytes --]

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

* Re: org-insert-heading rewritten from scratch
  2013-09-12 20:20       ` Carsten Dominik
@ 2013-09-12 20:52         ` Michael Brand
  2013-09-12 20:58           ` Carsten Dominik
  0 siblings, 1 reply; 27+ messages in thread
From: Michael Brand @ 2013-09-12 20:52 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: Emacs Org mode mailing list, Nicolas Goaziou

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

Hi Carsten

On Thu, Sep 12, 2013 at 10:20 PM, Carsten Dominik
<carsten.dominik@gmail.com> wrote:
> thanks for the patch - I think we will go with Nicolas' patch for fixing org-insert-heading.  May I ask you to check if your tests still to the right thing, and resubmit the test patch?
>
> Many thanks in advance.

Yes, merged patch attached. No changes in the test cases were necessary.

Michael

[-- Attachment #2: 0001-Add-ERTs-for-org-meta-return.patch.txt --]
[-- Type: text/plain, Size: 1888 bytes --]

From d87dd6c70c594b55abcabdb67ea6852b261a1a7c Mon Sep 17 00:00:00 2001
From: Michael Brand <michael.ch.brand@gmail.com>
Date: Thu, 12 Sep 2013 22:48:16 +0200
Subject: [PATCH] Add ERTs for org-meta-return

* testing/lisp/test-org.el (test-org/meta-return): New `ert-deftest'
to test `org-meta-return'.
---
 testing/lisp/test-org.el | 45 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el
index 8a1e9f1..3538242 100644
--- a/testing/lisp/test-org.el
+++ b/testing/lisp/test-org.el
@@ -365,6 +365,51 @@
 
 
 \f
+;;; Editing
+
+;;;; Insert elements
+
+(ert-deftest test-org/meta-return ()
+  "Test M-RET (`org-meta-return')."
+  ;; In a table field insert a row above.
+  (should
+   (org-test-with-temp-text "| a |"
+     (forward-char)
+     (org-meta-return)
+     (forward-line -1)
+     (looking-at "|   |$")))
+  ;; In a paragraph change current line into a header.
+  (should
+   (org-test-with-temp-text "a"
+     (org-meta-return)
+     (beginning-of-line)
+     (looking-at "\* a$")))
+  ;; In an item insert an item, in this case above.
+  (should
+   (org-test-with-temp-text "- a"
+     (org-meta-return)
+     (beginning-of-line)
+     (looking-at "- $")))
+  ;; In a drawer and paragraph insert an empty line, in this case above.
+  (should
+   (let ((org-drawers '("MYDRAWER")))
+     (org-test-with-temp-text ":MYDRAWER:\na\n:END:"
+       (forward-line)
+       (org-meta-return)
+       (forward-line -1)
+       (looking-at "$"))))
+  ;; In a drawer and item insert an item, in this case above.
+  (should
+   (let ((org-drawers '("MYDRAWER")))
+     (org-test-with-temp-text ":MYDRAWER:\n- a\n:END:"
+       (forward-line)
+       (org-meta-return)
+       (beginning-of-line)
+       (looking-at "- $")))))
+
+
+
+\f
 ;;; Links
 
 ;;;; Fuzzy Links
-- 
1.7.12.4 (Apple Git-37)


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

* Re: org-insert-heading rewritten from scratch
  2013-09-12 20:52         ` Michael Brand
@ 2013-09-12 20:58           ` Carsten Dominik
  0 siblings, 0 replies; 27+ messages in thread
From: Carsten Dominik @ 2013-09-12 20:58 UTC (permalink / raw)
  To: Michael Brand; +Cc: Emacs Org mode mailing list, Nicolas Goaziou

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

Hi Michael,

I have applied your testing patch, thank you!

- Carsten

On 12.9.2013, at 22:52, Michael Brand <michael.ch.brand@gmail.com> wrote:

> Hi Carsten
> 
> On Thu, Sep 12, 2013 at 10:20 PM, Carsten Dominik
> <carsten.dominik@gmail.com> wrote:
>> thanks for the patch - I think we will go with Nicolas' patch for fixing org-insert-heading.  May I ask you to check if your tests still to the right thing, and resubmit the test patch?
>> 
>> Many thanks in advance.
> 
> Yes, merged patch attached. No changes in the test cases were necessary.
> 
> Michael
> <0001-Add-ERTs-for-org-meta-return.patch.txt>


[-- Attachment #2: Message signed with OpenPGP using GPGMail --]
[-- Type: application/pgp-signature, Size: 455 bytes --]

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

end of thread, other threads:[~2013-09-12 20:58 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-08  6:43 org-insert-heading rewritten from scratch Carsten Dominik
2013-08-08  7:41 ` Eric Abrahamsen
2013-08-31 14:00   ` Carsten Dominik
2013-08-31 14:34     ` Nicolas Goaziou
2013-09-01  6:13       ` Carsten Dominik
2013-09-01  8:19         ` Nicolas Goaziou
2013-09-01 12:04           ` Carsten Dominik
2013-09-01 12:25             ` Nicolas Goaziou
2013-09-03 13:16             ` Nicolas Goaziou
2013-09-03 13:25               ` Carsten Dominik
2013-09-03 13:33                 ` Carsten Dominik
2013-09-03 13:38                 ` Nicolas Goaziou
2013-09-03 13:47                   ` Carsten Dominik
2013-09-03 13:58                     ` Nicolas Goaziou
2013-09-03 14:04                       ` Carsten Dominik
2013-09-03 14:12                         ` Nicolas Goaziou
2013-09-07 10:50                         ` Nicolas Goaziou
2013-09-07 12:01                           ` Nicolas Goaziou
2013-09-01  2:38     ` Eric Abrahamsen
2013-09-01  3:11     ` Samuel Wales
2013-09-01  3:13       ` Samuel Wales
2013-09-09 16:42 ` Michael Brand
2013-09-09 19:10   ` Nicolas Goaziou
2013-09-09 20:37     ` Michael Brand
2013-09-12 20:20       ` Carsten Dominik
2013-09-12 20:52         ` Michael Brand
2013-09-12 20:58           ` Carsten Dominik

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