unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#29734: 27.0.50; shr-insert-document modify point of buffer in corner case
@ 2017-12-16 12:47 OGAWA Hirofumi
  2017-12-16 14:12 ` Eli Zaretskii
  0 siblings, 1 reply; 5+ messages in thread
From: OGAWA Hirofumi @ 2017-12-16 12:47 UTC (permalink / raw)
  To: 29734

Hi,

The following is the reproduce code of issue,

(let ((buf (get-buffer-create "test-case")))
  (display-buffer buf)
  (with-current-buffer buf
    (erase-buffer)
    (insert "1\n")
    (shr-insert-document
     '(html nil (body nil (a ((href . "http://example.org")) "example"))))
    (insert "\n")
    (insert "2\n")))

and expected result is

	1
	example
	2

But actual result is

	example
	2
	1

Like above example, `shr-insert-document' modify the point
of "test-case" buffer. (display-buffer is important to
reproduce. If commented out display-buffer line, the issue
disappear.)

With some debugging I noticed, the usage of `with-temp-buffer' of
`shr-string-pixel-width' modify the point. Simplified version of
`shr-string-pixel-width' to reproduce the issue is the following,

    (with-temp-buffer
      (save-window-excursion
	(set-window-buffer nil (current-buffer))))

In this conbination, `with-temp-buffer' seems to fail to restore
the point.

So the patch seems to save and restore the point correctly.

Thanks.

---

 lisp/net/shr.el |    7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff -puN lisp/net/shr.el~shr-fix-point-modification lisp/net/shr.el
--- emacs/lisp/net/shr.el~shr-fix-point-modification	2017-12-16 07:32:47.777230050 +0900
+++ emacs-hirofumi/lisp/net/shr.el	2017-12-16 07:35:48.083847035 +0900
@@ -591,9 +591,10 @@ size, and full-buffer size."
 (defun shr-string-pixel-width (string)
   (if (not shr-use-fonts)
       (length string)
-    (with-temp-buffer
-      (insert string)
-      (shr-pixel-column))))
+    (save-excursion
+      (with-temp-buffer
+        (insert string)
+        (shr-pixel-column)))))
 
 (defsubst shr--translate-insertion-chars ()
   ;; Remove soft hyphens.
_



In GNU Emacs 27.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.24)
 of 2017-12-12 built on devron
Repository revision: 786907238bcb86ab9e0e2e9ebcc91c52a6eb024c
Windowing system distributor 'The X.Org Foundation', version 11.0.11905000
System Description:	Debian GNU/Linux testing (buster)

Configured using:
 'configure --libexecdir=/usr/local/lib --with-x --with-x-toolkit=gtk3
 --without-xim --with-xpm --with-jpeg --with-tiff --with-gif --with-png
 --with-rsvg --with-dbus --with-wide-int --with-modules'

Configured features:
XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND DBUS GSETTINGS NOTIFY ACL
LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11 MODULES JSON LCMS2

Important settings:
  value of $LANG: ja_JP.UTF-8
  value of $XMODIFIERS: @im=ibus
  locale-coding-system: utf-8-unix
-- 
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#29734: 27.0.50; shr-insert-document modify point of buffer in corner case
  2017-12-16 12:47 bug#29734: 27.0.50; shr-insert-document modify point of buffer in corner case OGAWA Hirofumi
@ 2017-12-16 14:12 ` Eli Zaretskii
  2017-12-16 16:59   ` OGAWA Hirofumi
  0 siblings, 1 reply; 5+ messages in thread
From: Eli Zaretskii @ 2017-12-16 14:12 UTC (permalink / raw)
  To: OGAWA Hirofumi; +Cc: 29734

> From: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
> Date: Sat, 16 Dec 2017 21:47:07 +0900
> 
> (let ((buf (get-buffer-create "test-case")))
>   (display-buffer buf)
>   (with-current-buffer buf
>     (erase-buffer)
>     (insert "1\n")
>     (shr-insert-document
>      '(html nil (body nil (a ((href . "http://example.org")) "example"))))
>     (insert "\n")
>     (insert "2\n")))
> 
> and expected result is
> 
> 	1
> 	example
> 	2
> 
> But actual result is
> 
> 	example
> 	2
> 	1
> 
> Like above example, `shr-insert-document' modify the point
> of "test-case" buffer. (display-buffer is important to
> reproduce. If commented out display-buffer line, the issue
> disappear.)
> 
> With some debugging I noticed, the usage of `with-temp-buffer' of
> `shr-string-pixel-width' modify the point. Simplified version of
> `shr-string-pixel-width' to reproduce the issue is the following,
> 
>     (with-temp-buffer
>       (save-window-excursion
> 	(set-window-buffer nil (current-buffer))))
> 
> In this conbination, `with-temp-buffer' seems to fail to restore
> the point.
> 
> So the patch seems to save and restore the point correctly.

Thanks.

I think save-excursion is too heavy in this case, so I installed a
change to only preserve point.

Please try the recent emacs-26 branch, it should now be fixed there.





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#29734: 27.0.50; shr-insert-document modify point of buffer in corner case
  2017-12-16 14:12 ` Eli Zaretskii
@ 2017-12-16 16:59   ` OGAWA Hirofumi
  2017-12-16 17:18     ` Eli Zaretskii
  0 siblings, 1 reply; 5+ messages in thread
From: OGAWA Hirofumi @ 2017-12-16 16:59 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 29734

Eli Zaretskii <eliz@gnu.org> writes:

> I think save-excursion is too heavy in this case, so I installed a
> change to only preserve point.
>
> Please try the recent emacs-26 branch, it should now be fixed there.

Thanks. It works for me.
-- 
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#29734: 27.0.50; shr-insert-document modify point of buffer in corner case
  2017-12-16 16:59   ` OGAWA Hirofumi
@ 2017-12-16 17:18     ` Eli Zaretskii
  2017-12-18  2:53       ` Katsumi Yamaoka
  0 siblings, 1 reply; 5+ messages in thread
From: Eli Zaretskii @ 2017-12-16 17:18 UTC (permalink / raw)
  To: OGAWA Hirofumi; +Cc: 29734-done

> From: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
> Cc: 29734@debbugs.gnu.org
> Date: Sun, 17 Dec 2017 01:59:50 +0900
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > I think save-excursion is too heavy in this case, so I installed a
> > change to only preserve point.
> >
> > Please try the recent emacs-26 branch, it should now be fixed there.
> 
> Thanks. It works for me.

Thanks for testing, closing.





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#29734: 27.0.50; shr-insert-document modify point of buffer in corner case
  2017-12-16 17:18     ` Eli Zaretskii
@ 2017-12-18  2:53       ` Katsumi Yamaoka
  0 siblings, 0 replies; 5+ messages in thread
From: Katsumi Yamaoka @ 2017-12-18  2:53 UTC (permalink / raw)
  To: eliz; +Cc: 29734, hirofumi

On Sat, 16 Dec 2017 19:18:48 +0200, Eli Zaretskii wrote:
> Thanks for testing, closing.

The function `shr-string-pixel-width' should return pixel-width,
not a position.  Fixed in emacs-26.





^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-12-18  2:53 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-12-16 12:47 bug#29734: 27.0.50; shr-insert-document modify point of buffer in corner case OGAWA Hirofumi
2017-12-16 14:12 ` Eli Zaretskii
2017-12-16 16:59   ` OGAWA Hirofumi
2017-12-16 17:18     ` Eli Zaretskii
2017-12-18  2:53       ` Katsumi Yamaoka

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).