unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Carsten Dominik <carsten.dominik@gmail.com>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: emacs-devel Mailinglist <emacs-devel@gnu.org>
Subject: Re: Feature proposal/request: Indentation driven by display engine
Date: Sat, 24 May 2008 22:22:46 +0200	[thread overview]
Message-ID: <DFF24921-ED48-41DA-B48B-BAD7039830BF@gmail.com> (raw)
In-Reply-To: <jwvzlqfsfxw.fsf-monnier+emacs@gnu.org>

Hi Stefan, thanks for your reply.

On May 24, 2008, at 8:48 PM, Stefan Monnier wrote:

>> I have been trying to implement this using display properties
>> on each newline characters, displaying "\n   " instead of
>> just "\n".  This basically works, but it interacts badly
>> with outlining:  If I fold the text below a headline, the
>> first indentation is still displayed.
>
> Can't you remove the display property when you fold to avoid the  
> problem?

I could, but then I would have to add and remove text properties during
each fold/unfold, quite some unnecessary overhead.

>> The next thing I tried was using overlays over each "\n",
>> with an after-string property carrying the indentations.
>> This works correctly with outline, but when I add thousands
>> of overlays to a buffer this becomes slow and redisplay and
>> editing become sluggish, probably because to the huge
>> amount of markers in the buffer.
>
> Yes, we need to improve the implementation of markers to eliminate the
> O(N) complexity.  Ideally, there'd be some clever way to store the
> markers directly inside the text-properties tree.

Yes, it would certainly be nice to get rid of this old problem.

>
>
>> It then occurred to me that it might be useful to support
>> such a feature directly in the display engine.
>> For example, if the line contains text with an `indentation'
>> property, the display engine would add this amount of white
>> space to before the beginning of the line, maybe also a vertical
>> line indicating the location of the margin.
>
> This property would still need to be added to every line.  So  
> basically
> all you're asking is a "before-string" text-property, maybe?

Hmm, nice translation of my request.  Yes, basically what I am
asking for is a working before-string text property.  I know
that adding the property sounds like a lot of effort, but I could
use the font-lock/jit-lock setup to get this done efficiently,
only for the pieces that actually get displayed.

>> Or are there other comments, for example how this dynamic
>> indentation could be implemented in a different way?
>
> How 'bout modifying the actual buffer text directly?

Yes, this is in fact what I am doing now, I use TAB, and
wrapping/paragraph-fill support to get fill prefixes.  I also modify
indentation during promotion and demotion of entries.

However, there are some disadvantages to this.  One obvious one is
this:  Org contains a publishing part, and for publishing
we allow examples like code snippets, where indentation might be
important.  So the

#+BEGIN_EXAMPLE

#+END_EXAMPLE

construct should be flush to the left margin.

Are we going to get a before-string property?  WOuld be cool.

- Carsten













>
>
>
>        Stefan





  reply	other threads:[~2008-05-24 20:22 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-05-24 12:15 Feature proposal/request: Indentation driven by display engine Carsten Dominik
2008-05-24 18:48 ` Stefan Monnier
2008-05-24 20:22   ` Carsten Dominik [this message]
2008-05-26 21:02     ` Stefan Monnier
2008-05-27  8:24       ` Carsten Dominik
2008-05-24 23:02 ` Stephen Berman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DFF24921-ED48-41DA-B48B-BAD7039830BF@gmail.com \
    --to=carsten.dominik@gmail.com \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.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).