Subject: bug#7987: 23.2; Refill error in message-mode

From: Jesse Sheidlower <[email-masked]>
Date: Fri, 04 Feb 2011 22:18:14 -0500

In message-mode, there is an error in the fill command when you try to
refill indented (blockquoted) paragraphs. Instead of filling the
indented paragraph in-place, it removes empty lines before and after the
blockquote, indents the first line further, and then indents the second
and subsequent lines further still, leading to a mess.

Recipe: 

$ emacs -Q
M-x message-mode
(type or paste the following text, not including dashes):

---
I read with great interest your text, the "Declaration of Independence,"
and I was particularly taken with the introduction:

  When in the Course of human events it becomes necessary for one people
  to dissolve the 
  political bands which have connected them with another
  and to assume among the powers of the earth, the separate 
  and equal
  station to which the Laws of Nature and of Nature's God entitle them,
  a decent respect to the opinions of mankind requires 
  that they should
  declare the causes which impel them to the separation.

I do think this is one of my favorite passages. Thank you.
---

Position point anywhere in the indented section, and type M-q.  The text
will be refilled such that there's no space before or after the indented
paragraph, the first line of the indented paragraph will be indented
four spaces, and the second and subsequent lines should be indented
eight spaces.

By comparison, doing the same thing in mail-mode yields what I would
consider the expected result: the indentation is the same, there is
still space before and after the paragraph, and the lines are of roughly
equal, filled length. The behavior in message-mode should parallel this.

Thank you.

In GNU Emacs 23.2.1 (i386-unknown-netbsdelf5.0, X toolkit, Xaw3d scroll bars)
 of 2010-07-30 on juggler.panix.com
configured using `configure  '--prefix=/pkg/emacs-23.2-x' '--mandir=/pkg/emacs-23.2-x/man' 'CFLAGS=-fstack-protector -D_FORTIFY_SOURCE=2''

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

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-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
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
ESC [ > 1 ; 2 4 0 3 ; 0 c ESC x r e p o r t TAB RE
T

Recent messages:
("/usr/local/bin/emacs.new")
For information about GNU Emacs and the GNU system, type C-h C-a.

Load-path shadows:
/pkg/emacs-23.2-x/share/emacs/site-lisp/url hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/url/url
/pkg/emacs-23.2-x/share/emacs/site-lisp/url-vars hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/url/url-vars
/pkg/emacs-23.2-x/share/emacs/site-lisp/url-parse hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/url/url-parse
/pkg/emacs-23.2-x/share/emacs/site-lisp/url-ns hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/url/url-ns
/pkg/emacs-23.2-x/share/emacs/site-lisp/url-nfs hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/url/url-nfs
/pkg/emacs-23.2-x/share/emacs/site-lisp/url-news hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/url/url-news
/pkg/emacs-23.2-x/share/emacs/site-lisp/url-misc hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/url/url-misc
/pkg/emacs-23.2-x/share/emacs/site-lisp/url-ldap hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/url/url-ldap
/pkg/emacs-23.2-x/share/emacs/site-lisp/url-irc hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/url/url-irc
/pkg/emacs-23.2-x/share/emacs/site-lisp/url-http hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/url/url-http
/pkg/emacs-23.2-x/share/emacs/site-lisp/url-gw hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/url/url-gw
/pkg/emacs-23.2-x/share/emacs/site-lisp/url-file hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/url/url-file
/pkg/emacs-23.2-x/share/emacs/site-lisp/url-cookie hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/url/url-cookie
/pkg/emacs-23.2-x/share/emacs/site-lisp/url-cid hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/url/url-cid
/pkg/emacs-23.2-x/share/emacs/site-lisp/url-cache hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/url/url-cache
/pkg/emacs-23.2-x/share/emacs/site-lisp/url-auth hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/url/url-auth
/pkg/emacs-23.2-x/share/emacs/site-lisp/socks hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/net/socks
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-yank hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-yank
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-vec hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-vec
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-units hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-units
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-undo hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-undo
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-trail hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-trail
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-stuff hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-stuff
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-store hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-store
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-stat hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-stat
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-sel hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-sel
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-rules hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-rules
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-rewr hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-rewr
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-prog hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-prog
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-poly hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-poly
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-mode hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-mode
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-misc hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-misc
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-math hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-math
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-map hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-map
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-macs hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-macs
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-lang hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-lang
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-keypd hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-keypd
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-incom hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-incom
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-help hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-help
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-graph hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-graph
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-funcs hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-funcs
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-frac hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-frac
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-forms hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-forms
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-fin hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-fin
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-ext hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-ext
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-embed hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-embed
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-cplx hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-cplx
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-comb hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-comb
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-bin hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-bin
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-arith hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-arith
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-alg hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-alg
/pkg/emacs-23.2-x/share/emacs/site-lisp/calc/calc-aent hides /pkg/emacs-23.2-x/share/emacs/23.2/lisp/calc/calc-aent

Features:
(shadow sort mail-extr message sendmail regexp-opt ecomplete rfc822 mml
easymenu mml-sec password-cache mm-decode mm-bodies mm-encode mailcap
mail-parse rfc2231 rfc2047 rfc2045 qp ietf-drums mailabbrev nnheader
gnus-util netrc time-date mm-util mail-prsvr gmm-utils wid-edit
mailheader canlock sha1 hex-util hashcash mail-utils emacsbug 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 mldrag 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 loaddefs button minibuffer faces
cus-face files text-properties overlay md5 base64 format env code-pages
mule custom widget hashtable-print-readable backquote
make-network-process x-toolkit x multi-tty emacs)