emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Faces bug in org-indent-mode
@ 2009-08-20 13:07 Jason F. McBrayer
  2009-08-20 13:34 ` Daniel Clemente
  2009-08-20 19:54 ` Carsten Dominik
  0 siblings, 2 replies; 8+ messages in thread
From: Jason F. McBrayer @ 2009-08-20 13:07 UTC (permalink / raw)
  To: org-mode list

There's a little problem with faces in org-indent-mode.  Faces that
highlight to the end of the line (hl-line-face, org-level-faces if
org-fontify-whole-header-line is on, etc) get carried over to the start
of text on the next line.  Faces like that are pretty rare, but I
thought I'd go ahead and report this.
-- 
+-----------------------------------------------------------+  
| Jason F. McBrayer                    jmcbray@carcosa.net  |  
| If someone conquers a thousand times a thousand others in |  
| battle, and someone else conquers himself, the latter one |  
| is the greatest of all conquerors.  --- The Dhammapada    |  

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

* Re: Faces bug in org-indent-mode
  2009-08-20 13:07 Faces bug in org-indent-mode Jason F. McBrayer
@ 2009-08-20 13:34 ` Daniel Clemente
  2009-08-20 19:57   ` Carsten Dominik
  2009-08-20 19:54 ` Carsten Dominik
  1 sibling, 1 reply; 8+ messages in thread
From: Daniel Clemente @ 2009-08-20 13:34 UTC (permalink / raw)
  To: Jason F. McBrayer; +Cc: org-mode list


I don't know if it's the same as what you report, but I can see the same behaviour also in this file:


* something
aaa =eee
* two= *iii
ooo* uuu


  Open/close/expand/contract as needed. In my Emacs 23 with latest org I see it wrongly highlighted just after opening it (headings contracted):
  What I see wrong is:
- the „code“ face comprises =eee \n* two=
- the „bold“ face comprises *iii\nooo*
( \n = ⏎ = line break ). So both span past the end of the line. This only happens if the next line is consecutive (with no blank lines).

-- Daniel



El dj, ago 20 2009 a les 15:07, Jason F. McBrayer va escriure:
> There's a little problem with faces in org-indent-mode.  Faces that
> highlight to the end of the line (hl-line-face, org-level-faces if
> org-fontify-whole-header-line is on, etc) get carried over to the start
> of text on the next line.  Faces like that are pretty rare, but I
> thought I'd go ahead and report this.

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

* Re: Faces bug in org-indent-mode
  2009-08-20 13:07 Faces bug in org-indent-mode Jason F. McBrayer
  2009-08-20 13:34 ` Daniel Clemente
@ 2009-08-20 19:54 ` Carsten Dominik
  1 sibling, 0 replies; 8+ messages in thread
From: Carsten Dominik @ 2009-08-20 19:54 UTC (permalink / raw)
  To: Jason F. McBrayer; +Cc: org-mode list

Hi,

that is an Emacs bug, not an Org-mode bug.

- Carsten

On Aug 20, 2009, at 2:07 PM, Jason F. McBrayer wrote:

> There's a little problem with faces in org-indent-mode.  Faces that
> highlight to the end of the line (hl-line-face, org-level-faces if
> org-fontify-whole-header-line is on, etc) get carried over to the  
> start
> of text on the next line.  Faces like that are pretty rare, but I
> thought I'd go ahead and report this.
> -- 
> +-----------------------------------------------------------+
> | Jason F. McBrayer                    jmcbray@carcosa.net  |
> | If someone conquers a thousand times a thousand others in |
> | battle, and someone else conquers himself, the latter one |
> | is the greatest of all conquerors.  --- The Dhammapada    |
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Remember: use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode

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

* Re: Faces bug in org-indent-mode
  2009-08-20 13:34 ` Daniel Clemente
@ 2009-08-20 19:57   ` Carsten Dominik
  2009-08-21 11:03     ` Daniel Clemente
  0 siblings, 1 reply; 8+ messages in thread
From: Carsten Dominik @ 2009-08-20 19:57 UTC (permalink / raw)
  To: Daniel Clemente; +Cc: org-mode list

On Aug 20, 2009, at 2:34 PM, Daniel Clemente wrote:

>
> I don't know if it's the same as what you report, but I can see the  
> same behaviour also in this file:
>
>
> * something
> aaa =eee
> * two= *iii
> ooo* uuu
>
>
>  Open/close/expand/contract as needed. In my Emacs 23 with latest  
> org I see it wrongly highlighted just after opening it (headings  
> contracted):
>  What I see wrong is:
> - the „code“ face comprises =eee \n* two=
> - the „bold“ face comprises *iii\nooo*
> ( \n = ⏎ = line break ). So both span past the end of the line.  
> This only happens if the next line is consecutive (with no blank  
> lines).

Yes, this is kind of hard to fix......  And a minor issue, I guess... ?

