Re: Strangely recognized non-lists and non-headers.

2020-02-02 Thread D
> You need to escape them with commas.

Ah, I overlooked that because I did not check the manual whether leading
stars are escaped automatically and just assumed it, sorry.  Thanks a lot!

Though, there is one minor thing I noticed:

Leading stars are valid comment symbols in Fortran, as long as they are
the first character in the line.  They are recognized in SRC fortran
blocks when the star is unescaped, but not when the star is escaped, meaning
#+BEGIN_SRC fortran
,***
,* a valid comment
,**
#+END_SRC
 is displayed with the org-block face instead of the usual
font-lock-comment-face.




Re: Strangely recognized non-lists and non-headers.

2020-02-02 Thread Nicolas Goaziou
D  writes:

> On 02.02.20 12:59, Nicolas Goaziou wrote:
>> Long story short. Don't use this function, it is not correctly
>> implemented at the moment. The correct way to check if you're in a list
>> is something like:
>> 
>>   (org-element-lineage (org-element-at-point) '(plain-list) t)
>
> I tried that out, but it still seems to recognize source code as
> headlines, replacing the predicate does not change the behavior.

Of course. You cannot have headlines within a source block. You need to
escape them with commas. I'm just pointing out that the code above is
the right way to check if you're in a list.



Re: Strangely recognized non-lists and non-headers.

2020-02-02 Thread D
Hi,

On 02.02.20 12:59, Nicolas Goaziou wrote:
> Long story short. Don't use this function, it is not correctly
> implemented at the moment. The correct way to check if you're in a list
> is something like:
> 
>   (org-element-lineage (org-element-at-point) '(plain-list) t)

I tried that out, but it still seems to recognize source code as
headlines, replacing the predicate does not change the behavior.  It
seems to be something more deeply rooted than that, I mean, otherwise
org mode wouldn't try to collapse those fake-headlines when hitting TAB,
either.

Regards,

D.



Re: Strangely recognized non-lists and non-headers.

2020-02-02 Thread Nicolas Goaziou
Hello,

D  writes:

> I use org-list-in-valid-context-p as a quick hack to check if what I am
> looking at is actually a list.  

Long story short. Don't use this function, it is not correctly
implemented at the moment. The correct way to check if you're in a list
is something like:

  (org-element-lineage (org-element-at-point) '(plain-list) t)


Regards,

-- 
Nicolas Goaziou



Strangely recognized non-lists and non-headers.

2020-02-02 Thread D
Hi all,

while debugging org-superstar-mode I noticed something very strange, and
I am not sure if it's a bug in org or a bug in my understanding of org.

First off, an MWE for Org mode version 9.1.9 (release_9.1.9-65-g5e4542):

#+BEGIN_SRC C
/*
* This is a header?
  + this
+ is
  * a list?
*/
#+END_SRC

This works. I can promote, demote, fold, etc.  org-superstar also has no
issue with accepting these.  I should add, this is the default config
(emacs -Q on Emacs 26.3).  So no spooky stuff I believe on that end.
So I began digging.

I use org-list-in-valid-context-p as a quick hack to check if what I am
looking at is actually a list.  Said predicate is a simple wrapper
around the function org-in-block-p being called with
org-list-forbidden-blocks.  It is the the list of environments where
lists are not allowed.

Value: ("example" "verse" "src" "export")

There is also a very similar variable: org-protecting-blocks.  This one
marks environments as quoted, disallowing org syntax.

Value: ("src" "example" "export")

Currently these two variables don't know of one another.  Maybe the
latter should be a strict subset of the former?

Anyway, from what I have found org-in-block-p seems to not recognize src
blocks reliably.  I wrote a small function to test this:

(defun nag ()
  (interactive)
  (when (org-list-in-valid-context-p)
(warn "You can make a list here! :(")))

And it seems, yes, you can make a list in a src block.
That's all very peculiar, what do you guys think?