shr: fix too long lines in rendered buffers (Bug#21012)
Co-authored-by: Michael Heerdegen <michael_heerdegen@web.de> * lisp/net/shr.el (shr-insert-document, shr-fill-text): Correct calculation of available width. (shr-find-fill-point): Don't overflow window edge if shr-kinsoku-shorten is nil.
This commit is contained in:
parent
fd51234cd3
commit
45d0b3dd11
1 changed files with 42 additions and 8 deletions
|
@ -222,10 +222,29 @@ DOM should be a parse tree as generated by
|
|||
(if (not shr-use-fonts)
|
||||
shr-width
|
||||
(* shr-width (frame-char-width))))
|
||||
;; We need to adjust the available
|
||||
;; width for when the user disables
|
||||
;; the fringes, which will cause the
|
||||
;; display engine usurp one column for
|
||||
;; the continuation glyph.
|
||||
(if (not shr-use-fonts)
|
||||
(- (window-width) 2)
|
||||
(- (window-pixel-width)
|
||||
(* (frame-fringe-width) 2))))))
|
||||
(- (window-body-width) 1
|
||||
(if (and (null shr-width)
|
||||
(or (zerop
|
||||
(fringe-columns 'right))
|
||||
(zerop
|
||||
(fringe-columns 'left))))
|
||||
0
|
||||
1))
|
||||
(- (window-body-width nil t)
|
||||
(* 2 (frame-char-width))
|
||||
(if (and (null shr-width)
|
||||
(or (zerop
|
||||
(fringe-columns 'right))
|
||||
(zerop
|
||||
(fringe-columns 'left))))
|
||||
(* (frame-char-width) 2)
|
||||
0))))))
|
||||
(shr-descend dom)
|
||||
(shr-fill-lines start (point))
|
||||
(shr-remove-trailing-whitespace start (point))
|
||||
|
@ -439,8 +458,18 @@ size, and full-buffer size."
|
|||
(with-temp-buffer
|
||||
(let ((shr-indentation 0)
|
||||
(shr-start nil)
|
||||
(shr-internal-width (- (window-pixel-width)
|
||||
(* (frame-fringe-width) 2))))
|
||||
(shr-internal-width (- (window-body-width nil t)
|
||||
(* 2 (frame-char-width))
|
||||
;; Adjust the window width for when
|
||||
;; the user disables the fringes,
|
||||
;; which causes the display engine
|
||||
;; usurp one coplumn for the
|
||||
;; continuation glyph.
|
||||
(if (and (null shr-width)
|
||||
(or (zerop (fringe-columns 'right))
|
||||
(zerop (fringe-columns 'left))))
|
||||
(* (frame-char-width) 2)
|
||||
0))))
|
||||
(shr-insert text)
|
||||
(buffer-string)))))
|
||||
|
||||
|
@ -620,7 +649,9 @@ size, and full-buffer size."
|
|||
;; There's no breakable point, so we give it up.
|
||||
(let (found)
|
||||
(goto-char bp)
|
||||
(unless shr-kinsoku-shorten
|
||||
;; Don't overflow the window edge, even if
|
||||
;; shr-kinsoku-shorten is nil.
|
||||
(unless (or shr-kinsoku-shorten (null shr-width))
|
||||
(while (setq found (re-search-forward
|
||||
"\\(\\c>\\)\\| \\|\\c<\\|\\c|"
|
||||
(line-end-position) 'move)))
|
||||
|
@ -632,9 +663,12 @@ size, and full-buffer size."
|
|||
;; Don't put kinsoku-bol characters at the beginning of a line,
|
||||
;; or kinsoku-eol characters at the end of a line.
|
||||
(cond
|
||||
(shr-kinsoku-shorten
|
||||
;; Don't overflow the window edge, even if shr-kinsoku-shorten
|
||||
;; is nil.
|
||||
((or shr-kinsoku-shorten (null shr-width))
|
||||
(while (and (not (memq (preceding-char) (list ?\C-@ ?\n ? )))
|
||||
(shr-char-kinsoku-eol-p (preceding-char)))
|
||||
(or (shr-char-kinsoku-eol-p (preceding-char))
|
||||
(shr-char-kinsoku-bol-p (following-char))))
|
||||
(backward-char 1))
|
||||
(when (setq failed (<= (point) start))
|
||||
;; There's no breakable point that doesn't violate kinsoku,
|
||||
|
|
Loading…
Add table
Reference in a new issue