unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: npostavs@users.sourceforge.net
Cc: 24633@debbugs.gnu.org
Subject: bug#24633: highlight-region func using (window-hscroll) in :align-to spec can cause inf loop
Date: Sat, 08 Oct 2016 21:01:46 +0300	[thread overview]
Message-ID: <837f9ihg8l.fsf@gnu.org> (raw)
In-Reply-To: <874m4mwyj2.fsf@users.sourceforge.net> (npostavs@users.sourceforge.net)

> From: npostavs@users.sourceforge.net
> Cc: 24633@debbugs.gnu.org
> Date: Sat, 08 Oct 2016 13:17:37 -0400
> 
> The high-level idea is to have a line from going from the left to the
> right edge of the window.  Most of the line is composed of an overlay
> specifying the :underline text property.  The last bit of it, from the
> end of the text to the right edge of the screen, is created by an
> underlined after-string space which uses :align-to to reach the right
> edge of the screen.
> 
> Using :align-to 'right or :align-to `((,(window-body-width nil t))) does
> not account for horizontal scrolling (i.e., the line ends at 80 columns,
> even when the 80th column is scrolled to the left).  So I tried
> 
>     `(+ ,(window-hscroll) (0 . right))
>     `(+ ,(window-hscroll) (,(window-body-width nil t))) ; initially this
> 
> to make up for it, which turns out to cause this strange looping.

Automatic hscrolling is based on length of point's line at the end of
redisplaying a window.  Here, "line length" means the horizontal space
required for displaying all the glyphs of the line, which includes the
glyphs that come from the after-string.  Since you extend your
after-string each time the window is hscrolled, you in effect enlarge
the line each time the display engine hscrolls the window, which
causes an endless loop.

Can you restrict the after-string's length so it always ends at the
last character of the line, or some fixed number of columns afterward?

> >  In particular, I don't
> > understand the align-to expression: e.g., window-hscroll returns its
> > value in columns, while align-to needs pixels, AFAIU.
> 
> According to `(elisp) Pixel Specification',
> 
>        The form NUM specifies a fraction of the default frame font height
>     or width.  The form `(NUM)' specifies an absolute number of pixels.

I admire your courage in reading that documentation and then writing
stuff like the above, which the documentation doesn't mention even
remotely.





  reply	other threads:[~2016-10-08 18:01 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-07  1:01 bug#24633: highlight-region func using (window-hscroll) in :align-to spec can cause inf loop npostavs
2016-10-08 11:15 ` Eli Zaretskii
2016-10-08 17:17   ` npostavs
2016-10-08 18:01     ` Eli Zaretskii [this message]
2016-10-08 19:18       ` npostavs
2016-10-08 19:57         ` Eli Zaretskii
2016-10-09 12:29           ` npostavs
2016-10-09 12:42             ` Eli Zaretskii
2016-10-22 19:27               ` npostavs
2016-10-22 19:41                 ` Eli Zaretskii
2016-10-22 20:43                   ` npostavs

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=837f9ihg8l.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=24633@debbugs.gnu.org \
    --cc=npostavs@users.sourceforge.net \
    /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).