all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Yuri Khan <yuri.v.khan@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: "help-gnu-emacs@gnu.org" <help-gnu-emacs@gnu.org>
Subject: Re: Scrolling jumpy when line-spacing > 0
Date: Sat, 22 Apr 2017 00:58:08 +0700	[thread overview]
Message-ID: <CAP_d_8UGSX1fDVSwxFeRj6NkrYwrxt5rtjUK=AxXXQ1yZAwoDw@mail.gmail.com> (raw)
In-Reply-To: <83inlxako6.fsf@gnu.org>

On Fri, Apr 21, 2017 at 9:40 PM, Eli Zaretskii <eliz@gnu.org> wrote:

> (Why do people report bugs here, rather than with report-emacs-bug?)

To check if that is indeed a bug worth reporting, or if it is already
known, or even already fixed?

> On the master branch, when you click on the bottom line of
> the window, which is only partially visible in the above scenario,
> Emacs scrolls the window half-window up. To be able to put point on
> the bottom line, you will need to set window-resize-pixelwise non-nil,
> and drag the mode line down pixel by pixel until Emacs lets you put
> point there.

Which point is that? When the whole additional spacing is visible?

As a user, I’d expect that additional spacing does not count toward
whether the line is considered visible.

> Once this happens, "M-: (scroll-up 1) RET" produces the
> effect you expected.

Thank you.

> Doesn't pos-visible-in-window-p allow you to compute this more
> elegantly, without moving point at all?

I was in the middle of a $DAYJOB task, and reached for the quickest fix.

But no, not really. On the contrary, I am compelled to add more
kludges^W idiosyncratic code.

There are two special cases. One when the point is initially in the
bottommost visible line whose additional spacing is outside view; in
this case, (scroll-up 1) would cause the jump. This can indeed be
detected with (pos-visible-in-window-p) returning nil.

The other special case is when the point is in the topmost visible
line. In this case, (scroll-up 1) is forced to move the point into
view. The point is moved to the beginning of the new topmost visible
line, even if it was in the middle of the line initially. Here I want
behavior equivalent to (next-line) followed by (scroll-up), i.e. to
keep column position.

I see no practical way to detect this condition without moving point.
The easiest that comes to mind is to check if the position one visual
line up from point is outside view.

Factoring out all relevant special case detection, I end up with this:

(defun yk-scroll--in-bottommost-line ()
  (not (pos-visible-in-window-p)))
(defun yk-scroll--in-topmost-line ()
  (save-excursion
    (let ((line-move-visual t))
      (previous-line))
    (not (pos-visible-in-window-p))))
(defun yk-scroll-up ()
  (interactive)
  (cond
   ((yk-scroll--in-bottommost-line)
    (save-excursion
      (previous-line)
      (scroll-up 1)))
   ((yk-scroll--in-topmost-line)
    (let ((line-move-visual t))
      (next-line))
    (scroll-up 1))
   (t (scroll-up 1))))
(defun yk-scroll-down ()
  (interactive)
  (cond
   ((yk-scroll--in-bottommost-line)
    (previous-line)
    (scroll-down 1))
   (t (scroll-down 1))))



  reply	other threads:[~2017-04-21 17:58 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-21 10:13 Scrolling jumpy when line-spacing > 0 Yuri Khan
2017-04-21 11:03 ` Yuri Khan
2017-04-21 14:44   ` Eli Zaretskii
2017-04-21 14:40 ` Eli Zaretskii
2017-04-21 17:58   ` Yuri Khan [this message]
2017-04-21 18:56     ` Eli Zaretskii
2017-04-21 19:30       ` Yuri Khan
2017-04-22  7:38         ` Eli Zaretskii

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='CAP_d_8UGSX1fDVSwxFeRj6NkrYwrxt5rtjUK=AxXXQ1yZAwoDw@mail.gmail.com' \
    --to=yuri.v.khan@gmail.com \
    --cc=eliz@gnu.org \
    --cc=help-gnu-emacs@gnu.org \
    /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.