- Carsten


>
> -- Daniel
>
>
>
> El dj, ago 20 2009 a les 15:07, Jason F. McBrayer va escriure:
>> There's a little problem with faces in org-indent-mode.  Faces that
>> highlight to the end of the line (hl-line-face, org-level-faces if
>> org-fontify-whole-header-line is on, etc) get carried over to the  
>> start
>> of text on the next line.  Faces like that are pretty rare, but I
>> thought I'd go ahead and report this.
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Remember: use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode

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

* Re: Faces bug in org-indent-mode
  2009-08-20 19:57   ` Carsten Dominik
@ 2009-08-21 11:03     ` Daniel Clemente
  2009-08-25  7:56       ` Carsten Dominik
  0 siblings, 1 reply; 8+ messages in thread
From: Daniel Clemente @ 2009-08-21 11:03 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: org-mode list

El dj, ago 20 2009 a les 21:57, Carsten Dominik va escriure:
>>
>> * something
>> aaa =eee
>> * two= *iii
>> ooo* uuu
>>
> Yes, this is kind of hard to fix......  And a minor issue, I guess... ?
>

  Yes, it's a minor issue. I like minor issues :-)

  There are two display problems here:
- a face defined before a heading enters the heading (like the =eee…=)
- a face defined in a heading goes on past the heading (like the *iii…)

  I did some tests with org-emph-re (original value: [1]); the interesting part is \\(?:\n.*?\\)\\{0,1\\} because it is the one that allows the face to extend up to 1 line below.
  The .*? from there comes from the so-called body in org-emphasis-regexp-components, body="."
  I have done some tests and I think that body="\\(?:\\*+[^\n ]\\|[^\n*]\\)." fixes the first problem. The expression represents a non-heading line: anything not starting by * (except when the initial * precedes a word) and then many other characters (a "*?" at the end will be added by org-set-emph-re)
  Final value: [2]

  Is this added complexity worth it? The bug is unpleasant (headings aren't coloured as headings) and performance shouldn't be much affected in the common case because ^\\* fails early. Only visually it is a complex regexp.

  I don't know how to detect the other problem inside a regular expression. Maybe there's some way to ask „don't cross boundaries between headings and content“.


-- Daniel

[1]: "\\([ 	('`\"{]\\|^\\)\\(\\([*/_=~+]\\)\\([^ 	\r\n,\"']\\|[^ 	\r\n,\"'].*?\\(?:\n.*?\\)\\{0,1\\}[^ 	\r\n,\"']\\)\\3\\)\\([- 	.,:!?;'\")}\\]\\|$\\)"

[2]: "\\([ 	('`\"{]\\|^\\)\\(\\([*/_=~+]\\)\\([^ 	\r\n,\"']\\|[^ 	\r\n,\"'].*?\\(?:\n\\*+[^\n ].*?\\|\n[^\n*].*?\\)\\{0,1\\}[^ 	\r\n,\"']\\)\\3\\)\\([- 	.,:!?;'\")}\\]\\|$\\)"

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

