all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Michael Heerdegen <michael_heerdegen@web.de>
Cc: 21012@debbugs.gnu.org
Subject: bug#21012: 25.0.50; eww: last char of a line sometimes not fully visible
Date: Wed, 08 Jul 2015 23:03:17 +0300	[thread overview]
Message-ID: <83d202v2m2.fsf@gnu.org> (raw)
In-Reply-To: <87twteh65g.fsf@web.de>

> From: Michael Heerdegen <michael_heerdegen@web.de>
> Date: Wed, 08 Jul 2015 20:10:35 +0200
> 
> in eww, using shr-use-fonts -> t, for some lines, the last character is
> only partially visible.  Not a big deal, but distracting.

Is the partially-visible character always the last character on that
line, before the hard newline?  If so, I think I know where's the flaw
in the logic.  See below.

> --8<---------------cut here---------------start------------->8---
> (defun shr-insert-document (dom)
>   ...
>   (setq shr-content-cache nil)
>   (let ((start (point))
> 	(shr-start nil)
>         ...
> 	(shr-internal-width (or (and shr-width..3..)
> 				(if (not shr-use-fonts)
> 				    (- (window-width) 2)
> 				  (- (window-pixel-width) ; <---- here
> 				     (* (frame-fringe-width) 2))))))
>     (shr-descend dom)
>     (shr-fill-lines start (point))
>     (shr-remove-trailing-whitespace start (point))
>     (when shr-warning..1..)))
> --8<---------------cut here---------------end--------------->8---
> 
> AFAICT
> 
>   (- (window-pixel-width) (* (frame-fringe-width) 2))
> 
> is not the available width for text, it is a larger value including
> scroll bars etc.

Do you understand why the value of frame-fringe-width is multiplied by
2?

> When I change it to
> 
>   (window-body-width nil t)
> 
> this improves things.

I think that using window-body-width is indeed better here.  It will,
for example, account for display margins.

> --8<---------------cut here---------------start------------->8---
> (defun shr-vertical-motion (column)
>   (if (not shr-use-fonts)
>       (move-to-column column)
>     (unless (eolp)
>       (forward-char 1))
>     (vertical-motion (cons (/ column (frame-char-width)) 0)) ; <-- here
>     (unless (eolp)
>       (forward-char 1))))
> --8<---------------cut here---------------end--------------->8---
> 
> This function is used, among other places, to decide where to break
> lines in `shr-fill-line'.
> 
> Probably (/ column (frame-char-width)) can be too large if you are
> unlucky.

Sorry, I don't follow.  Can you elaborate on when this could happen?

> For testing I tried with this version:
> 
> --8<---------------cut here---------------start------------->8---
> (defun shr-vertical-motion (column)
>   (if (not shr-use-fonts)
>       (move-to-column column)
>     (unless (eolp)
>       (forward-char 1))
>     (end-of-visual-line)))
> --8<---------------cut here---------------end--------------->8---
> 
> This seems to fix this issue (together with the first change),

I don't see how this could be right, unless you only tested it with
text that is rendered using a single font.  move-to-column goes to the
Nth character starting from the left edge (forget tabs and
double-width CJK characters for a moment), so it will not DTRT when a
screen line displays characters of different size (as in with
different-size fonts).

The original code works in pixels (vertical-motion interprets the
column number as the number of pixels equivalent to that number of
frame's canonical characters), so it is not prone to this problem.

I believe the problem is that the code determines whether the line
should be wrapped based on this test:

    (shr-vertical-motion shr-internal-width)
    (when (looking-at " $")  <<<<<<<<<<<<<<<<<<<<<<<<<
      (delete-region (point) (line-end-position)))

IOW, it assumes that if the character at the goal pixel coordinate
immediately precedes the newline, the line doesn't need to be wrapped.
But that will fail if that last character is unusually wide.





  reply	other threads:[~2015-07-08 20:03 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-08 18:10 bug#21012: 25.0.50; eww: last char of a line sometimes not fully visible Michael Heerdegen
2015-07-08 20:03 ` Eli Zaretskii [this message]
2015-07-08 20:24   ` Michael Heerdegen
2015-07-09  2:38     ` Eli Zaretskii
2015-07-09 11:01       ` Michael Heerdegen
2015-07-09 14:43         ` Eli Zaretskii
2015-07-09 19:42           ` Michael Heerdegen
2015-07-09 15:34       ` Eli Zaretskii
2015-07-09 20:06         ` Michael Heerdegen
2015-07-10  6:03           ` Eli Zaretskii
2015-07-10 12:55             ` Michael Heerdegen
2015-07-10 13:06               ` Eli Zaretskii
2015-07-10 14:16                 ` Michael Heerdegen
2015-07-10 14:43                   ` Eli Zaretskii
2015-07-10 18:04                     ` Michael Heerdegen
2015-07-10 18:45                       ` Eli Zaretskii
2015-07-10 19:19                         ` Michael Heerdegen
2015-07-10 19:31                           ` Eli Zaretskii
2015-07-11 12:02                             ` Michael Heerdegen
2015-07-11 13:45                               ` Eli Zaretskii
2015-07-20 16:33                                 ` Michael Heerdegen
2015-07-20 16:34                                   ` Eli Zaretskii
2015-07-21 18:49                                     ` Michael Heerdegen
2015-09-25  4:00                                       ` Katsumi Yamaoka
2015-09-25 14:45                                         ` Michael Heerdegen
2015-09-28 21:30                                           ` Michael Heerdegen
2015-09-29  5:37                                             ` Eli Zaretskii
2015-10-03  8:08                                               ` Michael Heerdegen
2015-10-03  9:42                                                 ` Eli Zaretskii
2015-10-03 12:41                                                   ` Michael Heerdegen
2015-10-04  6:31                                                     ` Michael Heerdegen
2015-10-04  7:09                                                       ` Eli Zaretskii
2015-10-04  7:11                                                       ` Michael Heerdegen
2015-10-04  7:39                                                         ` Michael Heerdegen
2015-10-04  8:49                                                           ` Eli Zaretskii
2015-10-04 10:18                                                             ` Michael Heerdegen
2015-07-08 20:31   ` Michael Heerdegen
2015-10-07  6:34 ` bug#21012: Close Michael Heerdegen

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=83d202v2m2.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=21012@debbugs.gnu.org \
    --cc=michael_heerdegen@web.de \
    /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.