Subject: SHR leaves too much trailing whitespace

From: Stefan Monnier <[email-masked]>
Date: Fri, 03 Feb 2012 13:34:25 -0500

Package: Emacs
Version: 24.0.92

SHR usually does a pretty good job of showing me the useful content of
those obnoxious HTML email, but occasionally the result is hard to read.
One fairly common case is that every text line is much longer than my
window's with (like twice as long, for instance), although most of it is
whitespace (I suspect it's due to some horrendous HTML markup using
something like tables to force a particular layout that only works for
1280x800 screens).  So I think we should trim all trailing whitespace
after rendering, which will solve at least some of those problems.

        Stefan

In GNU Emacs 24.0.92.1 (i686-pc-linux-gnu, GTK+ Version 2.24.8)
 of 2012-01-17 on pastel
Windowing system distributor `The X.Org Foundation', version 11.0.11103901
Configured using:
 `configure
 'CFLAGS=-Wall -Wno-pointer-sign -DUSE_LISP_UNION_TYPE -DSYNC_INPUT -DENABLE_CHECKING -DXASSERTS -DFONTSET_DEBUG -g -O0'
 '--with-tiff=no''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: fr_CH.UTF-8
  value of $XMODIFIERS: nil
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t

Major mode: InactiveMinibuffer

Minor modes in effect:
  shell-dirtrack-mode: t
  diff-auto-refine-mode: t
  electric-pair-mode: t
  electric-indent-mode: t
  url-handler-mode: t
  global-reveal-mode: t
  reveal-mode: t
  auto-insert-mode: t
  savehist-mode: t
  minibuffer-electric-default-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
<right> <down> <left> <left> <left> <left> <down> <left> 
<return> C-e C-x C-s <select-window> <help-echo> <select-window> 
<select-window> <switch-frame> <switch-frame> <select-window> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<select-window> <select-window> <select-window> <select-window> 
<switch-frame> <switch-frame> <select-window> <select-window> 
<select-window> <select-window> <select-window> <select-window> 
<select-window> <select-window> <select-window> <select-window> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<select-window> <select-window> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <select-window> <select-window> 
<select-window> <select-window> <select-window> <select-window> 
<select-window> <select-window> <switch-frame> <switch-frame> 
<select-window> <select-window> <select-window> <select-window> 
<switch-frame> <help-echo> <switch-frame> <switch-frame> 
<switch-frame> <select-window> <select-window> <select-window> 
<help-echo> <select-window> C-a <up> <up> <up> <up> 
<up> <up> C-SPC <down> <down> <down> <down> <down> 
<down> <down> <down> <down> M-; C-x C-s C-c C-c <return> 
<tab> - > SPC <tab> C-a C-x C-s C-c C-c <return> <select-window> 
<select-window> <select-window> <help-echo> <select-window> 
<select-window> <select-window> <select-window> <help-echo> 
<select-window> <select-window> <select-window> <select-window> 
<help-echo> <switch-frame> <switch-frame> <select-window> 
<select-window> <select-window> <select-window> <select-window> 
<select-window> <help-echo> <select-window> <select-window> 
<switch-frame> <switch-frame> <select-window> <select-window> 
<help-echo> <select-window> <select-window> <select-window> 
<select-window> <select-window> <select-window> <help-echo> 
<switch-frame> <switch-frame> <select-window> <select-window> 
<select-window> <select-window> <select-window> <select-window> 
<switch-frame> <switch-frame> <select-window> <select-window> 
<select-window> <select-window> <select-window> <select-window> 
<select-window> <select-window> <switch-frame> <switch-frame> 
<select-window> <select-window> <select-window> <select-window> 
<select-window> <select-window> <select-window> <select-window> 
<help-echo> <select-window> <select-window> <switch-frame> 
<switch-frame> <select-window> <select-window> <select-window> 
<select-window> <help-echo> <select-window> <select-window> 
<help-echo> <select-window> <select-window> <help-echo> 
<select-window> <select-window> <select-window> <select-window> 
<switch-frame> <switch-frame> <select-window> <select-window> 
<select-window> <select-window> <select-window> <switch-frame> 
<switch-frame> <select-window> <select-window> <select-window> 
<help-echo> <select-window> <select-window> <help-echo> 
<select-window> <select-window> <select-window> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> f ~ / 
s / m / r e c <tab> <return> C-s s a u c i s s e C-s 
C-s C-s C-s C-a C-s p o i r e C-s C-s C-s C-s C-s C-s 
C-s C-s C-s C-s C-s C-a <up> <left> <right> <down> 
<down> <left> <right> <help-echo> <switch-frame> <switch-frame> 
<help-echo> <switch-frame> M-x r e p o - e m - b u 
<tab> <return>

