unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#23813: 24.5; undo warning while find-file
@ 2016-06-21 11:48 ynyaaa
  2016-07-09 12:27 ` Eli Zaretskii
  0 siblings, 1 reply; 3+ messages in thread
From: ynyaaa @ 2016-06-21 11:48 UTC (permalink / raw)
  To: 23813


When `post-read-conversion' changes the buffer many times,
undo warning buffer popups.
This may occur while `find-file', even though undo info is not needed.

(let ((tmpfile "/tmp/test-hz.txt"))
  (with-temp-buffer
    (dotimes (i 100000) (insert "~{R;~}\n"))
    (write-region (point-min) (point-max) tmpfile)
    (let ((coding-system-for-read 'hz))
      (find-file tmpfile))))

Evaluating the form above, *Warnings* buffer shows this text.
  Warning (undo): Buffer `test-hz.txt' undo info was 12765470 bytes long.
  The undo info was discarded because it exceeded `undo-outer-limit'.
  
  This is normal if you executed a command that made a huge change
  to the buffer.  In that case, to prevent similar problems in the
  future, set `undo-outer-limit' to a value that is large enough to
  cover the maximum size of normal changes you expect a single
  command to make, but not so large that it might exceed the
  maximum memory allotted to Emacs.
  
  If you did not execute any such command, the situation is
  probably due to a bug and you should report it.
  
  You can disable the popping up of this buffer by adding the entry
  (undo discard-info) to the user option `warning-suppress-types',
  which is defined in the `warnings' library.




In GNU Emacs 24.5.1 (i686-pc-mingw32)
 of 2015-04-11 on LEG570
Windowing system distributor `Microsoft Corp.', version 6.0.6002
Configured using:
 `configure --prefix=/c/usr --host=i686-pc-mingw32'

Important settings:
  value of $LANG: JPN
  locale-coding-system: cp932

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent messages:

Load-path shadows:
None found.

Features:
(shadow sort gnus-util mail-extr emacsbug message format-spec rfc822 mml
mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev
gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util
mail-prsvr mail-utils help-mode easymenu advice help-fns time-date
japan-util tooltip electric uniquify ediff-hook vc-hooks lisp-float-type
mwheel dos-w32 ls-lisp w32-common-fns disp-table w32-win w32-vars
tool-bar dnd fontset image regexp-opt fringe tabulated-list newcomment
lisp-mode prog-mode register page menu-bar rfn-eshadow timer select
scroll-bar mouse jit-lock font-lock syntax facemenu font-core frame cham
georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese hebrew greek romanian slovak czech european ethiopic
indian cyrillic chinese case-table epa-hook jka-cmpr-hook help simple
abbrev minibuffer nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote make-network-process
w32notify w32 multi-tty emacs)

Memory information:
((conses 8 78016 6918)
 (symbols 32 17691 0)
 (miscs 32 35 158)
 (strings 16 11326 4298)
 (string-bytes 1 284552)
 (vectors 8 10542)
 (vector-slots 4 465337 5130)
 (floats 8 58 110)
 (intervals 28 210 0)
 (buffers 508 13))





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

* bug#23813: 24.5; undo warning while find-file
  2016-06-21 11:48 bug#23813: 24.5; undo warning while find-file ynyaaa
@ 2016-07-09 12:27 ` Eli Zaretskii
  2016-07-30  8:25   ` Eli Zaretskii
  0 siblings, 1 reply; 3+ messages in thread
From: Eli Zaretskii @ 2016-07-09 12:27 UTC (permalink / raw)
  To: ynyaaa, Phillip Lord; +Cc: 23813