* Re: Faces bug in org-indent-mode
  2009-08-21 11:03     ` Daniel Clemente
@ 2009-08-25  7:56       ` Carsten Dominik
  2009-08-26 11:42         ` Daniel Clemente
  0 siblings, 1 reply; 8+ messages in thread
From: Carsten Dominik @ 2009-08-25  7:56 UTC (permalink / raw)
  To: Daniel Clemente; +Cc: org-mode list

Hi Daniel,

thanks for looking deeper into the issue.

As you have noticed yourself, your proposal fixes only half of
the problem.  Doing this emphasis with a regular expression
is really hard, and each time you change something, another
thing will break.  The real solution for this would be to
switch to a programmed solution instead of a regular
expression search.

Your proposed change does fix a problem, but it also breaks
the structure of how the emphasis regexp is constructed.  BODY
is supposed to match a character that should be emphasized.  Maybe
it can be re-written so that this does not have to be part of the BODY.

Also, there are similar issues with this in tables: Try

   | *h | h  |
   | h  | h* |

or also with comments:

  Some text *h mamma mia
# terminate bold in comment*

So I will out this on the back burner and try to get myself
to implement programmed emphasis at some point.

Sorry.

- Carsten


On Aug 21, 2009, at 1:03 PM, Daniel Clemente wrote:

> El dj, ago 20 2009 a les 21:57, Carsten Dominik va escriure:
>>>
>>> * something
>>> aaa =eee
>>> * two= *iii
>>> ooo* uuu
>>>
>> Yes, this is kind of hard to fix......  And a minor issue, I  
>> guess... ?
>>
>
>  Yes, it's a minor issue. I like minor issues :-)
>
>  There are two display problems here:
> - a face defined before a heading enters the heading (like the =eee…=)
> - a face defined in a heading goes on past the heading (like the  
> *iii…)
>
>  I did some tests with org-emph-re (original value: [1]); the  
> interesting part is \\(?:\n.*?\\)\\{0,1\\} because it is the one  
> that allows the face to extend up to 1 line below.
>  The .*? from there comes from the so-called body in org-emphasis- 
> regexp-components, body="."
>  I have done some tests and I think that body="\\(?:\\*+[^\n ]\\|[^ 
> \n*]\\)." fixes the first problem. The expression represents a non- 
> heading line: anything not starting by * (except when the initial *  
> precedes a word) and then many other characters (a "*?" at the end  
> will be added by org-set-emph-re)
>  Final value: [2]
>
>  Is this added complexity worth it? The bug is unpleasant (headings  
> aren't coloured as headings) and performance shouldn't be much  
> affected in the common case because ^\\* fails early. Only visually  
> it is a complex regexp.
>
>  I don't know how to detect the other problem inside a regular  
> expression. Maybe there's some way to ask „don't cross boundaries  
> between headings and content“.
>
>
> -- Daniel
>
> [1]: "\\([ 	('`\"{]\\|^\\)\\(\\([*/_=~+]\\)\\([^ 	
> \n,\"']\\|[^ 	
> \n,\"'].*?\\(?:\n.*?\\)\\{0,1\\}[^ 	
> \n,\"']\\)\\3\\)\\([- 	.,:!?;'\")}\\]\\|$\\)"
>
> [2]: "\\([ 	('`\"{]\\|^\\)\\(\\([*/_=~+]\\)\\([^ 	
> \n,\"']\\|[^ 	
> \n,\"'].*?\\(?:\n\\*+[^\n ].*?\\|\n[^\n*].*?\\)\\{0,1\\}[^ 	
> \n,\"']\\)\\3\\)\\([- 	.,:!?;'\")}\\]\\|$\\)"
>
>

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

* Re: Faces bug in org-indent-mode
  2009-08-25  7:56       ` Carsten Dominik
@ 2009-08-26 11:42         ` Daniel Clemente
  2009-08-26 12:26           ` Carsten Dominik
  0 siblings, 1 reply; 8+ messages in thread
From: Daniel Clemente @ 2009-08-26 11:42 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: org-mode list

El dt, ago 25 2009 a les 09:56, Carsten Dominik va escriure:

> thing will break.  The real solution for this would be to
> switch to a programmed solution instead of a regular
> expression search.
>
  Or many regular expressions, one for each context: table, heading, comment, text, …
  Based on the context, you choose one or another. To know the context, there may be some text property set at each point.
  If Emacs had a way to check for a text property (or even a face) inside a regexp, this could be easier. You could still use a single expression which would direct to the context-specific part, like in:  \p{heading}REGEXP_ONLY_FOR_HEADINGS\|\p{table}REGEXP_FOR_TABLES\|…   where \p{property} is the proposed addition to Emacs regexps.


  This was a minor issue, but making Emacs regexps more powerful would be nice.

-- Daniel

  

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

* Re: Faces bug in org-indent-mode
  2009-08-26 11:42         ` Daniel Clemente
@ 2009-08-26 12:26           ` Carsten Dominik
  0 siblings, 0 replies; 8+ messages in thread
From: Carsten Dominik @ 2009-08-26 12:26 UTC (permalink / raw)
  To: Daniel Clemente; +Cc: org-mode list


On Aug 26, 2009, at 1:42 PM, Daniel Clemente wrote:

> El dt, ago 25 2009 a les 09:56, Carsten Dominik va escriure:
>
>> thing will break.  The real solution for this would be to
>> switch to a programmed solution instead of a regular
>> expression search.
>>
>  Or many regular expressions, one for each context: table, heading,  
> comment, text, …
>  Based on the context, you choose one or another. To know the  
> context, there may be some text property set at each point.
>  If Emacs had a way to check for a text property (or even a face)  
> inside a regexp, this could be easier. You could still use a single  
> expression which would direct to the context-specific part, like  
> in:  \p{heading}REGEXP_ONLY_FOR_HEADINGS\|\p{table}REGEXP_FOR_TABLES 
> \|…   where \p{property} is the proposed addition to Emacs regexps.

All we would really need are positive and negative look-ahead
and look-behind assertions as the Perl regular expression allows them.

- Carsten

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

end of thread, other threads:[~2009-08-26 12:27 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-20 13:07 Faces bug in org-indent-mode Jason F. McBrayer
2009-08-20 13:34 ` Daniel Clemente
2009-08-20 19:57   ` Carsten Dominik
2009-08-21 11:03     ` Daniel Clemente
2009-08-25  7:56       ` Carsten Dominik
2009-08-26 11:42         ` Daniel Clemente
2009-08-26 12:26           ` Carsten Dominik
2009-08-20 19:54 ` 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).