From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.help Subject: Re: Set-window-vscroll sometimes doesn't work Date: Sun, 18 Oct 2020 17:34:21 +0300 Message-ID: <83eelvsivm.fsf@gnu.org> References: <72B62847-3F35-412A-9F74-88442A936B19@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="30865"; mail-complaints-to="usenet@ciao.gmane.io" To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Sun Oct 18 16:34:43 2020 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kU9lj-0007ug-Az for geh-help-gnu-emacs@m.gmane-mx.org; Sun, 18 Oct 2020 16:34:43 +0200 Original-Received: from localhost ([::1]:51604 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kU9li-0004yL-AP for geh-help-gnu-emacs@m.gmane-mx.org; Sun, 18 Oct 2020 10:34:42 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:39932) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kU9lL-0004xs-9s for help-gnu-emacs@gnu.org; Sun, 18 Oct 2020 10:34:19 -0400 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]:44043) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kU9lK-0002dP-Vm for help-gnu-emacs@gnu.org; Sun, 18 Oct 2020 10:34:18 -0400 Original-Received: from [176.228.60.248] (port=4066 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1kU9lK-0006Fo-Ch for help-gnu-emacs@gnu.org; Sun, 18 Oct 2020 10:34:18 -0400 In-Reply-To: <72B62847-3F35-412A-9F74-88442A936B19@gmail.com> (message from Yuan Fu on Sat, 17 Oct 2020 20:35:00 -0400) X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:124539 Archived-At: > From: Yuan Fu > Date: Sat, 17 Oct 2020 20:35:00 -0400 > > Normally if you scroll back onto an image, the image appears completely. I want to instead only show part of the image, like what pixel scrolling would do. If everything works as expected I should only see the bottom of the image, instead I see the whole image. > > It seems to be because (set-window-vscroll nil (- img-height (frame-char-height)) t) didn’t take effect, if you call that again with M-: or wrap it in (run-with-timer), then it works as expected. > > Is this caused by some redisplay optimization or something? No. The problem is in your code. First, you use set-window-start and scroll-down, both of which tramp window-vscroll (as you probably realize if you think about what those do). And after all that, you need one "normal" redisplay cycle before you can set the vscroll, so, for example, a single change below should make the code work as you expect. (progn (switch-to-buffer (get-buffer-create "test")) (erase-buffer) (insert "\n\n") (insert-image (create-image "abby road.jpeg" nil nil :scale 0.1) "x") (insert "\n") (let ((after-img (point))) (set-window-start nil (point)) (scroll-down 1) (sit-for 0) ;; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< (let* ((img (plist-get (text-properties-at (window-start)) 'display)) (img-height (cdr (image-size img t)))) (set-window-vscroll nil (- img-height (frame-char-height)) t))))