From: Alan Mackenzie <acm@muc.de>
To: Eli Zaretskii <eliz@gnu.org>
Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org
Subject: Re: [Emacs-diffs] master 29d1c72: Introduce new value t for compilation-context-lines to eliminate scrolling
Date: Sat, 31 Aug 2019 10:53:16 +0000 [thread overview]
Message-ID: <20190831105316.GA4822@ACM> (raw)
In-Reply-To: <8336hjbzn5.fsf@gnu.org>
Hello, Eli.
On Thu, Aug 29, 2019 at 21:22:06 +0300, Eli Zaretskii wrote:
> > Date: Tue, 27 Aug 2019 20:05:20 +0000
> > Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org
> > From: Alan Mackenzie <acm@muc.de>
> > > > Should I have been aware of this?
> > > What is "this" in this context? The display margins or how to use
> > > them with overlays?
> > I think, more the first of these.
> > > > Somehow, in the elisp manual, it seems buried under several levels
> > > > of chapters, sections, and sub-sections.
> The subsection describing the display margins is part of the section
> which documents the 'display' properties in general, so I think it's
> in a correct and logical place.
> Where would you expect it to be mentioned, not to be "buried"?
Maybe on the page "Emacs Display", rather than the current menu point:
* Display Property Enabling special display features.
, something like:
* Display Property Images, margins, text size, etc.
might be more helpful.
> > I found implementing these margins (see patch in separate post) to be
> > particularly difficult. There is no complete example of how to do this
> > on the "Display Margins" elisp manual page.
> Feel free to provide an example. The simplest way, one that doesn't
> use an overlay string, is just setting a display property on buffer
> text, something that hardly needs an example.
This would involve that text not getting displayed. I'm not sure doing
that would ever be useful - if such a display text property were put on
the first character of a line, and that line were empty, it would
(presumably) make that line disappear from the display.
I will get an example together, but at the moment Real Life is somewhat
stressful. Maybe I could base it on the margin I'm putting into
fringeless windows in compilation-mode.
> > There, the word "property" is used, rather than "text property or
> > overlay property", leaving me uncertain of whether I could have
> > implemented this "=>" in the margin solely with overlays.
> This is a subsection of a section about 'display' property, which is
> only available for text in buffers and Lisp strings, not for overlays.
> One should read the manual in the context of the parent sections.
I was floundering around in confusion for several hours, trying to get
some concrete handle on how to code the margins. If the sentence in
"Display Margins" had read:
The way to display something in the margins is to specify it in a
margin display specification in the `display' TEXT property of some
text.
^^^^
, this would have helped me.
> > I was uncertain, right up till near when I had the thing ready,
> > whether the variables implementing this need to be buffer local or
> > not.
> Which variables?
compilation-margin-string ;; the "=>" which appears in the margin
compilation--dummy-string ;; the before-string which has a `display' text
;; property for the margin.
compilation-arrow-overlay ;; The overlay causing the "=>" to be displayed
;; at the appropriate line in the window.
Of these, only the last needs to be buffer local, since there might be
several compilation-mode windows live at the same time. Really it ought
to be a "window local variable", but we don't have these. That's
probably a good thing.
> And why did you think they need to be buffer-local? Text properties
> already localize their values enough, so there should be no need for
> anything buffer-local. That's in general, not only for the display
> properties.
Yes. I think I've got that, now.
> > Also, the setup seems wierd. Why isn't there a direct `margin' overlay
> > property, much the same way there's a `before-string' overlay property?
> Because no one wrote the code to do that.
That's a good answer. Thanks!
> This is a display property, so you can put it on buffer text or on a
> Lisp string, in particular on a Lisp string that is before- or
> after-string of an overlay.
> > Instead, what we have is a required "dummy" `before-string', which is
> > supplanted by a `display' text property on it. It just seems a strange
> > way of implementing it. This certainly doesn't promote easy
> > understanding. IMHO, of course.
> Display properties (really, any "replacing" properties) are tricky in
> implementation, you should look up the code some day. Then you will
> maybe understand why no one ever wanted to add one more such
> facility.
Yes. I spent quite a bit of time a couple of weeks ago getting my head
around the code in xdisp.c for before-strings and after-strings. Maybe
adding margins into the mix wouldn't really be a good idea. ;-)
> The way of using the display properties to display in the margins was
> originally implemented only for buffer text; placing it on overlay
> strings had bugs until Emacs 24 or 25, I think.
Ah.
> In any case, the ELisp manual describes this possibility, precisely
> because it is not easy to come up on one's own. So I think we are OK
> here, documentation-wise.
As above, I think a complete example in the "Display Margins" page would
be helpful. I'll get around to formulating this some time (soon?).
--
Alan Mackenzie (Nuremberg, Germany).
next prev parent reply other threads:[~2019-08-31 10:53 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20190825102322.19558.22771@vcs0.savannah.gnu.org>
[not found] ` <20190825102323.5080620CD5@vcs0.savannah.gnu.org>
2019-08-25 18:39 ` [Emacs-diffs] master 29d1c72: Introduce new value t for compilation-context-lines to eliminate scrolling Stefan Monnier
2019-08-25 19:06 ` Alan Mackenzie
2019-08-25 19:37 ` Eli Zaretskii
2019-08-26 16:26 ` Alan Mackenzie
2019-08-26 16:29 ` Eli Zaretskii
2019-08-27 20:05 ` Alan Mackenzie
2019-08-29 18:22 ` Eli Zaretskii
2019-08-31 10:53 ` Alan Mackenzie [this message]
2019-08-31 11:06 ` Eli Zaretskii
2019-09-02 19:34 ` Alan Mackenzie
2019-09-03 2:25 ` Eli Zaretskii
2019-09-08 9:41 ` Margins example in the Elisp manual. [Was: [Emacs-diffs] master 29d1c72: Introduce new value t for compilation-context-lines to eliminate scrolling] Alan Mackenzie
2019-09-08 17:06 ` Eli Zaretskii
2019-08-27 19:36 ` [Emacs-diffs] master 29d1c72: Introduce new value t for compilation-context-lines to eliminate scrolling Alan Mackenzie
2019-08-27 19:49 ` Eli Zaretskii
2019-08-27 20:07 ` Stefan Monnier
2019-08-27 19:59 ` Stefan Monnier
2019-08-31 11:31 ` Alan Mackenzie
2019-08-31 12:07 ` martin rudalics
2019-08-31 12:45 ` Alan Mackenzie
2019-08-25 20:54 ` Stefan Monnier
2019-08-27 19:46 ` Alan Mackenzie
2019-08-27 20:05 ` Stefan Monnier
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=20190831105316.GA4822@ACM \
--to=acm@muc.de \
--cc=eliz@gnu.org \
--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).