Recent messages:
Warning: isearch-message-state is obsolete!
Mark saved where search started
Warning: isearch-success-state is obsolete! [2 times]
Warning: isearch-error-state is obsolete!
Warning: isearch-message-state is obsolete!
Warning: isearch-success-state is obsolete! [2 times]
Warning: isearch-error-state is obsolete!
Warning: isearch-message-state is obsolete!
Mark saved where search started
Warning: interactive-p is obsolete! [2 times]

Load-path shadows:
None found.

Features:
(typer-mode epa-file epa epg epg-config vc-dir descr-text informat
texinfo vc-sccs vc-svn vc-cvs vc-rcs cal-china lunar solar cal-dst
cal-bahai cal-islam cal-hebrew holidays hol-loaddefs cal-french
diary-lib diary-loaddefs cal-move cal-menu calendar cal-loaddefs sort
mail-extr message sendmail rfc822 mml mml-sec mm-decode mm-bodies
mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mail-utils
mailheader emacsbug sh-script conf-mode hideif cpp cmacexp cc-mode
cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars
cc-defs sgml-mode format-spec reftex-vcr reftex-dcr reftex reftex-vars
tex-mode latexenc bbdb-com mailabbrev bbdb timezone whitespace
autorevert doc-view jka-compr image-mode dired cl-specs xscheme trace
testcover scheme unsafep re-builder shadow inf-lisp ielm pp gmm-utils
ert find-func ewoc elp edebug cust-print repeat debug quail rect
multi-isearch dabbrev shell pcomplete vc ediff-merg ediff-diff
ediff-wind ediff-help ediff-util ediff-mult ediff-init ediff
vc-dispatcher executable copyright cus-edit cus-start cus-load wid-edit
smerge-mode newcomment diff-mode vc-bzr filecache mule-util caml tuareg
speedbar sb-image ezimage dframe skeleton compile comint ring derived
smie caml-help caml-types caml-emacs server noutline outline easy-mmode
flyspell ispell eldoc checkdoc regexp-opt thingatpt help-mode view
prog-mode load-dir electric url-handlers url-parse auth-source warnings
eieio byte-opt bytecomp byte-compile cconv macroexp assoc gnus-util
password-cache url-vars mm-util mail-prsvr reveal autoinsert uniquify
advice help-fns advice-preload time-date savehist minibuf-eldef
disp-table cl cl-loaddefs all-autoloads company-autoloads
debbugs-autoloads epoch-view-autoloads jgraph-mode-autoloads
js2-mode-autoloads lmc-autoloads load-dir-autoloads markchars-autoloads
minimap-autoloads muse-autoloads info easymenu oauth2-autoloads
quarter-plane-autoloads rainbow-mode-autoloads register-list-autoloads
sisu-mode-autoloads svg-clock-autoloads undo-tree-autoloads
uni-confusables-autoloads windresize-autoloads package tabulated-list
proof-site proof-autoloads pg-vars bbdb-autoloads agda2 tooltip
ediff-hook vc-hooks lisp-float-type mwheel x-win x-dnd tool-bar dnd
fontset image fringe lisp-mode register page menu-bar rfn-eshadow timer
select scroll-bar mouse jit-lock font-lock syntax 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 loaddefs button faces cus-face files text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote make-network-process dbusbind
dynamic-setting system-font-setting font-render-setting move-toolbar gtk
x-toolkit x multi-tty emacs)