From 872617ad730906f9437b90c3b90af2e2458f00f6 Mon Sep 17 00:00:00 2001 From: Lars Magne Ingebrigtsen Date: Mon, 15 Dec 2014 06:05:05 +0100 Subject: [PATCH 1/2] * net/shr.el (shr-fold-text): Don't bug out on zero-length text. --- lisp/ChangeLog | 4 ++++ lisp/net/shr.el | 16 +++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8a0d5181bae..364511c2c15 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2014-12-15 Lars Magne Ingebrigtsen + + * net/shr.el (shr-fold-text): Don't bug out on zero-length text. + 2014-12-14 Alan Mackenzie * lisp/cus-start.el (all): Add fast-but-imprecise-scrolling. diff --git a/lisp/net/shr.el b/lisp/net/shr.el index 6e06a76bf2a..387bb024a52 100644 --- a/lisp/net/shr.el +++ b/lisp/net/shr.el @@ -414,13 +414,15 @@ size, and full-buffer size." (cdr (assq 'background-color shr-stylesheet)))))))) (defun shr-fold-text (text) - (with-temp-buffer - (let ((shr-indentation 0) - (shr-state nil) - (shr-start nil) - (shr-internal-width (window-width))) - (shr-insert text) - (buffer-string)))) + (if (zerop (length text)) + text + (with-temp-buffer + (let ((shr-indentation 0) + (shr-state nil) + (shr-start nil) + (shr-internal-width (window-width))) + (shr-insert text) + (buffer-string))))) (define-inline shr-char-breakable-p (char) "Return non-nil if a line can be broken before and after CHAR." From e2815bfe2a1e4d5a21d6b6378ebc2108d4d104ab Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 15 Dec 2014 00:00:50 -0800 Subject: [PATCH 2/2] Correct same_at_end when restoring window points * fileio.c (Finsert_file_contents): Compute same_at_end character position using the old buffer size, not the new one, since restore_window_points wants the old size. Fixes: debbugs:19161 --- src/ChangeLog | 8 ++++++++ src/fileio.c | 13 +++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 46bf2801849..5ce56f4df04 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2014-12-15 Paul Eggert + + Correct same_at_end when restoring window points + * fileio.c (Finsert_file_contents): Compute same_at_end character + position using the old buffer size, not the new one, since + restore_window_points wants the old size. + Fixes: debbugs:19161 + 2014-12-14 Alan Mackenzie New feature optionally to accelerate auto-repeated scrolling. diff --git a/src/fileio.c b/src/fileio.c index 83b4954b745..39514ee18e6 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -3522,6 +3522,9 @@ by calling `format-decode', which see. */) bytes and BEG and END count bytes. */ ptrdiff_t same_at_start = BEGV_BYTE; ptrdiff_t same_at_end = ZV_BYTE; + /* SAME_AT_END_CHARPOS counts characters, because + restore_window_points needs the old character count. */ + ptrdiff_t same_at_end_charpos = ZV; if (current_buffer->base_buffer && ! NILP (visit)) error ("Cannot do file visiting in an indirect buffer"); @@ -3943,6 +3946,7 @@ by calling `format-decode', which see. */) + (! NILP (end) ? end_offset : st.st_size) - ZV_BYTE)); if (overlap > 0) same_at_end += overlap; + same_at_end_charpos = BYTE_TO_CHAR (same_at_end); /* Arrange to read only the nonmatching middle part of the file. */ beg_offset += same_at_start - BEGV_BYTE; @@ -3950,7 +3954,7 @@ by calling `format-decode', which see. */) invalidate_buffer_caches (current_buffer, BYTE_TO_CHAR (same_at_start), - BYTE_TO_CHAR (same_at_end)); + same_at_end_charpos); del_range_byte (same_at_start, same_at_end, 0); /* Insert from the file at the proper position. */ temp = BYTE_TO_CHAR (same_at_start); @@ -4099,6 +4103,7 @@ by calling `format-decode', which see. */) overlap = same_at_start - BEGV_BYTE - (same_at_end + inserted - ZV_BYTE); if (overlap > 0) same_at_end += overlap; + same_at_end_charpos = BYTE_TO_CHAR (same_at_end); /* If display currently starts at beginning of line, keep it that way. */ @@ -4114,7 +4119,7 @@ by calling `format-decode', which see. */) { invalidate_buffer_caches (current_buffer, BYTE_TO_CHAR (same_at_start), - BYTE_TO_CHAR (same_at_end)); + same_at_end_charpos); del_range_byte (same_at_start, same_at_end, 0); temp = GPT; eassert (same_at_start == GPT_BYTE); @@ -4122,7 +4127,7 @@ by calling `format-decode', which see. */) } else { - temp = BYTE_TO_CHAR (same_at_start); + temp = same_at_end_charpos; } /* Insert from the file at the proper position. */ SET_PT_BOTH (temp, same_at_start); @@ -4405,7 +4410,7 @@ by calling `format-decode', which see. */) if (inserted > 0) restore_window_points (window_markers, inserted, BYTE_TO_CHAR (same_at_start), - BYTE_TO_CHAR (same_at_end)); + same_at_end_charpos); if (!NILP (visit)) {