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
next prev parent 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
* 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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.