> From: ynyaaa@gmail.com
> Date: Tue, 21 Jun 2016 20:48:30 +0900
> 
> When `post-read-conversion' changes the buffer many times,
> undo warning buffer popups.
> This may occur while `find-file', even though undo info is not needed.
> 
> (let ((tmpfile "/tmp/test-hz.txt"))
>   (with-temp-buffer
>     (dotimes (i 100000) (insert "~{R;~}\n"))
>     (write-region (point-min) (point-max) tmpfile)
>     (let ((coding-system-for-read 'hz))
>       (find-file tmpfile))))
> 
> Evaluating the form above, *Warnings* buffer shows this text.
>   Warning (undo): Buffer `test-hz.txt' undo info was 12765470 bytes long.
>   The undo info was discarded because it exceeded `undo-outer-limit'.
>   
>   This is normal if you executed a command that made a huge change
>   to the buffer.  In that case, to prevent similar problems in the
>   future, set `undo-outer-limit' to a value that is large enough to
>   cover the maximum size of normal changes you expect a single
>   command to make, but not so large that it might exceed the
>   maximum memory allotted to Emacs.
>   
>   If you did not execute any such command, the situation is
>   probably due to a bug and you should report it.
>   
>   You can disable the popping up of this buffer by adding the entry
>   (undo discard-info) to the user option `warning-suppress-types',
>   which is defined in the `warnings' library.

Phillip, what do you think about the patch below?

diff --git a/src/coding.c b/src/coding.c
index 29c90f0..b959f7d 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -7851,6 +7851,15 @@ code_conversion_save (bool with_work_buf, bool multibyte)
   return workbuf;
 }
 
+static void
+coding_restore_undo_list (Lisp_Object arg)
+{
+  Lisp_Object undo_list = XCAR (arg);
+  struct buffer *buf = XBUFFER (XCDR (arg));
+
+  bset_undo_list (buf, undo_list);
+}
+
 void
 decode_coding_gap (struct coding_system *coding,
 		   ptrdiff_t chars, ptrdiff_t bytes)
@@ -7963,13 +7972,19 @@ decode_coding_gap (struct coding_system *coding,
     {
       ptrdiff_t prev_Z = Z, prev_Z_BYTE = Z_BYTE;
       Lisp_Object val;
+      Lisp_Object undo_list = BVAR (current_buffer, undo_list);
+      ptrdiff_t count1 = SPECPDL_INDEX ();
 
+      record_unwind_protect (coding_restore_undo_list,
+			     Fcons (undo_list, Fcurrent_buffer ()));
+      bset_undo_list (current_buffer, Qt);
       TEMP_SET_PT_BOTH (coding->dst_pos, coding->dst_pos_byte);
       val = call1 (CODING_ATTR_POST_READ (attrs),
 		   make_number (coding->produced_char));
       CHECK_NATNUM (val);
       coding->produced_char += Z - prev_Z;
       coding->produced += Z_BYTE - prev_Z_BYTE;
+      unbind_to (count1, Qnil);
     }
 
   unbind_to (count, Qnil);
@@ -8110,13 +8125,19 @@ decode_coding_object (struct coding_system *coding,
     {
       ptrdiff_t prev_Z = Z, prev_Z_BYTE = Z_BYTE;
       Lisp_Object val;
+      Lisp_Object undo_list = BVAR (current_buffer, undo_list);
+      ptrdiff_t count1 = SPECPDL_INDEX ();
 
+      record_unwind_protect (coding_restore_undo_list,
+			     Fcons (undo_list, Fcurrent_buffer ()));
+      bset_undo_list (current_buffer, Qt);
       TEMP_SET_PT_BOTH (coding->dst_pos, coding->dst_pos_byte);
       val = safe_call1 (CODING_ATTR_POST_READ (attrs),
 			make_number (coding->produced_char));
       CHECK_NATNUM (val);
       coding->produced_char += Z - prev_Z;
       coding->produced += Z_BYTE - prev_Z_BYTE;
+      unbind_to (count1, Qnil);
     }
 
   if (EQ (dst_object, Qt))





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

* bug#23813: 24.5; undo warning while find-file
  2016-07-09 12:27 ` Eli Zaretskii
@ 2016-07-30  8:25   ` Eli Zaretskii
  0 siblings, 0 replies; 3+ messages in thread
From: Eli Zaretskii @ 2016-07-30  8:25 UTC (permalink / raw)
  To: ynyaaa; +Cc: 23813-done, phillip.lord

> Date: Sat, 09 Jul 2016 15:27:47 +0300
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: 23813@debbugs.gnu.org
> 
> > From: ynyaaa@gmail.com
> > Date: Tue, 21 Jun 2016 20:48:30 +0900
> > 
> > When `post-read-conversion' changes the buffer many times,
> > undo warning buffer popups.
> > This may occur while `find-file', even though undo info is not needed.
> > 
> > (let ((tmpfile "/tmp/test-hz.txt"))
> >   (with-temp-buffer
> >     (dotimes (i 100000) (insert "~{R;~}\n"))
> >     (write-region (point-min) (point-max) tmpfile)
> >     (let ((coding-system-for-read 'hz))
> >       (find-file tmpfile))))
> > 
> > Evaluating the form above, *Warnings* buffer shows this text.
> >   Warning (undo): Buffer `test-hz.txt' undo info was 12765470 bytes long.
> >   The undo info was discarded because it exceeded `undo-outer-limit'.
> >   
> >   This is normal if you executed a command that made a huge change
> >   to the buffer.  In that case, to prevent similar problems in the
> >   future, set `undo-outer-limit' to a value that is large enough to
> >   cover the maximum size of normal changes you expect a single
> >   command to make, but not so large that it might exceed the
> >   maximum memory allotted to Emacs.
> >   
> >   If you did not execute any such command, the situation is
> >   probably due to a bug and you should report it.
> >   
> >   You can disable the popping up of this buffer by adding the entry
> >   (undo discard-info) to the user option `warning-suppress-types',
> >   which is defined in the `warnings' library.
> 
> Phillip, what do you think about the patch below?

No comments, so I pushed the proposed change to the master branch, and
I'm marking this bug done.

Thanks.





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

end of thread, other threads:[~2016-07-30  8:25 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-21 11:48 bug#23813: 24.5; undo warning while find-file ynyaaa
2016-07-09 12:27 ` Eli Zaretskii
2016-07-30  8:25   ` Eli Zaretskii

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