unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Sending attachments
@ 2009-07-01 19:47 Richard Stallman
  2009-07-01 19:58 ` Alfred M. Szmidt
                   ` (2 more replies)
  0 siblings, 3 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-01 19:47 UTC (permalink / raw)
  To: emacs-devel

Is there any facility that can be used in Mail mode
to put attachments into the message?

If not, would someone like to write one?




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

* Re: Sending attachments
  2009-07-01 19:47 Sending attachments Richard Stallman
@ 2009-07-01 19:58 ` Alfred M. Szmidt
  2009-07-05  0:06   ` Richard Stallman
  2009-07-01 23:34 ` Miles Bader
  2009-07-02  1:01 ` Sending attachments Robert J. Chassell
  2 siblings, 1 reply; 167+ messages in thread
From: Alfred M. Szmidt @ 2009-07-01 19:58 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

   Is there any facility that can be used in Mail mode
   to put attachments into the message?

I use attach-file (C-c TAB) if it is just plain text, or etach (file
attached) if I send something binary.

===File ~/elisp/etach.el====================================
;;;     etach is an Emacs extension for handling MIME mail.
;;;     Copyright (C) 2000-2009 John M. Rulnick

;;;     This program is free software; you can redistribute it and/or
;;;     modify it under the terms of the GNU General Public License as
;;;     published by the Free Software Foundation; either version 2 of
;;;     the License, or (at your option) any later version.

;;;     This program is distributed in the hope that it will be useful,
;;;     but WITHOUT ANY WARRANTY; without even the implied warranty of
;;;     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;;     GNU General Public License for more details.

;;;     You should have received a copy of the GNU General Public
;;;     License along with this program; if not, write to the Free
;;;     Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
;;;     MA 02111-1307 USA

;;;     Contact: John M. Rulnick, PO Box 299, Charlton, MA 01507-0299
;;;     USA, email: etach@rulnick.com (be sure to include the word
;;;     "etach" somewhere in the "Subject:" line of any email to this
;;;     address).

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;			   This is etach.el
;;;			   Version number:
		    (defvar etach-version "1.4.3")
;;;			   Date: 2009-03-13

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; The following macro is for compatibility with Emacs versions that do
;;; not have defcustom:

(defmacro etach-defcustom (a b c &rest d)
  (if (fboundp 'defcustom)
      (append (list 'defcustom a b c :group '(quote etach)) d)
    (list 'defvar a b c)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; The following establishes the etach customization group.  Do "M-x
;;; customize-group RET etach RET" to set all of the etach variables to
;;; your liking; this is often preferable to using the set-variable or
;;; setq commands suggested below.  Review the comments below and the
;;; README.txt, INSTALL.txt, and FAQ.txt files that came with etach for
;;; extra details.

(if (fboundp 'defgroup)
    (defgroup etach nil
      "Manage MIME email attachments in RMAIL and Mail modes."
      :group 'etach))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Please set the variable "etach-debug" to "t" if you need to send a
;;; bug report or have problems using etach:
;;;
;;;  M-x set-variable RET etach-debug RET t RET
;;;
;;; This will create a buffer called "etach-debug" to which a transcript
;;; of etach's subsequent operation will be sent.

(etach-defcustom etach-debug nil
  "*Write etach troubleshooting messages to a buffer.
Set `etach-debug' to t to write etach troubleshooting messages to a
buffer named \'etach-debug\'."
  :type 'boolean)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; If your version of Emacs doesn't have base64-encode-region and
;;; base64-decode-region then you should set "etach-use-mimencode" to
;;; "t" by putting the following (or equivalent custom-set-variables
;;; entry) in your startup file:
;;;
;;;  (setq etach-use-mimencode t)
;;;
;;; You will then need to have a working "mimencode" command on your
;;; system.  The mimencode utility is freely and widely available.

(etach-defcustom etach-use-mimencode nil
  "*Use mimencode instead of Emacs and etach native decoders.
Set `etach-use-mimencode' to t to use the external command
\"mimencode\" instead of Emacs and etach native base64- and
quoted-printable- encoders and decoders.  Setting to t is not
necessary unless calls to the encode or decode functions generate
errors that indicate that the functions are unavailable in your
version of Emacs."
  :type 'boolean)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Put this line:
;;;
;;;  (setq etach-prompt-me-for-file-names t)
;;;
;;; (or equivalent custom-set-variables entry) into your startup file if
;;; you want etach to ask you to confirm file names for detachments.

(etach-defcustom etach-prompt-me-for-file-names nil
  "*Prompt for detachment file names.
Set `etach-prompt-me-for-file-names' to t to be prompted for
detachment file names when using the detach function.  This also
permits cancellation of individual detachments with C-g.  Leaving this
variable set to nil means detachments can proceed with default file
names and, in general, no additional user intervention."
  :type 'boolean)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Put this line:
;;;
;;;  (setq etach-fill-decoded-plain-text t)
;;;
;;; (or equivalent custom-set-variables entry) into your startup file if
;;; you want etach to fill (via the command "fill-region") areas of
;;; encoded plain text that are displayed in place after decoding.

(etach-defcustom etach-fill-decoded-plain-text nil
  "*Fill encoded regions of plain text.
Set `etach-fill-decoded-plain-text' to t to make etach fill encoded
regions of plain text viewed in place after decoding.  See also
`etach-clean-decoded-plain-text'."
  :type 'boolean)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Put this line:
;;;
;;;  (setq etach-write-text-files t)
;;;
;;; (or equivalent custom-set-variables entry) into your startup file if
;;; you want etach to write the text/plain portions of RMAIL messages to
;;; files.

(etach-defcustom etach-write-text-files nil
  "*Write text/plain portion(s) of message to file(s).
Set `etach-write-text-files' to t to make etach write the plain text
portion(s) of the RMAIL message to file(s), rather than leaving them
in the message body."
  :type 'boolean)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Put this line:
;;;
;;;  (setq etach-write-html-files nil)
;;;
;;; (or equivalent custom-set-variables entry) into your startup file if
;;; you want etach to translate the text/html portions of RMAIL messages
;;; to plain text and display them in place in the message.  You must
;;; have lynx or another effective html-to-plain-text converter available
;;; for this to function properly.

(etach-defcustom etach-write-html-files t
  "*Write text/html portion(s) of message to file(s).
Set `etach-write-html-files' to nil to make etach translate the
text/html portions of RMAIL messages to plain text and display them in
place in the message.  Requires lynx or another effective html-to-plain-
text converter.  See etach-unhtml-command."
  :type 'boolean)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; For use when etach-write-html-files is nil.  See above.

(etach-defcustom etach-unhtml-command "lynx"
  "*External command to run to convert text/html to text/plain.
For use when etach-write-html-files is nil.  Must take input from
stdin and put output on stdout."
  :type 'string)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; For use with etach-unhtml-command.  See above.

(etach-defcustom etach-unhtml-args '("-stdin" "-dump" "-underscore" "-dont_wrap_pre" "-width=70")
  "*Arguments for etach-unhtml-command.
For use when etach-write-html-files is nil."
  :type '(repeat string))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Put this line:
;;;
;;;  (setq etach-clean-decoded-plain-text t)
;;;
;;; (or equivalent custom-set-variables entry) into your startup file if
;;; you want etach to replace any control-M (generally extraneous
;;; carriage return) characters appearing in areas of base64-encoded or
;;; quoted-printable-encoded plain text that are displayed in place
;;; after decoding.

(etach-defcustom etach-clean-decoded-plain-text nil
  "*Replace control-M characters with newlines in plain text.
Set `etach-clean-decoded-plain-text' to t to make etach replace
control-M characters with newlines in encoded regions of plain text
viewed in place after decoding.  See also
`etach-fill-decoded-plain-text'."
  :type 'boolean)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Put this line:
;;;
;;;  (setq etach-detachment-default-directory "/your/preferred/directory/")
;;;
;;; (or equivalent custom-set-variables entry) into your startup file if
;;; you want etach to put detachments into /your/preferred/directory/
;;; instead of the "detached/" subdirectory of the RMAIL buffer's
;;; current working directory.

(etach-defcustom etach-detachment-default-directory "detached/"
 "*Preferred directory path for detachments.
Set `etach-detachment-default-directory' to a string containing your
preferred directory path for detachments if you prefer not to use the
default.  The default is to place detachments in a subdirectory named
\"detached\" of the current directory.  Etach will attempt to create
the directory if it doesn't already exist."
 :type 'string)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Put this line:
;;;
;;;  (setq etach-detachment-discard-directory "/your/preferred/discard/directory/")
;;;
;;; (or equivalent custom-set-variables entry) into your startup file if
;;; you want etach to put discarded detachments into
;;; /your/preferred/discard/directory/ instead of the
;;; etach-detachment-default-directory.

(etach-defcustom etach-detachment-discard-directory etach-detachment-default-directory
 "*Preferred directory path for discarded detachments.
Set `etach-detachment-discard-directory' to a string containing your
preferred directory path for discarded detachments if you prefer they
be placed somewhere other than the etach-detachment-default-directory.
It may be useful to set this to /tmp/ or the location of your \"trash
folder.\" Etach will attempt to create the directory if it doesn't
already exist.  By default, only non-text/plain parts of
multipart/alternative messages are discarded.  However, it is possible
to direct etach to discard all non-text/plain attachments simply by
calling etach-detach with a prefix arg."
 :type 'string)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Put this line:
;;;
;;;  (setq etach-restore-buffer-after-detach t)
;;;
;;; (or equivalent custom-set-variables entry) into your startup file if
;;; you want etach to simply detach any attached files and then restore
;;; the contents of the current RMAIL message when you invoke the detach
;;; command.  This can also be set via M-x set-variable RET, of course.
;;; See also etach-restore-attachments-after-detach.

(etach-defcustom etach-restore-buffer-after-detach nil
  "*Restore pre-detach contents of RMAIL buffer upon detach.
Set `etach-restore-buffer-after-detach' to t to make etach leave no
changes in the RMAIL buffer.  This is done by first performing a
detach, then replacing the (new) contents of your RMAIL buffer
entirely with the original (pre-detach) contents.  This applies when
you invoke the detach command."
  :type 'boolean)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Put this line:
;;;
;;;  (setq etach-restore-attachments-after-detach t)
;;;
;;; (or equivalent custom-set-variables entry) into your startup file if
;;; you want etach to restore the original content of any MIME parts
;;; that were written to files.  This can also be set via M-x
;;; set-variable RET, of course.  See also
;;; etach-restore-buffer-after-detach.

(etach-defcustom etach-restore-attachments-after-detach nil
  "*Restore content of MIME parts written to files upon detach.
Set `etach-restore-attachments-after-detach' to t to make etach
restore the original content of any MIME parts that were written to
files.  This allows you to use detach to decode inline
quoted-printable- or base64-encoded text and effectively copy any
attached files out to disk, but otherwise not change the content of
the current message.  It makes sense to leave this set to nil if you
have `etach-restore-buffer-after-detach' set to t, since that setting
will cause the entire buffer to be restored."
  :type 'boolean)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Customize the variable etach-spam-message via setq or
;;; custom-set-variables if you would like to use a different text
;;; message when you forward spam for handling by email postmasters and
;;; the like.

(etach-defcustom etach-spam-message
  "I have received unsolicited commercial or bulk email (spam) from, or
alleging to be from, your domain.  I would appreciate if you would
take steps to prevent this from happening in the future.

Any claims made by the sender that the message was requested by me are
false.  I have never directly or indirectly (by subscription, opt-in,
non-opt-out, or any other means) requested any such contact from the
sender.

The full content of the offending email message, including mail
transport headers, is attached below.

Thank you for your time and attention."
  "*Message to insert into spam reports."
  :type 'string)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; You should definitely customize the variable
;;; etach-spam-host-exclude-list via setq or custom-set-variables by
;;; adding more strings to the etach-spam-host-exclude-list if you plan
;;; to use the spam-handling functionality of etach-mime-forward.  The
;;; strings to add should include your own host and domain; for example:
;;;
;;; (setq etach-spam-host-exclude-list
;;;       '("localhost" "mydomain.com" "myhost.mydomain.com"))
;;;
;;; Use lowercase name strings.

(etach-defcustom etach-spam-host-exclude-list '("localhost")
  "*Specific hosts or domains to skip when sending a spam report."
  :type 'sexp)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Set the variable etach-spam-message-subject-string via setq or
;;; custom-set-variables if you prefer a different default "Subject:"
;;; line preface to be included in your spam reports.

(etach-defcustom etach-spam-message-subject-string "mail abuse report"
  "*Subject line preface to use when sending a spam report."
  :type 'string)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(etach-defcustom etach-include-x-mailer t
  "*Include the \"X-Mailer:\" header in outgoing etach mail.
Set `etach-include-x-mailer' to nil if you prefer your outgoing
etach mail (mail composed using etach's attach or mime-forward
functions) to not include the \"X-Mailer:\" header."
  :type 'boolean)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Set the variable etach-detached-file-label-separator-string via setq
;;; or custom-set-variables if you are unable to use file selection
;;; (e.g., point-and-click) convenience features on the detached file
;;; names in the RMAIL buffer.  This is reportedly useful in certain
;;; operating environments.

(etach-defcustom etach-detached-file-label-separator-string ""
  "*Separator string for padding detached file names.
Separator string to place on either side of the file name when a
file is detached and replaced by a '[file:filename]' label.  Set this
to a single space if necessary to allow easy file selection; the
result would be '[ file: filename ]'."
  :type 'string)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Set the variable etach-default-charset via setq or
;;; custom-set-variables if you wish to use an alternative such as
;;; iso-8859-1.

(etach-defcustom etach-default-charset "us-ascii"
  "*Default character set for MIME Content-Type headers.
Change the default character set name for MIME Content-Type headers if
necessary to help etach better handle or label MIME parts that contain
non-us-ascii characters."
  :type 'string)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Immediately following is a list of associations for file name
;;; extensions and MIME types.  Add entries to the list as you like, but
;;; be cognizant of the specifications in RFCs 2045-9 (see
;;; http://www.cis.ohio-state.edu/htbin/rfc/rfc-index.html
;;; and/or
;;; http://www.faqs.org/rfcs/
;;; and/or
;;; ftp://ftp.isi.edu/in-notes/iana/assignments/media-types/).
;;;
;;; Also, change the order within the groups of entries having the same
;;; MIME type if you wish.  The first entry provides the default file
;;; name extension.  For example, if "txt" is the first with association
;;; "text/plain" then ".txt" will be the default extension for detached
;;; files of type text/plain.

(defvar etach-mime-type-alist '(

  ("txt"  "text/plain")
  ("asc"  "text/plain")
  ("text" "text/plain")

  ("html" "text/html")
  ("htm"  "text/html")

  ("aif"  "audio/x-aiff")
  ("aifc" "audio/x-aiff")
  ("aiff" "audio/x-aiff")

  ("cdf" "application/x-netcdf")
  ("nc"  "application/x-netcdf")

  ("exe" "application/x-msdos-program")
  ("bat" "application/x-msdos-program")
  ("com" "application/x-msdos-program")

  ("ics" "text/calendar")
  ("ifb" "text/calendar")

  ("jpg"  "image/jpeg")
  ("JPG"  "image/jpeg")
  ("jpe"  "image/jpeg")
  ("jpeg" "image/jpeg")

  ("ltx"   "application/x-latex")
  ("latex" "application/x-latex")

  ("mid"  "audio/midi")
  ("midi" "audio/midi")

  ("mov" "video/quicktime")
  ("qt"  "video/quicktime")

  ("mpg"  "video/mpeg")
  ("mp2"  "video/mpeg")
  ("mpe"  "video/mpeg")
  ("mpeg" "video/mpeg")

  ("pfb" "application/x-font")
  ("gsf" "application/x-font")
  ("pfa" "application/x-font")

  ("php"   "application/x-httpd-php")
  ("pht"   "application/x-httpd-php")
  ("phtml" "application/x-httpd-php")

  ("pl" "application/x-perl")
  ("pm" "application/x-perl")

  ("ps"  "application/postscript")
  ("eps" "application/postscript")

  ("ram" "audio/x-pn-realaudio")
  ("ra"  "audio/x-pn-realaudio")
  ("rm"  "audio/x-pn-realaudio")

  ("roff" "application/x-troff")
  ("t"    "application/x-troff")
  ("tr"   "application/x-troff")

  ("texi" "application/x-texinfo")
  ("texinfo" "application/x-texinfo")

  ("tif"  "image/tiff")
  ("tiff" "image/tiff")

  ("uri" "text/uri-list")
  ("uris" "text/uri-list")

  ("xml" "text/xml")
  ("dtd" "text/xml")

  ("au" "audio/ulaw")
  ("avi" "video/x-msvideo")
  ("bcpio" "application/x-bcpio")
;  ("bin" "application/octet-stream") ; leave this commented unless you want a default of ".bin"
  ("bmp" "application/x-ms-bmp")
  ("c" "text/x-csrc")
  ("cgm" "image/cgm")
  ("cpio" "application/x-cpio")
  ("csh" "application/x-csh")
  ("css" "text/css")
  ("csv" "text/comma-separated-values")
  ("deb" "application/x-debian-package")
  ("doc" "application/msword")
  ("dvi" "application/x-dvi")
  ("etx" "text/x-setext")
  ("ez" "application/andrew-inset")
  ("g3fax" "image/g3fax")
  ("gif" "image/gif")
  ("gpg" "application/gnupg")
  ("gtar" "application/x-gtar")
  ("gz" "application/x-gunzip")
  ("hdf" "application/x-hdf")
  ("ief" "image/ief")
  ("man" "application/x-troff-man")
  ("mdb" "application/msaccess")
  ("me" "application/x-troff-me")
  ("mif" "application/x-mif")
  ("movie" "video/x-sgi-movie")
  ("ms" "application/x-troff-ms")
  ("naplps" "image/naplps")
  ("o" "application/x-object")
  ("oda" "application/oda")
  ("pbm" "image/x-portable-bitmap")
  ("pdf" "application/pdf")
  ("pgm" "image/x-portable-graymap")
  ("pgn" "application/x-chess-pgn")
  ("pgp" "application/pgp")
  ("php3" "application/x-httpd-php3")
  ("php3p" "application/x-httpd-php3-preprocessed")
  ("phps" "application/x-httpd-php3-source")
  ("png" "image/png")
  ("pnm" "image/x-portable-anymap")
  ("ppm" "image/x-portable-pixmap")
  ("ppt" "application/powerpoint")
  ("ras" "image/x-cmu-raster")
  ("rgb" "image/x-rgb")
  ("rtf" "application/rtf")
  ("rtx" "text/richtext")
  ("sgml" "text/sgml")
  ("sh" "application/x-sh")
  ("shar" "application/x-shar")
  ("snd" "audio/basic")
  ("sv4cpio" "application/x-sv4cpio")
  ("sv4crc" "application/x-sv4crc")
  ("tar" "application/x-tar")
  ("tcl" "application/x-tcl")
  ("tex" "application/x-tex")
  ("tgz" "application/x-gtar")
  ("tsv" "text/tab-separated-values")
  ("ustar" "application/x-ustar")
  ("wav" "audio/x-wav")
  ("wpd" "application/x-wordperfect")
  ("xbm" "image/x-xbitmap")
  ("xls" "application/excel")
  ("xpm" "image/x-xpixmap")
  ("xwd" "image/x-xwindowdump")
  ("zip" "application/zip")

  )
  "Association list of file name extensions and MIME types recognized
by etach.")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; USERS SHOULD BE PARTICULARLY CAUTIOUS MAKING CHANGES BEYOND THIS POINT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defalias 'attach 'etach-attach)
(defalias 'detach 'etach-detach)
(defalias 'mime-forward 'etach-mime-forward)
(defalias 'quoted-printable-encode-region 'etach-quoted-printable-encode-region)
(defalias 'kill-label-detached 'etach-kill-label-detached)

(defvar etach-content-type)
(defvar etach-content-transfer-encoding)
(defvar etach-content-id)
(defvar etach-content-description)
(defvar etach-content-disposition)
(defvar etach-boundary)

;;; Here are the interactive (user-visible) functions:

(defun etach-version ()
  "Show the etach version number."
  (interactive)
  (message "etach version %s" etach-version))

(defun etach-file-attach (file-to-attach)
  "Attach a file to the present outgoing email message.  Use in Mail
mode."
  (interactive "fFile to attach: ")
  (etach-debug-msg (concat "========== file-attach called with file \'" file-to-attach "\' =========="))
  (save-excursion
    (let ((etach-content-type "")
	  (etach-content-transfer-encoding "")
	  (etach-content-id "")
	  (etach-content-description "")
	  (etach-content-disposition "")
	  (case-fold-search t))
      (etach-mime-validate-minimal-headers)
      (goto-char (point-min))
      (etach-mime-get-content-headers)
      (let ((etach-boundary ""))
	(etach-prep-outgoing-mime-message)
	(insert "Content-Type: ")
	(let ((lext ""))
	  (if (string-match "\\.\\([a-zA-Z0-9]+\\)$" file-to-attach)
	      (setq lext (match-string 1 file-to-attach)))

	  (if (assoc lext etach-mime-type-alist)
	      (progn
		(insert (car (cdr (assoc lext etach-mime-type-alist))))
		(if (string-match "text/" (car (cdr (assoc lext etach-mime-type-alist))))
		    (insert "; charset=" etach-default-charset)))
	    (insert "application/octet-stream")))
	(let ((name-sans-path file-to-attach))
	  (if (string-match "/\\([^/]*\\)$" file-to-attach) ; could use file-name-nondirectory
	      (setq name-sans-path (match-string 1 file-to-attach)))
	  (insert (if (> (length name-sans-path) 22)
		      ";\n\t"
		    "; ")
		  "name=\"" name-sans-path "\"\nContent-Transfer-Encoding: "
		  (if (or (string-match "\.te?xt$" file-to-attach)
			  (string-match "\.asc$" file-to-attach))
		      "quoted-printable\n\n"
		    "base64\n\n")))
	(insert-file-contents-literally file-to-attach)
	(if (or (string-match "\.te?xt$" file-to-attach)
		(string-match "\.asc$" file-to-attach))
	    (progn
	      (if etach-use-mimencode
		  (shell-command-on-region (point) (point-max) "mimencode -q" t t)
		(etach-quoted-printable-encode-region (point) (point-max)))
	      (goto-char (point-max)))
	  (if etach-use-mimencode
	      (shell-command-on-region (point) (point-max) "mimencode -b" t t)
	    (base64-encode-region (point) (point-max)))
	  (goto-char (point-max))
	  (or (bolp) (insert "\n")))
	(insert "--" etach-boundary "--\n")))))

(defun etach-attach (files-to-attach)
  "Attach a file or collection of files to the present outgoing email
message.  Wildcards are permitted under recent versions of Emacs.
Use in Mail mode."
  (interactive "FFile(s) to attach: ")
  (etach-debug-msg (concat "========== attach called with file(s) \'" files-to-attach "\' =========="))
  (while (string-equal (substring files-to-attach -1) "/")
    (setq files-to-attach (substring files-to-attach 0 -1)))
  (if (fboundp 'file-expand-wildcards)
      (let ((filelist (file-expand-wildcards files-to-attach)))
	(while filelist
	  (let ((file (car filelist)))
	    (if (file-regular-p file)
		(etach-file-attach file)
	      (message "not attaching \'%s\': not a regular file" file))
	    (setq filelist (cdr filelist)))))
    (if (file-regular-p files-to-attach)
	(etach-file-attach files-to-attach)
      (message "not attaching \'%s\': not a regular file" files-to-attach))))

(defun etach-detach (&optional discard)
  "Detach the encoded attachments from the present email message.  Use in RMAIL mode.
Call with prefix arg via C-u to discard all attachments."
  (interactive "P")
  (etach-debug-msg (concat "========== detach called =========="))
  (rmail-set-attribute "detached" t)
  (save-excursion
    ;; if in the x-summary buffer, switch to the x buffer:
    (set-buffer rmail-buffer)
    (goto-char (point-min))
    (let ((case-fold-search t)
	  (default-directory default-directory)
	  (require-final-newline require-final-newline)
	  (insert-default-directory insert-default-directory)
	  (copy-of-rmail-text (buffer-string))
	  (copy-of-rmail-babyl-header (etach-get-babyl-header))
	  (my-current-buffer (current-buffer)))
      (condition-case err
	  (progn
	    (if discard
		(etach-mime-detach "\\'" 0 1)
	      (etach-mime-detach "\\'" 0 0))
	    (if etach-restore-buffer-after-detach
		(etach-restore-buffer "user preference" my-current-buffer copy-of-rmail-text copy-of-rmail-babyl-header)
	      ))
	((quit error)
	 (etach-restore-buffer (concat "error: " (error-message-string err))
			       my-current-buffer
			       copy-of-rmail-text
			       copy-of-rmail-babyl-header))))))

(defun etach-mime-forward (&optional this-is-spam)
  "Use MIME message/rfc822 format to forward a message.  Use in RMAIL mode.
Call with prefix arg via C-u to reply to spam."
  (interactive "P")
  (if this-is-spam
      (etach-debug-msg (concat "========== mime-forward (spam) called =========="))
    (etach-debug-msg (concat "========== mime-forward called ==========")))
  ;; if in the x-summary buffer, switch to the x buffer:
  (set-buffer rmail-buffer)
  (let ((msg-to-be-forwarded ""))
    (if this-is-spam
	(if (etach-rmail-msg-is-pruned)
	    (rmail-toggle-header)))
    (setq msg-to-be-forwarded (buffer-string))
    (if this-is-spam
	(if (not (etach-rmail-msg-is-pruned))
	    (rmail-toggle-header)))
    (rmail-set-attribute "forwarded" t)
    (rmail-mail)
    (delete-other-windows)
    (save-excursion
      (let ((etach-content-type "")
	    (etach-content-transfer-encoding "")
	    (etach-content-id "")
	    (etach-content-description "")
	    (etach-content-disposition "")
	    (case-fold-search t))
	(etach-mime-validate-minimal-headers)
	(goto-char (point-min))
	(etach-mime-get-content-headers)
	(let ((etach-boundary "")
	      (to-list '()))
	  (etach-prep-outgoing-mime-message)
	  (if this-is-spam
	      (save-excursion
		(goto-char (point-min))
		(re-search-forward "^$") ; first blank line should be text/plain "writing area"
		(forward-line)
		(insert (concat etach-spam-message "\n"))))
	  (if (equal (find-charset-string msg-to-be-forwarded) '(ascii))
	      (insert "Content-Type: message/rfc822\nContent-Transfer-Encoding: 7bit\n\n")
	    (save-excursion
	      (goto-char (point-min))
	      (if (re-search-forward "^Content-Transfer-Encoding:.+$" (etach-mail-header-end) t)
		  (replace-match "Content-Transfer-Encoding: 8bit")
		(etach-debug-msg "no Content-Transfer-Encoding found in mail header, none replaced")))
	    (insert "Content-Type: message/rfc822\nContent-Transfer-Encoding: 8bit\n\n"))
	  (save-excursion
	    (insert msg-to-be-forwarded))
	  (if this-is-spam
	      (let ((host ""))
		;; first scan all email addresses appearing in message:
		(save-excursion
		  (while (re-search-forward "@\\([^ \]\t\n>\)\'\";,]+\\)" nil t)
		    (setq to-list (etach-extract-hosts (match-string 1) to-list))))
		;; now scan all "Received: from" header lines:
		(save-excursion
		  (while (re-search-forward "Received: from \\(.+\\)$" nil t)
		    (setq to-list (etach-extract-hosts (match-string 1) to-list))))
		(save-excursion
		  (goto-char (point-min))
		  (re-search-forward "^To: ")
		  (let ((host ""))
		    (while to-list
		      (setq host (car to-list))
		      (setq to-list (cdr to-list))
		      (insert
		       "abuse@" host ", postmaster@" host
		       (if to-list
			   ",\n\t"
			 "")))))))
	  (let ((sender "")
		(orig-subject ""))
	    (save-excursion
	      (re-search-forward "^From:[ \t]*\\(.*\\)$" nil t)
	      (setq sender (match-string 1))
	      (if (string-match "\<\\([^ ]+\\)\>" sender)
		  (setq sender (match-string 1 sender))
		(if (string-match "\\([^ ]+\\)[ \t]+\(.*\)" sender)
		    (setq sender (match-string 1 sender)))))
	    (save-excursion
	      (if (re-search-forward "^Subject: \\(.*\\)$" nil t)
		  (setq orig-subject (match-string 1))))
	    (save-excursion
	      (goto-char (point-min))
	      (re-search-forward "^Subject: ")
	      (if this-is-spam
		  (insert etach-spam-message-subject-string " "))
	      (insert "[" sender ": " orig-subject "]")))
	  (goto-char (point-max))
	  (or (bolp) (insert "\n"))
	  (insert "--" etach-boundary "--\n"))))))

(defun etach-quoted-printable-encode-region (rbeg rend)
  "Quoted-printable-encode region."
  (interactive "r")
  (etach-debug-msg (concat "quoted-printable-encode-region called"))
  (require 'font-lock)
  (let ((mime-bad-char		; all but ascii 33-60, 62-126, and \n
	 "[^\]!\"#\$%&'()\*\+,\./0-9;<:>\?@A-Z_^\[`a-z{|}~\\\n-]")
	(case-fold-search t)
	(my-global-font-lock-mode global-font-lock-mode))
    (if my-global-font-lock-mode
	(progn
	  (etach-debug-msg (concat "calling global-font-lock-mode(0)"))
	  (global-font-lock-mode 0)))
    (save-excursion
      (save-restriction
      (narrow-to-region rbeg rend)

      (goto-char (point-min))
      (while (re-search-forward mime-bad-char nil t)
	(cond
	 ((or (char-equal (preceding-char) ? )
	      (char-equal (preceding-char) ?\t))
	  (if (char-equal (following-char) ?\n)
	      (insert "=\n")))
	 (t
	  (replace-match (upcase (format "=%02x" (preceding-char)))))))

      (goto-char (point-min))
      (while (re-search-forward "^[.]" nil t)
	(replace-match "=2E" t t))

      (goto-char (point-min))
      (while (re-search-forward "^F\\(rom\\)" nil t)
	(beginning-of-line)
	(replace-match (concat (upcase (format "=%02x" (following-char))) (match-string 1)) t t))

      (goto-char (point-min))
      (while (re-search-forward		; look for 77+ chars on a line, split 73/4
	      "^\\(.........................................................................\\)\\(=[A-F0-9][A-F0-9].\\)"
	      nil t)
	(replace-match (concat (match-string 1) "=\n" (match-string 2)) t t)
	(beginning-of-line))

      (goto-char (point-min))
      (while (re-search-forward		; look for 77+ chars on a line, split 74/3
	      "^\\(..........................................................................\\)\\(=[A-F0-9][A-F0-9]\\)"
	      nil t)
	(replace-match (concat (match-string 1) "=\n" (match-string 2)) t t)
	(beginning-of-line))

      (goto-char (point-min))
      (while (re-search-forward		; look for 77+ chars on a line, split 75/2
	      "^\\(...........................................................................\\)\\(..\\)"
	      nil t)
	(replace-match (concat (match-string 1) "=\n" (match-string 2)) t t)
	(beginning-of-line))

      (goto-char (point-max))
      (if (/= (preceding-char) ?\n)
	  (insert "=\n"))))
    (if my-global-font-lock-mode
	(progn
	  (etach-debug-msg (concat "calling global-font-lock-mode(1)"))
	  (global-font-lock-mode 1)))))

(defun etach-kill-label-detached ()
  "Remove the \"detached\" attribute from this message."
  (interactive)
  ;; if in the x-summary buffer, switch to the x buffer:
  (set-buffer rmail-buffer)
  (rmail-set-attribute "detached" nil))

;;; Here are the utility (code-visible, not user-visible) functions:

(defun etach-extract-hosts (host to-list)
  "Extract hosts from candidate strings for spam to-list."
  (if (or (string-match "\\(.*\\) by[ \t\n]" host)
	  (string-match "\\(.*\\) for[ \t\n]" host))
      (setq host (match-string 1 host)))
  (if (string-match "\(really [\[]?\\([^\] ]*\\).*\)" host) ; if "really," reduce to the really part
      (setq host (match-string 1 host)))
  (if (string-match "^\\([^ ]+\\) [\(\[]+\\([^\] \)]+\\)" host)
      (let ((hosta (match-string 1 host))
	    (hostb (match-string 2 host)))
	(setq host (if (or (string-match "^[0-9.]+$" hostb)
			   (not (string-match ".+[.].+$" hostb)))
		       hosta
		     hostb))))
  (if (string-match "@\\(.+\\)" host)
      (setq host (match-string 1 host)))
  (if (string-match "^[ \t]*\\(.+\\)[ \t]*$" host) ; remove leading/trailing whitespace
      (setq host (match-string 1 host)))
  (if (string-match ".+[.]\\(.+[.].+[.].+[.].+\\)$" host)
      (setq host (match-string 1 host)))
  (etach-downcase host)
  (etach-debug-msg (concat "etach-extract-hosts extracted: " host))
  (if (not (string-match "^\[?[0-9.]+\]?$" host))
      (while (string-match "[.]\\(.+\\)" host)
	(if (or (member host etach-spam-host-exclude-list)
		(member host to-list))
	    nil
	  (setq to-list (cons host to-list)))
	(setq host (match-string 1 host))))
  to-list)

(defun etach-restore-buffer (msg my-current-buffer copy-of-rmail-text copy-of-rmail-babyl-header)
  "Restore contents of RMAIL buffer."
  (etach-debug-msg (concat "restoring buffer due to " msg "..."))
  (message "restoring buffer due to %s..." msg)
  (set-buffer my-current-buffer)
  (setq buffer-read-only nil)
  (delete-region (point-min) (point-max))
  (save-excursion
    (rmail-widen-to-current-msgbeg
     (function (lambda ()
		 (delete-region (point-min) (point-max))))))
  (etach-debug-msg "inserting everything\n")
  (insert (concat copy-of-rmail-babyl-header copy-of-rmail-text))
  (etach-debug-msg "cleaning up")
  (etach-mime-decode-cleanup 1 nil nil nil)
  (setq buffer-read-only t)
  (etach-debug-msg (concat "restoring buffer due to " msg "...done"))
  (message "restoring buffer due to %s...done" msg))

(defun etach-prep-outgoing-mime-message ()
  "Prepare outgoing message headers and boundaries (called by
etach-attach and etach-mime-forward)."
  (if (etach-mime-part-is-multipart etach-content-type)
      (progn
	(setq etach-boundary (etach-mime-get-boundary-string etach-content-type))
	(search-forward (concat "--" etach-boundary "--\n"))
	(replace-match (concat "--" etach-boundary "\n")))
    (let ((oldE)
	  (oldT))
      (goto-char (point-min))
      (if (re-search-forward "^Content-Transfer-Encoding:\\(.*\\)\n" (etach-mail-header-end) t)
	  (progn
	    (setq oldE (match-string 1))
	    (replace-match "" nil t))
	(etach-debug-msg "no Content-Transfer-Encoding found, none noted as oldE"))
      (goto-char (point-min))
      (if (re-search-forward "^Content-Type:\\(.*\\)" (etach-mail-header-end))
	  (progn
	    (setq oldT (match-string 1))
	    (replace-match "Content-Type: multipart/mixed;\n\tboundary=\"" nil t))
	(etach-debug-msg "no Content-Type found, none noted as oldT or replaced"))
      (setq etach-boundary (etach-mime-create-boundary-marker))
      (insert etach-boundary "\"\nContent-Transfer-Encoding:" oldE)
      (search-forward (concat mail-header-separator "\n") nil)
      (insert "This is a multi-part message in MIME format.\n--" etach-boundary
	      "\nContent-Type:" oldT "\nContent-Transfer-Encoding:" oldE "\n\n")
      (goto-char (point-max))
      (or (bolp) (insert "\n"))
      (insert "--" etach-boundary "\n"))))

(defun etach-who-is-this-from ()
  "Get the email address of the sender, according to the From header."
  (let ((sender ""))
    (save-excursion
      (goto-char (point-min))
      (re-search-forward "^From:[ \t]*\\(.*\\)$" nil t)
      (setq sender (match-string 1))
      (if (string-match "\<\\([^ ]+\\)\>" sender)
	  (setq sender (match-string 1 sender))
	(if (string-match "\\([^ ]+\\)[ \t]+\(.*\)" sender)
	    (setq sender (match-string 1 sender)))))
    (if (string-match "[.][a-zA-Z0-9]+$" sender)
	(setq sender (concat sender "_"))) ; do this so that, e.g., ".com" isn't seen as a file name extension
    sender))

(defun etach-create-unique-string ()
  "Return a unique string of numbers of the form YMDHMS-R where
YMDHMS is date/time and R is random."
  (concat (format-time-string "%Y%m%d%H%M%S" (current-time)) "-" (format "%09d" (abs (random)))))

(defun etach-mime-create-boundary-marker ()
  "Return a string suitable as a mime boundary marker."
  (concat "++----------" (etach-create-unique-string) "----------++"))

(defun etach-mime-validate-minimal-headers ()
  "Confirm that default headers are in place (for mail composition)."
  (goto-char (point-min))
  (if (not (re-search-forward "^Mime-Version:" (etach-mail-header-end) t))
      (progn
	(goto-char (etach-mail-header-end))
	(insert "Mime-Version: 1.0\n")))
  (goto-char (point-min))
  (if (not (re-search-forward "^Content-Type:" (etach-mail-header-end) t))
      (progn
	(goto-char (etach-mail-header-end))
	(insert "Content-Type: text/plain; charset=" etach-default-charset "\n")))
  (goto-char (point-min))
  (if (not (re-search-forward "^Content-Transfer-Encoding:" (etach-mail-header-end) t))
      (progn
	(goto-char (etach-mail-header-end))
	(insert "Content-Transfer-Encoding: "
		(if (equal (find-charset-region (point-min) (point-max)) '(ascii))
		    "7bit\n"
		  "8bit\n"))))
  (if etach-include-x-mailer
      (progn
	(goto-char (point-min))
	(if (not (re-search-forward "^X-Mailer:" (etach-mail-header-end) t))
	    (progn
	      (goto-char (etach-mail-header-end))
	      (insert (concat "X-Mailer: Emacs " emacs-version " with etach " etach-version "\n")))))))

(defun etach-mime-get-content-headers ()
  "Assign values to variables corresponding to MIME Content- headers."
  (let ((mime-header-end (point)))
    (save-excursion
      (re-search-forward "^\\([ \t]*$\\|--\\)") ; look for end of headers (blank line or "^--")
      (beginning-of-line)
      (setq mime-header-end (point)))
    (while (re-search-forward "^Content-\\([^:]*\\):[ \t]*\\(.*\\)[ \t]*$" mime-header-end t)
      (let ((field-name (match-string 1))
	    (field-body (match-string 2)))
	(while (looking-at "\n[ \t]+")
	  (re-search-forward "\n[ \t]+\\(.*\\)[ \t]*$" mime-header-end)
	  (setq field-body (concat field-body (match-string 1)))
	  )
	(etach-debug-msg (concat "found Content-" field-name ": " field-body))
	(cond
	 ((string-match "^type$" field-name) (setq etach-content-type field-body))
	 ((string-match "^transfer-encoding$" field-name) (setq etach-content-transfer-encoding field-body))
	 ((string-match "^id$" field-name) (setq etach-content-id field-body))
	 ((string-match "^description$" field-name) (setq etach-content-description field-body))
	 ((string-match "^disposition$" field-name) (setq etach-content-disposition field-body))
	 (t
	  (progn
	    (etach-debug-msg (concat "unrecognized MIME 1.0 header: [" field-name "]"))
	    (message "unrecognized MIME 1.0 header: [%s]" field-name))))))
    (goto-char mime-header-end))
  )

(defun etach-mime-part-is-multipart-alternative (content-type-body)
  "Return t if this type is multipart/alternative, nil otherwise."
  (string-match "^[^;]*multipart/alternative" content-type-body))

(defun etach-mime-part-is-multipart (content-type-body)
  "Return t if this type is multipart, nil otherwise."
  (string-match "^[^;]*multipart/" content-type-body))

(defun etach-mime-part-is-message (content-type-body)
  "Return t if this type is message, nil otherwise."
  (string-match "^[^;]*message/" content-type-body))

(defun etach-mime-get-boundary-string (content-type-body)
  "Return boundary string from \"Content-Type: multipart; boundary=...\" body."
  (or (string-match "\\<boundary[ \t]*=[ \t]*\"\\([^;]*\\)\"[ \t]*\\(;\\|$\\)" content-type-body)
      (string-match "\\<boundary[ \t]*=[ \t]*\\([^;]*\\)[ \t]*\\(;\\|$\\)" content-type-body))
  (match-string 1 content-type-body))

(defun etach-rewrite-content-headers (T E Disp hbeg)
  "Rewrite content headers after decode."
  (if t
      (save-excursion
	(if (re-search-backward "^Content-Disposition:" hbeg t)
	    (replace-match "X-Former-Content-Disposition:" t))))

  (if (not (string-match "\\<text/plain\\>" T))
      (save-excursion
	(if (re-search-backward "^Content-Type:" hbeg t)
	    (replace-match (concat "Content-Type: text/plain; charset=" etach-default-charset "\nX-Former-Content-Type:") t))))

  (if (not (string-match "\\<7bit\\>" E))
      (save-excursion
	(if (re-search-backward "^Content-Transfer-Encoding:" hbeg t)
	    (replace-match "Content-Transfer-Encoding: 7bit\nX-Former-Content-Transfer-Encoding:" t)))))

(defun etach-mime-decode (rbeg rend T E I Desc Disp hbeg depth discard)
  "Mime-decode the region rbeg to rend based on \"content-\" headers, starting at hbeg.
This function does more than just decode; it is also responsible for committing the actual
detachment(s)."
  (etach-debug-msg (concat "etach-mime-decode called with T=\'" T "\', E=\'" E "\', depth=" (number-to-string depth)))
  (cond
   ((and (or (and (string-match "\\<text/plain\\>" T)
		  (not etach-write-text-files))
	     (and (string-match "\\<text/html\\>" T)
		  (= discard 0)
		  (not etach-write-html-files)))
	 (not (string-match "\\<name=" T))
	 (not (string-match "\\<filename=" Disp)))
    (progn
      (setq buffer-read-only nil)
      (cond
       ((string-match "\\<quoted-printable\\>" E)
	(progn
	  (etach-debug-msg (concat "quoted-printable-decoding MIME type \'" T "\'..."))
	  (message "quoted-printable-decoding MIME type \'%s\'..." T)
	  (save-excursion
	    (save-restriction
	      (narrow-to-region rbeg rend)
	      (if etach-use-mimencode
		  (shell-command-on-region (point-min) (point-max) "mimencode -u -q" t t)
		(etach-rmail-decode-quoted-printable (point-min) (point-max)))
	      (decode-coding-region (point-min) (point-max) 'undecided)
	      (if (string-match "\\<text/html\\>" T)
		  (progn
		    (etach-debug-msg "converting quoted-printable-decoded html to plain text")
		    (message "converting quoted-printable-decoded html to plain text")
		    (apply 'call-process-region (point-min) (point-max)
			   etach-unhtml-command t t nil etach-unhtml-args)))
	      (goto-char (point-max))
	      (if (/= (preceding-char) ?\n)
		  (insert "\n"))
	      (if etach-fill-decoded-plain-text
		  (fill-region (point-min) (point-max)))
	      (if etach-clean-decoded-plain-text
		  (subst-char-in-region (point-min) (point-max) ?\r ?\n))))
	  ))
       ((string-match "\\<base64\\>" E)
	(progn
	  (etach-debug-msg (concat "base64-decoding MIME type \'" T "\'..."))
	  (message "base64-decoding MIME type \'%s\'..." T)
	  (save-excursion
	    (save-restriction
	      (goto-char rbeg)
	      (if (re-search-forward "[^A-Za-z0-9+/=\n]\\|[\n][\n]" rend t)
		  (progn
		    (backward-char)
		    (etach-debug-msg (concat "limiting region here, non-base64 char or blank line found"))
		    (narrow-to-region rbeg (point)))
		(narrow-to-region rbeg rend))
	      (if etach-use-mimencode
		  (shell-command-on-region (point-min) (point-max) "mimencode -u" t t)
		(base64-decode-region (point-min) (point-max)))
	      (decode-coding-region (point-min) (point-max) 'undecided)
	      (if (string-match "\\<text/html\\>" T)
		  (progn
		    (etach-debug-msg "converting base64-decoded html to plain text")
		    (message "converting base64-decoded html to plain text")
		    (apply 'call-process-region (point-min) (point-max)
			   etach-unhtml-command t t nil etach-unhtml-args)))
	      (goto-char (point-max))
	      (if (/= (preceding-char) ?\n)
		  (insert "\n"))
	      (if etach-fill-decoded-plain-text
		  (fill-region (point-min) (point-max)))
	      (if etach-clean-decoded-plain-text
		  (subst-char-in-region (point-min) (point-max) ?\r ?\n))))
	  ))
       (t
	(progn
	  (etach-debug-msg (concat "null-decoding MIME type \'" T "\' encoding \'" E "\'"))
	  (message "null-decoding MIME type \'%s\' encoding \'%s\'" T E)
	  (save-excursion
	    (save-restriction
	      (narrow-to-region rbeg rend)
	      (decode-coding-region (point-min) (point-max) 'undecided)
	      (if (string-match "\\<text/html\\>" T)
		  (progn
		    (etach-debug-msg "converting null-decoded html to plain text")
		    (message "converting null-decoded html to plain text")
		    (apply 'call-process-region (point-min) (point-max)
			   etach-unhtml-command t t nil etach-unhtml-args)))
	      (goto-char (point-max))
	      (if (/= (preceding-char) ?\n)
		  (insert "\n"))
	      (if etach-fill-decoded-plain-text
		  (fill-region (point-min) (point-max)))
	      (if etach-clean-decoded-plain-text
		  (subst-char-in-region (point-min) (point-max) ?\r ?\n))))
	  )))
      ))

   (t
    (let ((F nil) ; file name
	  (Fcopy nil) ; copy of file name
	  (Ff nil) ; file name sans extension
	  (Fe nil) ; file name extension (including the dot)
	  (Ftag 1) ; file tag (in case FfFe exists)
	  (require-final-newline nil)
	  (insert-default-directory t)
	  (default-directory default-directory)
	  (skip-this-file nil)
	  (my-write-error nil)
	  (stuff-to-yank nil))
      ;; discard directory (path) portion of file names;
      ;; notice that the leading dots on file names are discarded, too:
      (if (or (string-match "\\<name=\"\\([^;]*/\\)*\\.*\\([^;]*\\)\""               T)
	      (string-match   "\\<name=\\([^;]*/\\)*\\.*\\([^;]*\\)\\([ \t;]\\|$\\)" T))
	  (setq F (match-string 2 T))
	(if (or (string-match "\\<filename=\"\\([^;]*/\\)*\\.*\\([^;]*\\)\"" Disp)
		(string-match   "\\<filename=\\([^;]*/\\)*\\.*\\([^;]*\\)\\([ \t;]\\|$\\)" Disp))
	    (setq F (match-string 2 Disp))
	  (if etach-prompt-me-for-file-names
	      (setq F "FILE")
	    (setq F (or (etach-who-is-this-from) (format-time-string "%Y-%m-%d"))))))
      (etach-debug-msg (concat "raw file name: [" F "]"))
      (if (string-match "^[ \t]*$" (file-name-nondirectory F))
	  (setq F "FILE"))
      (etach-safe-clean F) ; get rid of funny characters
      (if (not (string-match "\\.[a-zA-Z0-9]+$" F))
	  (let ((major-type)
		(minor-type))
	    (if (string-match "^\\(.*\\)/\\([^ \t;]*\\)" T)
		(progn
		  (setq major-type (match-string 1 T))
		  (setq minor-type (match-string 2 T))
		  ;; add a file name extension based on Content-Type:
		  (if (rassoc (list (concat major-type "/" minor-type)) etach-mime-type-alist)
		      (setq F (concat F
				      "."
				      (car (rassoc
					    (list (concat major-type "/" minor-type))
					    etach-mime-type-alist)))))))))
      (if (string-match "^\\(.*\\)\\(\\.[a-zA-Z0-9]+\\)$" F)
	  (progn
	    (setq Ff (match-string 1 F))
	    (setq Fe (match-string 2 F)))
	(setq Ff F)
	(setq Fe ""))
      (setq Fcopy (concat Ff Fe))
      (let ((detach-dir (if (= discard 0)
			    etach-detachment-default-directory
			  etach-detachment-discard-directory)))
	(setq default-directory
	      (concat
	       (if (or (string-match "^/" detach-dir)
		       (string-match "^[a-z]:/" detach-dir))
		   ""
		 default-directory)
	       detach-dir
	       (if (string-match "/$" detach-dir)
		   ""
		 "/"))))
      (etach-debug-msg (concat "default directory set to: " default-directory))
      (if (not (file-exists-p default-directory))
	  (progn
	    (etach-debug-msg (concat "creating directory: " default-directory))
	    (make-directory default-directory t)))
      (if (file-exists-p (concat Ff Fe))
	  (progn
	    (while (and (<= Ftag 9999) (file-exists-p (concat Ff (format "_%04d" Ftag) Fe)))
	      (setq Ftag (1+ Ftag)))
	    (setq Ff (concat Ff (format "_%04d" Ftag)))))
      (if (> Ftag 9999)
	  (setq F Fcopy)
	(setq F (concat Ff Fe)))
      (setq Fcopy F)
      (etach-debug-msg (concat "offered for detachment: " F))
      (if etach-prompt-me-for-file-names
	  (save-excursion
	    (goto-char hbeg) ; do this just to make visual connection between part and name
	    (setq F
		  (condition-case err
		      (read-file-name "Save as: "
				      default-directory
				      nil
				      nil
				      Fcopy)
		    ((quit error)
		     (setq skip-this-file t)
		     (etach-debug-msg (concat "skipping " Fcopy ": " (error-message-string err)))
		     (message "skipping %s: %s" Fcopy (error-message-string err))
		     Fcopy)))))
      (if (string-match "^[ \t]*$" (file-name-nondirectory F))
	  (progn
	    (setq F Fcopy)
	    (etach-debug-msg (concat "cannot accept blank filename, using " F " instead"))
	    (message "cannot accept blank filename, using %s instead" F)
	    ))
      (setq buffer-read-only nil)
      (if skip-this-file
	  nil
	;; here's where the action is:
	(setq F (expand-file-name F))
	(etach-debug-msg (concat "detaching: " F))

	(save-restriction
	  (if (string-match "\\<base64\\>" E)
	      (save-excursion
		(goto-char rbeg)
		(if (re-search-forward "[^A-Za-z0-9+/=\n]\\|[\n][\n]" rend t)
		    (progn
		      (backward-char)
		      (etach-debug-msg (concat "limiting region here, non-base64 char or blank line found"))
		      (narrow-to-region rbeg (point)))
		  (narrow-to-region rbeg rend)))
	    (narrow-to-region rbeg rend))

	  (setq stuff-to-yank (buffer-substring (point-min) (point-max)))
	  (kill-region (point-min) (point-max))
	  ;; this save-excursion is necessary if using write-file, since write-file
	  ;; visits the buffer after writing
	  (save-excursion
	    (let ((buffer (get-buffer-create " *temp*")))
	      (set-buffer buffer)
	      (unwind-protect
		  (progn
		    (insert stuff-to-yank) ; use this instead of (yank) to avoid setting mark
		    (cond
		     ((string-match "\\<base64\\>" E)
		      (progn
			(etach-debug-msg (concat "base64-decoding MIME type \'" T "\'..."))
			(message "base64-decoding MIME type \'%s\'..." T)
			(if etach-use-mimencode
			    (let ((inhibit-eol-conversion t))
			      (shell-command-on-region (point-min) (point-max) "mimencode -u" t t))
			  (base64-decode-region (point-min) (point-max)))))
		     ((string-match "\\<quoted-printable\\>" E)
		      (progn
			(etach-debug-msg (concat "quoted-printable-decoding MIME type \'" T "\'..."))
			(message "quoted-printable-decoding MIME type \'%s\'..." T)
			(if etach-use-mimencode
			    (let ((inhibit-eol-conversion t))
			      (shell-command-on-region (point-min) (point-max) "mimencode -u -q" t t))
			  (etach-rmail-decode-quoted-printable (point-min) (point-max)))))
		     (t
		      (progn
			(etach-debug-msg (concat "leaving as-is MIME type \'" T "\' encoding \'" E "\'"))
			(message "leaving as-is MIME type \'%s\' encoding \'%s\'" T E))))

		    (condition-case err
			(let ((jka-compr-compression-info-list nil)
			      (coding-system-for-write 'no-conversion))
			  (if (or (string-match "^[0-9][.]" emacs-version)
				  (string-match "^1[0-9][.]" emacs-version)
				  (string-match "^20[.][0-2][.]" emacs-version))
			      (write-region (point-min) (point-max) F nil nil nil)
			    (write-region (point-min) (point-max) F nil nil nil t)))
		      ((quit error)
		       (setq my-write-error t)
		       (set-buffer-modified-p nil)
		       (etach-debug-msg (concat "un-detaching: " (error-message-string err)))
		       (message "un-detaching: %s" (error-message-string err))
		       (sit-for 1)
		       )))
		(kill-buffer buffer))))) ; end save-restriction

	(if my-write-error
	    (progn
	      (etach-debug-msg (concat "restoring MIME attachment due to error"))
	      (insert stuff-to-yank))
	  (if etach-restore-attachments-after-detach
	      (progn
		(etach-debug-msg (concat "restoring MIME attachment per user preference"))
		(save-excursion
		  (if (re-search-backward "^[ \t]*$" hbeg t)
		      (replace-match (concat "X-Detachment: ["
					     etach-detached-file-label-separator-string
					     "file:"
					     etach-detached-file-label-separator-string
					     F
					     etach-detached-file-label-separator-string
					     "]\n"))))
		(insert stuff-to-yank))
	    (insert "[" etach-detached-file-label-separator-string "file:" etach-detached-file-label-separator-string F etach-detached-file-label-separator-string "]\n")
	    ))
	) ; end of stuff to do if skip-this-file is nil
      )))

  (etach-rewrite-content-headers T E Disp hbeg)
  (etach-mime-decode-cleanup depth T E Disp)
  (setq buffer-read-only t)
  (etach-debug-msg (concat "exiting etach-mime-decode with default directory: " default-directory)))

(defun etach-mime-detach (bboundary depth discard)
  "Detach the encoded attachments from the MIME part or message starting at point."
  (etach-debug-msg (concat "etach-mime-detach called with bboundary [" bboundary "] depth " (number-to-string depth) " discard " (number-to-string discard)))
  (let ((etach-content-type (concat "text/plain; charset=" etach-default-charset))
	(etach-content-transfer-encoding "7bit")
	(etach-content-id "")
	(etach-content-description "")
	(etach-content-disposition "")
	(hbeg (point))
	(hend (point))
	(header-chars "[\]!\"#\$%&'()\*\+,\./0-9;<=>\?@A-Z_^\[`a-z{|}~-]")) ; ascii 33-126 except 58
    ;; advance to start of first header candidate
    (save-excursion
      (re-search-forward "^[ \t]*$") ; the Content- lines can be absent, but there should always be a blank line
      (beginning-of-line)
      (setq hend (point)))
    (beginning-of-line)
    ;; we need the following in case the bboundary looks like a header
    ;; (e.g., non-compliant sender using colon in MIME separator):
    (if (looking-at (regexp-quote bboundary))
	(forward-line))
    (re-search-forward (concat "^" header-chars "+:") hend t)
    (beginning-of-line)
    (etach-debug-msg (concat "etach-mime-detach: header lines begin here"))
    (setq hbeg (point))
    ;; get headers
    (etach-mime-get-content-headers)
    (beginning-of-line)
    ;; advance to first line after separator
    (forward-line)
    (cond

     ((etach-mime-part-is-multipart etach-content-type)
      (let* ((b (etach-mime-get-boundary-string etach-content-type))
	     (bb (concat "--" b)))
	(etach-debug-msg (concat "etach-mime-detach processing (multipart): " etach-content-type))
	(re-search-forward (regexp-quote bb) nil t)
	(beginning-of-line)
	(while (not (looking-at (regexp-quote (concat bb "--"))))
	  (if (etach-mime-part-is-multipart-alternative etach-content-type)
	      (etach-mime-detach bb (+ depth 1) 1) ; always discard alternatives
	    (etach-mime-detach bb (+ depth 1) discard)))
	; we should be at a boundary, but in case there are blank lines we better make sure:
	(re-search-forward (if (string= bboundary "\\'") "\\'" (regexp-quote bboundary)))
	(beginning-of-line)))

     ((etach-mime-part-is-message etach-content-type)
      (progn
	(etach-debug-msg (concat "etach-mime-detach processing (message): " etach-content-type))
	(etach-mime-detach bboundary (+ depth 1) discard)
	; we should be at a boundary, but in case there are blank lines we better make sure:
	(re-search-forward (if (string= bboundary "\\'") "\\'" (regexp-quote bboundary)))
	(beginning-of-line)))

     (t
      (let ((ebeg (point))
	    (eend (point)))
	(etach-debug-msg (concat "etach-mime-detach processing: " etach-content-type))
	(re-search-forward (if (string= bboundary "\\'") "\\'" (regexp-quote bboundary)))
	(beginning-of-line)
	(setq eend (point))
	(etach-mime-decode ebeg eend
			   etach-content-type
			   etach-content-transfer-encoding
			   etach-content-id
			   etach-content-description
			   etach-content-disposition
			   hbeg
			   depth
			   discard)
	; we should be at a boundary, but in case there are blank lines we better make sure:
	(re-search-forward (if (string= bboundary "\\'") "\\'" (regexp-quote bboundary)))
	(beginning-of-line)
	))

     )))

(defun etach-get-babyl-header ()
  "Return the Babyl header as a string."
  (set-marker (aref rmail-message-vector (1+ rmail-current-message))
	      (point-max))
  (if (boundp 'rmail-summary-vector)
      (aset rmail-summary-vector (1- rmail-current-message) nil))
  (save-excursion
    (rmail-widen-to-current-msgbeg
     (function (lambda ()
		 (if (search-forward "*** EOOH ***\n" nil t)
		     (etach-debug-msg "etach-get-babyl-header: end of babyl header found")
		   (etach-debug-msg "etach-get-babyl-header: end of babyl header NOT found"))
		 (buffer-substring (point-min) (point)))))))

(defun etach-mime-decode-cleanup (leave-babyl-mime-headers-alone T E Disp) ; see rmail-cease-edit in rmailedit.el
  "Clean up the RMAIL structure."
  (etach-debug-msg (concat "etach-mime-decode-cleanup called with parameter " (number-to-string leave-babyl-mime-headers-alone)))
  (save-excursion
    (goto-char (point-max))
    (if (/= (preceding-char) ?\n)
	(insert "\n"))
    (set-marker (aref rmail-message-vector (1+ rmail-current-message))
		(point))
    (if (boundp 'rmail-summary-vector)
	(aset rmail-summary-vector (1- rmail-current-message) nil))
    (save-excursion
      (rmail-widen-to-current-msgbeg
       (function (lambda ()
		   (if (= leave-babyl-mime-headers-alone 0)
		       (progn
			 (save-excursion
			   (if (search-forward "*** EOOH ***" nil t)
			       (etach-debug-msg "etach-mime-decode-cleanup: end of babyl header found")
			     (etach-debug-msg "etach-mime-decode-cleanup: end of babyl header NOT found"))
			   (etach-rewrite-content-headers T E Disp (point-min)))
			 (if (boundp 'rmail-summary-vector)
			     (progn
			       (forward-line 2)
			       (if (looking-at "Summary-line: ")
				   (delete-region (point)
						  (progn (forward-line 1)
							 (point))))))))))))
    (rmail-show-message)))

(defun etach-downcase (s)
  "Take string as argument, return lowercase version."
  (let ((x 65))
    (while (<= x 90)
      (etach-subst-char-in-string x (+ x 32) s t)
      (setq x (+ 1 x)))))

(defun etach-safe-clean (f)
  "Clean up a string to make it suitable as a safe one-word file name."
  (let ((x 0))
    (while (<= x 44)
      (etach-subst-char-in-string x ?_ f t)
      (setq x (+ 1 x)))
    (setq x 58)
    (while (<= x 64)
      (etach-subst-char-in-string x ?_ f t)
      (setq x (+ 1 x)))
    (setq x 91)
    (while (<= x 94)
      (etach-subst-char-in-string x ?_ f t)
      (setq x (+ 1 x)))
    (setq x 96)
    (while (<= x 96)
      (etach-subst-char-in-string x ?_ f t)
      (setq x (+ 1 x)))
    (setq x 123)
    (while (<= x 255)
      (etach-subst-char-in-string x ?_ f t)
      (setq x (+ 1 x)))))

(defun etach-debug-msg (msg-string)
  "Write a debug message."
  (if etach-debug
      (let ((debug-msg
	     (concat
	      (buffer-name)
	      " (line "
	      (number-to-string (+ 1 (count-lines (point-min) (point))))
	      " ["
	      (if (char-after (1- (point)))

		  (if (= (preceding-char) ?\n)
		      "\\n"
		    (char-to-string (char-after (1- (point))))))

	      "/"
	      (if (char-after (point))
		  (if (= (following-char) ?\n)
		      "\\n"
		    (char-to-string (char-after (point)))))
	      "]): " msg-string "\n")))
	(get-buffer-create "etach-debug")
	(save-excursion
	  (set-buffer "etach-debug")
	  (goto-char (point-max))
	  (insert debug-msg)))))

;;; The following are local copies of functions that may be absent from
;;; some Emacs versions or installations (names have "etach-" prepended).

;;; The following is nicked from sendmail.el (and modified in form but
;;; not function):

(defun etach-mail-header-end ()
  "Return the buffer location of the end of headers, as a number."
   (save-restriction
     (widen)
     (save-excursion
       (goto-char (point-min))
       (while (looking-at "^[^: \n]+:\\|^[ \t]")
	 (forward-line 1))
       (point))))

;;; The following is taken from subr.el:

(defun etach-subst-char-in-string (fromchar tochar string &optional inplace)
  "Replace FROMCHAR with TOCHAR in STRING each time it occurs.
Unless optional argument INPLACE is non-nil, return a new string."
  (let ((i (length string))
	(newstr (if inplace string (copy-sequence string))))
    (while (> i 0)
      (setq i (1- i))
      (if (eq (aref newstr i) fromchar)
	  (aset newstr i tochar)))
    newstr))

;;; The following are taken from rmail.el:

(defun etach-rmail-msg-is-pruned ()
  (rmail-maybe-set-message-counters)
  (save-restriction
    (narrow-to-region (rmail-msgbeg rmail-current-message) (point-max))
    (save-excursion
      (goto-char (point-min))
      (forward-line 1)
      (= (following-char) ?1))))

(defun etach-rmail-decode-quoted-printable (from to)
  "Decode Quoted-Printable in the region between FROM and TO."
  (interactive "r")
  (goto-char from)
  (or (markerp to)
      (setq to (copy-marker to)))
  (while (search-forward "=" to t)
    (cond ((eq (following-char) ?\n)
	   (delete-char -1)
	   (delete-char 1))
	  ((looking-at "[0-9A-F][0-9A-F]")
	   (let ((byte (etach-rmail-hex-string-to-integer
			(buffer-substring (point) (+ 2 (point))))))
	     (delete-region (1- (point)) (+ 2 (point)))
	     (insert byte)))
	  ((looking-at "=")
	   (delete-char 1))
	  (t
	   (message "Malformed MIME quoted-printable message")))))

(defun etach-rmail-hex-string-to-integer (hex-string)
  "Return decimal integer for HEX-STRING."
  (let ((hex-num 0)
	(index 0))
    (while (< index (length hex-string))
      (setq hex-num (+ (* hex-num 16)
		       (etach-rmail-hex-char-to-integer (aref hex-string index))))
      (setq index (1+ index)))
    hex-num))

(defun etach-rmail-hex-char-to-integer (character)
  "Return CHARACTER's value interpreted as a hex digit."
  (if (and (>= character ?0) (<= character ?9))
      (- character ?0)
    (let ((ch (logior character 32)))
      (if (and (>= ch ?a) (<= ch ?f))
	  (- ch (- ?a 10))
	(error "Invalid hex digit `%c'" ch)))))

;;; let (provide 'etach) be the last line:

(provide 'etach)

;;; etach.el ends here
============================================================




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

* Re: Sending attachments
  2009-07-01 19:47 Sending attachments Richard Stallman
  2009-07-01 19:58 ` Alfred M. Szmidt
@ 2009-07-01 23:34 ` Miles Bader
  2009-07-02 19:21   ` Richard Stallman
  2009-07-02  1:01 ` Sending attachments Robert J. Chassell
  2 siblings, 1 reply; 167+ messages in thread
From: Miles Bader @ 2009-07-01 23:34 UTC (permalink / raw)
  To: emacs-devel

Richard Stallman <rms@gnu.org> writes:
> Is there any facility that can be used in Mail mode
> to put attachments into the message?

Use message-mode.

-Miles

-- 
Cannon, n. An instrument employed in the rectification of national boundaries.





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

* Re: Sending attachments
  2009-07-01 19:47 Sending attachments Richard Stallman
  2009-07-01 19:58 ` Alfred M. Szmidt
  2009-07-01 23:34 ` Miles Bader
@ 2009-07-02  1:01 ` Robert J. Chassell
  2009-07-02 13:39   ` Miles Bader
  2 siblings, 1 reply; 167+ messages in thread
From: Robert J. Chassell @ 2009-07-02  1:01 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

Richard Stallman <rms@gnu.org> asked:

    > Is there any facility that can be used in Mail mode
    > to put attachments into the message?

Marc Andreessen wrote Emacs Lisp to add gif, jpeg, postscript,
raw-binary, and raw-nonbinary in 1992 in MIME and in 1993-95 Masanobu
UMEDA wrote Emacs Lisp to edit MIME text messages.

In 1996, Ray Moody wrote Emacs Lisp to read MIME.

As far as I know, none were part of GNU Emacs.  I can send the libraries
if wanted.

-- 
    Robert J. Chassell                          
    bob@rattlesnake.com                         bob@gnu.org
    http://www.rattlesnake.com                  http://www.teak.cc




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

* Re: Sending attachments
  2009-07-02  1:01 ` Sending attachments Robert J. Chassell
@ 2009-07-02 13:39   ` Miles Bader
  2009-07-02 14:33     ` Jason Rumney
                       ` (2 more replies)
  0 siblings, 3 replies; 167+ messages in thread
From: Miles Bader @ 2009-07-02 13:39 UTC (permalink / raw)
  To: emacs-devel

bob@rattlesnake.com (Robert J. Chassell) writes:
> Marc Andreessen wrote Emacs Lisp to add gif, jpeg, postscript,
> raw-binary, and raw-nonbinary in 1992 in MIME and in 1993-95 Masanobu
> UMEDA wrote Emacs Lisp to edit MIME text messages.
> In 1996, Ray Moody wrote Emacs Lisp to read MIME.
>
> As far as I know, none were part of GNU Emacs.  I can send the libraries
> if wanted.

Emacs _already_ has mime libraries; they seem to work quite well.
Message mode (and Gnus) already uses them.  Message mode is more or less
a superset of mail-mode.

It seems fairly obvious that the best solutions are:

  1. In the long-term, merge mail-mode and message-mode.  It's silly
     that there are two modes.  AIUI, this is already an Emacs goal.

  2. In the short-term, just use message mode when you want to send
     mime mail.

No?

-Miles

-- 
Vote, v. The instrument and symbol of a freeman's power to make a fool of
himself and a wreck of his country.





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

* Re: Sending attachments
  2009-07-02 13:39   ` Miles Bader
@ 2009-07-02 14:33     ` Jason Rumney
  2009-07-02 16:40     ` Reiner Steib
  2009-07-02 17:26     ` Chong Yidong
  2 siblings, 0 replies; 167+ messages in thread
From: Jason Rumney @ 2009-07-02 14:33 UTC (permalink / raw)
  To: Miles Bader; +Cc: emacs-devel

Miles Bader wrote:
>   1. In the long-term, merge mail-mode and message-mode.  It's silly
>      that there are two modes.  AIUI, this is already an Emacs goal.
>   

What features of mail-mode are missing from message-mode?





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

* Re: Sending attachments
  2009-07-02 13:39   ` Miles Bader
  2009-07-02 14:33     ` Jason Rumney
@ 2009-07-02 16:40     ` Reiner Steib
  2009-07-03 22:52       ` Richard Stallman
  2009-07-02 17:26     ` Chong Yidong
  2 siblings, 1 reply; 167+ messages in thread
From: Reiner Steib @ 2009-07-02 16:40 UTC (permalink / raw)
  To: emacs-devel

On Thu, Jul 02 2009, Miles Bader wrote:

> Emacs _already_ has mime libraries; they seem to work quite well.

,----[ (info "(emacs-mime)Top") ]
| Emacs MIME
| **********
| 
| This manual documents the libraries used to compose and display MIME
| messages.
`----

For composing MIME message, there's the `mml' library (see
lisp/gnus/mml*.el) and (info "(emacs-mime)Composing").

> Message mode (and Gnus) already uses them.

MH-E also uses it.

> Message mode is more or less a superset of mail-mode.

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/




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

* Re: Sending attachments
  2009-07-02 13:39   ` Miles Bader
  2009-07-02 14:33     ` Jason Rumney
  2009-07-02 16:40     ` Reiner Steib
@ 2009-07-02 17:26     ` Chong Yidong
  2009-07-03 13:47       ` Richard Stallman
  2009-07-03 14:21       ` Sending attachments Alfred M. Szmidt
  2 siblings, 2 replies; 167+ messages in thread
From: Chong Yidong @ 2009-07-02 17:26 UTC (permalink / raw)
  To: Miles Bader; +Cc: emacs-devel

Miles Bader <miles@gnu.org> writes:

>   1. In the long-term, merge mail-mode and message-mode.  It's silly
>      that there are two modes.  AIUI, this is already an Emacs goal.

Would anyone like to work on this?

The first step is to check for incompatibilities and missing features in
message-mode.  Currently, message-mode recognizes many mail-mode
variables, such as `sendmail-program', and do the right thing in
response.  Someone needs to go through all the sendmail.el variables and
make sure they are all handled properly in message-mode.  Once that is
done, we can start to migrate rmail, the bug reporter, and any other
places that use mail-mode to message-mode.




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

* Re: Sending attachments
  2009-07-01 23:34 ` Miles Bader
@ 2009-07-02 19:21   ` Richard Stallman
  2009-07-03  2:37     ` Miles Bader
  0 siblings, 1 reply; 167+ messages in thread
From: Richard Stallman @ 2009-07-02 19:21 UTC (permalink / raw)
  To: Miles Bader; +Cc: emacs-devel

    > Is there any facility that can be used in Mail mode
    > to put attachments into the message?

    Use message-mode.

There was no reason to add Message mode to Emacs at all.
Someone decided to write a duplicate mode instead of
improving the one we had, and snuck it into Emacs without
submitting the decision to discussion.

Perhaps I will merge the relevant code from Message mode
into Mail mode.




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

* Re: Sending attachments
  2009-07-02 19:21   ` Richard Stallman
@ 2009-07-03  2:37     ` Miles Bader
  2009-07-03  7:44       ` message-mode / mail-mode (was: Sending attachments) Teemu Likonen
  0 siblings, 1 reply; 167+ messages in thread
From: Miles Bader @ 2009-07-03  2:37 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

Richard Stallman <rms@gnu.org> writes:
>     Use message-mode.
>
> There was no reason to add Message mode to Emacs at all.
> Someone decided to write a duplicate mode instead of
> improving the one we had, and snuck it into Emacs without
> submitting the decision to discussion.

I agree, there shouldn't be this duplication, and we should try to fix
it -- but since message-mode has much more functionality (which is
widely used and important), we can't just get rid of message-mode.
Thus we should merge the two modes.

Since message-mode is mostly a superset of mail-mode, then
_technically_ it seems pretty likely that the safest and quickest way
to accomplish this merge would be to adopt message-mode (after fixing
any problems with message-mode, and with whatever other changes are
necessary to help mail-mode users).

I realize that the whole mess annoys you (me too), and that to some
degree it's message-mode that's "at fault" -- but we also need to
think about the technical issues, developer time, and our users.

Message-mode wasn't created or merged maliciously.  Let's just let
the past be the past, and try to do the best thing for Emacs and its
users, and merge the two modes into one.  If the name "mail-mode" is
preferred, then message-mode can be renamed (with appropriate
compatibility hooks for existing users of message-mode).

Do you have any technical (UI/interfaces/functionality/code-quality/etc)
objections to message-mode?  Is the code ugly?  Does it not work well
with rmail?  Do you not like the name?

Thanks,

-Miles

-- 
`Life is a boundless sea of bitterness'




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

* message-mode / mail-mode (was: Sending attachments)
  2009-07-03  2:37     ` Miles Bader
@ 2009-07-03  7:44       ` Teemu Likonen
  2009-07-03  8:43         ` message-mode / mail-mode Miles Bader
  0 siblings, 1 reply; 167+ messages in thread
From: Teemu Likonen @ 2009-07-03  7:44 UTC (permalink / raw)
  To: Miles Bader; +Cc: rms, emacs-devel

On 2009-07-03 11:37 (+0900), Miles Bader wrote:

> Do you have any technical (UI/interfaces/functionality/code-quality/etc)
> objections to message-mode?  Is the code ugly?  Does it not work well
> with rmail?  Do you not like the name?

You asked Richard but I'll voice my opinion or point anyway. I mostly
use only Gnus and message-mode but there is (at least) one thing in
mail-mode which is not very well supported in message-mode: editing raw
mbox or mail files.

Sometimes I need to edit raw mail/mbox files manually. Similar situation
is composing a mail with a mail user agent like Mutt [1]. In
message-mode there's command M-q (fill-paragraph) which works
differently when cursor is in message's header and when it's on
message's body. There's also C-a which is context sensitive, probably
there are others.

Context-sensitive commands are good but in message-mode they seem to
require that the "--text follows this line--" separator line exists.
This fact pretty much ties message-mode to only Emacs internal mail/news
applications. If header and body is separated only by an empty line
(which is the case with raw mail files) then message-mode's
context-sensitive commands like M-q seem to always operate in "header
mode". This makes M-q quite useless as it indents the second line of a
paragraph with a TAB character.

I wish there was just a simple mode for editing raw mail files. Just
highlighting messages' headers and recognizing ">" as a comment char
would suffice. Functions like sending mail don't make much sense with
raw mail files. Currently mail-mode is a bit better on this area,
perhaps because it's not too clever, I don't know. With Gnus
message-mode is much better.


---------------
 1. http://www.mutt.org/




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

* Re: message-mode / mail-mode
  2009-07-03  7:44       ` message-mode / mail-mode (was: Sending attachments) Teemu Likonen
@ 2009-07-03  8:43         ` Miles Bader
  2009-07-03  8:55           ` Miles Bader
                             ` (2 more replies)
  0 siblings, 3 replies; 167+ messages in thread
From: Miles Bader @ 2009-07-03  8:43 UTC (permalink / raw)
  To: Teemu Likonen; +Cc: rms, emacs-devel

Teemu Likonen <tlikonen@iki.fi> writes:
> Sometimes I need to edit raw mail/mbox files manually. Similar situation
> is composing a mail with a mail user agent like Mutt [1]. In
> message-mode there's command M-q (fill-paragraph) which works
> differently when cursor is in message's header and when it's on
> message's body. There's also C-a which is context sensitive, probably
> there are others.
>
> Context-sensitive commands are good but in message-mode they seem to
> require that the "--text follows this line--" separator line exists.
> This fact pretty much ties message-mode to only Emacs internal mail/news
> applications. If header and body is separated only by an empty line
> (which is the case with raw mail files) then message-mode's
> context-sensitive commands like M-q seem to always operate in "header
> mode". This makes M-q quite useless as it indents the second line of a
> paragraph with a TAB character.

You should set the variable `mail-header-separator' to ""; message-mode
also pays attention to this variable.

[I do this, and it makes filling in both mail-mode and message-mode "do
the right thing" for standard mail files.]

-Miles

-- 
"... The revolution will be no re-run brothers; The revolution will be live."




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

* Re: message-mode / mail-mode
  2009-07-03  8:43         ` message-mode / mail-mode Miles Bader
@ 2009-07-03  8:55           ` Miles Bader
  2009-07-03  9:07           ` Teemu Likonen
  2009-07-05 21:40           ` Stefan Monnier
  2 siblings, 0 replies; 167+ messages in thread
From: Miles Bader @ 2009-07-03  8:55 UTC (permalink / raw)
  To: Teemu Likonen; +Cc: rms, emacs-devel

BTW, I use the following little hack for editing mutt files:

   (defun setup-mutt-buffer ()
     (require 'sendmail)
     ;; be like mail-mode, but without the special keybindings                     
     (mail-mode)
     (set (make-local-variable 'mail-header-separator) "")
     (use-local-map nil)
     (change-signature))

   (add-to-list 'auto-mode-alist '("\\<mutt-" . setup-mutt-buffer))

[I suppose it might more properly be done using define-derived-mode or
something, but...]

-Miles

-- 
White, adj. and n. Black.




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

* Re: message-mode / mail-mode
  2009-07-03  8:43         ` message-mode / mail-mode Miles Bader
  2009-07-03  8:55           ` Miles Bader
@ 2009-07-03  9:07           ` Teemu Likonen
  2009-07-05 21:40           ` Stefan Monnier
  2 siblings, 0 replies; 167+ messages in thread
From: Teemu Likonen @ 2009-07-03  9:07 UTC (permalink / raw)
  To: Miles Bader; +Cc: rms, emacs-devel

On 2009-07-03 17:43 (+0900), Miles Bader wrote:

> You should set the variable `mail-header-separator' to "";
> message-mode also pays attention to this variable.
>
> [I do this, and it makes filling in both mail-mode and message-mode
> "do the right thing" for standard mail files.]

Ah, thanks! Then I don't have use for mail-mode anymore. Message-mode
doesn't recognize headers and bodies in multi-message mbox files but I
rarely need to load mbox files directly to my editor so this is not
really important.




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

* Re: Sending attachments
  2009-07-02 17:26     ` Chong Yidong
@ 2009-07-03 13:47       ` Richard Stallman
  2009-07-03 14:21         ` Alfred M. Szmidt
  2009-07-03 17:37         ` Chong Yidong
  2009-07-03 14:21       ` Sending attachments Alfred M. Szmidt
  1 sibling, 2 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-03 13:47 UTC (permalink / raw)
  To: Chong Yidong; +Cc: emacs-devel, miles

I object strenuously to the idea of replacing the very simple Mail
mode with something complex from Gnus.




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

* Re: Sending attachments
  2009-07-02 17:26     ` Chong Yidong
  2009-07-03 13:47       ` Richard Stallman
@ 2009-07-03 14:21       ` Alfred M. Szmidt
  2009-07-04 15:33         ` Chad Brown
  2009-07-05 20:05         ` Byung-Hee HWANG
  1 sibling, 2 replies; 167+ messages in thread
From: Alfred M. Szmidt @ 2009-07-03 14:21 UTC (permalink / raw)
  To: Chong Yidong; +Cc: emacs-devel, miles

   The first step is to check for incompatibilities and missing
   features in message-mode.  Currently, message-mode recognizes many
   mail-mode variables, such as `sendmail-program', and do the right
   thing in response.  Someone needs to go through all the sendmail.el
   variables and make sure they are all handled properly in
   message-mode.  Once that is done, we can start to migrate rmail,
   the bug reporter, and any other places that use mail-mode to
   message-mode.

That is much  unneeded work, the only thing  that uses message-mode is
gnus.  It would be much easier to add etach, or similar, to mail-mode,
and make gnus use mail-mode which is the default mode for sending mail
in Emacs.




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

* Re: Sending attachments
  2009-07-03 13:47       ` Richard Stallman
@ 2009-07-03 14:21         ` Alfred M. Szmidt
  2009-07-05 21:41           ` Stefan Monnier
  2009-07-03 17:37         ` Chong Yidong
  1 sibling, 1 reply; 167+ messages in thread
From: Alfred M. Szmidt @ 2009-07-03 14:21 UTC (permalink / raw)
  To: rms; +Cc: cyd, miles, emacs-devel

   I object strenuously to the idea of replacing the very simple Mail
   mode with something complex from Gnus.

As a user of mail-mode, I agree fully.

Adding something like etach would be the right solution.




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

* Re: Sending attachments
  2009-07-03 13:47       ` Richard Stallman
  2009-07-03 14:21         ` Alfred M. Szmidt
@ 2009-07-03 17:37         ` Chong Yidong
  2009-07-03 22:52           ` Richard Stallman
  1 sibling, 1 reply; 167+ messages in thread
From: Chong Yidong @ 2009-07-03 17:37 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel, miles

Richard Stallman <rms@gnu.org> writes:

> I object strenuously to the idea of replacing the very simple Mail
> mode with something complex from Gnus.

It's a question of necessary complexity.  You pointed out that it's
ludicrous to have two modes that perform similar functions.  Message
mode is more complex, as it provides more features (e.g. support for
attachments).  Any merger cannot very well remove existing features, so
this additional complexity will not go away.

Another possibility is to refactor message-mode into a simple core,
which can be merged with mail-mode, plus an "xtras" library that can be
loaded on demand.  That would be a much larger job.




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

* Re: Sending attachments
  2009-07-03 17:37         ` Chong Yidong
@ 2009-07-03 22:52           ` Richard Stallman
  2009-07-04 15:11             ` Teemu Likonen
                               ` (2 more replies)
  0 siblings, 3 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-03 22:52 UTC (permalink / raw)
  To: Chong Yidong; +Cc: emacs-devel, miles

    > I object strenuously to the idea of replacing the very simple Mail
    > mode with something complex from Gnus.

    It's a question of necessary complexity.

I don't think so.  Look at all the libraries message.el loads.


    (require 'hashcash)
    (require 'canlock)
    (require 'mailheader)
    (require 'gmm-utils)
    (require 'nnheader)

      That loads
	(require 'mail-utils)
	(require 'mm-util)
	(require 'gnus-util)

    ;; This is apparently necessary even though things are autoloaded.
    ;; Because we dynamically bind mail-abbrev-mode-regexp, we'd better
    ;; require mailabbrev here.
    (if (featurep 'xemacs)
	(require 'mail-abbrevs)
      (require 'mailabbrev))
    (require 'mail-parse)
    (require 'mml)
    (require 'rfc822)
    (require 'ecomplete)

I don't want to replace the simple sendmail.el with this tremendous
pile of complexity.

message.el is also 8000 lines long, where sendmail.el is under 2000
lines.  I expect that sending attachments won't require more than 200
lines.




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

* Re: Sending attachments
  2009-07-02 16:40     ` Reiner Steib
@ 2009-07-03 22:52       ` Richard Stallman
  2009-07-04 14:39         ` Robert J. Chassell
  2009-07-04 15:19         ` Andreas Schwab
  0 siblings, 2 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-03 22:52 UTC (permalink / raw)
  To: Reiner Steib; +Cc: emacs-devel

    For composing MIME message, there's the `mml' library (see
    lisp/gnus/mml*.el) and (info "(emacs-mime)Composing").

mml.el says

    ;;; mml.el --- A package for parsing and validating MML documents

It does not say that it can be used for composing them.
Is the comment erroneous?

According to the documentation in "(emacs-mime)Composing",
one must put certain text in the buffer
which then gets converted to Mime parts,

Maybe that is convenient for some cases, but what I would like
is a simpler command that just attaches a file.

Has anyone written such a thing?

Bob Chassell wrote:

    Marc Andreessen wrote Emacs Lisp to add gif, jpeg, postscript,
    raw-binary, and raw-nonbinary in 1992 in MIME and in 1993-95 Masanobu
    UMEDA wrote Emacs Lisp to edit MIME text messages.

Does any of that do the simple thing I would like?




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

* Re: Sending attachments
  2009-07-03 22:52       ` Richard Stallman
@ 2009-07-04 14:39         ` Robert J. Chassell
  2009-07-04 15:19         ` Andreas Schwab
  1 sibling, 0 replies; 167+ messages in thread
From: Robert J. Chassell @ 2009-07-04 14:39 UTC (permalink / raw)
  To: rms, emacs-devel; +Cc: Reiner.Steib, emacs-devel

mime-compose-1.5.el is 52576 bytes and 1284 lines long including a
commented out patch for the Sun Record program demo.  Without the patch,
mime-compose-1.5.el is 49428 bytes and 1182 lines long.

-- 
    Robert J. Chassell                          
    bob@rattlesnake.com                         bob@gnu.org
    http://www.rattlesnake.com                  http://www.teak.cc




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

* Re: Sending attachments
  2009-07-03 22:52           ` Richard Stallman
@ 2009-07-04 15:11             ` Teemu Likonen
  2009-07-04 15:54               ` Leo
  2009-07-05 14:47             ` Chong Yidong
  2009-07-15 21:51             ` Reducing Gnus dependencies in message.el (was: Sending attachments) Reiner Steib
  2 siblings, 1 reply; 167+ messages in thread
From: Teemu Likonen @ 2009-07-04 15:11 UTC (permalink / raw)
  To: rms; +Cc: Chong Yidong, miles, emacs-devel

On 2009-07-03 18:52 (-0400), Richard Stallman wrote:

> I don't want to replace the simple sendmail.el with this tremendous
> pile of complexity.

I have an idea: Let's have two different modes, a simple mode called
mail-mode and a complex mode named message-mode which has more features.
People who like simplicity can use mail-mode and people who need more
features can use message-mode. How does that sound? :-)

> message.el is also 8000 lines long, where sendmail.el is under 2000
> lines.  I expect that sending attachments won't require more than 200
> lines.

I think it's clear that message-mode contains more features over
mail-mode than just attachments.

A humble request from a user: if some kind of code reordering or merging
of the modes takes place please don't cripple message-mode's current
features too badly.




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

* Re: Sending attachments
  2009-07-03 22:52       ` Richard Stallman
  2009-07-04 14:39         ` Robert J. Chassell
@ 2009-07-04 15:19         ` Andreas Schwab
  1 sibling, 0 replies; 167+ messages in thread
From: Andreas Schwab @ 2009-07-04 15:19 UTC (permalink / raw)
  To: rms; +Cc: Reiner Steib, emacs-devel

Richard Stallman <rms@gnu.org> writes:

> According to the documentation in "(emacs-mime)Composing",
> one must put certain text in the buffer
> which then gets converted to Mime parts,
>
> Maybe that is convenient for some cases, but what I would like
> is a simpler command that just attaches a file.
>
> Has anyone written such a thing?

C-c RET f runs the command mml-attach-file, which is an interactive
compiled Lisp function in `mml.el'.

It is bound to <menu-bar> <Attachments> <Attach File...>, C-c RET f, C-c
C-a.

(mml-attach-file file &optional type description disposition)

Attach a file to the outgoing MIME message.
The file is not inserted or encoded until you send the message with
`C-c C-c' or `C-c C-s'.

file is the name of the file to attach.  type is its
content-type, a string of the form "type/subtype".  description
is a one-line description of the attachment.  The disposition
specifies how the attachment is intended to be displayed.  It can
be either "inline" (displayed automatically within the message
body) or "attachment" (separate from the body).

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."




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

* Re: Sending attachments
  2009-07-03 14:21       ` Sending attachments Alfred M. Szmidt
@ 2009-07-04 15:33         ` Chad Brown
  2009-07-04 15:53           ` Eli Zaretskii
  2009-07-05 20:05         ` Byung-Hee HWANG
  1 sibling, 1 reply; 167+ messages in thread
From: Chad Brown @ 2009-07-04 15:33 UTC (permalink / raw)
  To: emacs-devel

On Jul 3, 2009, at 7:21 AM, Alfred M. Szmidt wrote:

> That is much  unneeded work, the only thing  that uses message-mode is
> gnus.

MH-e uses message-mode, as do a few third-party elisp mail packages  
(or they did when I last looked, a few years ago).  For better or  
worse, MIME handling is seen as necessary in most elisp mail packages,  
and is tremendously fiddly, which leaves most people relying on the  
gnus-ish code.

Sadly, I'm not in a good position to offer to help with either  
proposal, but I doubt that you can make mail-mode usable for the mime- 
handling features that multiple packages want from message-mode  
without significant (mostly duplicated) effort.

*Chad




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

* Re: Sending attachments
  2009-07-04 15:33         ` Chad Brown
@ 2009-07-04 15:53           ` Eli Zaretskii
  2009-07-04 17:08             ` Chad Brown
                               ` (2 more replies)
  0 siblings, 3 replies; 167+ messages in thread
From: Eli Zaretskii @ 2009-07-04 15:53 UTC (permalink / raw)
  To: Chad Brown; +Cc: emacs-devel

> From: Chad Brown <yandros@MIT.EDU>
> Date: Sat, 4 Jul 2009 08:33:56 -0700
> 
> I doubt that you can make mail-mode usable for the mime- handling
> features that multiple packages want from message-mode without
> significant (mostly duplicated) effort.

Could you please post a list of the features you had in mind, so that
the effort could be estimated?

Just looking at email messages with MIME attachments, it looks like
each attachment is just a fancy header line and a body encoded by
either base64 or quoted-printable.  Implementing a simple command that
asks for a file name and then encodes it and puts the result in the
*mail* buffer sounds easy enough, so I'm sure I'm missing something.




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

* Re: Sending attachments
  2009-07-04 15:11             ` Teemu Likonen
@ 2009-07-04 15:54               ` Leo
  0 siblings, 0 replies; 167+ messages in thread
From: Leo @ 2009-07-04 15:54 UTC (permalink / raw)
  To: emacs-devel

On 2009-07-04 16:11 +0100, Teemu Likonen wrote:
> I have an idea: Let's have two different modes, a simple mode called
> mail-mode and a complex mode named message-mode which has more
> features. People who like simplicity can use mail-mode and people who
> need more features can use message-mode. How does that sound? :-)

There are already a few variants.

,----[ C-h v mail-user-agent RET ]
|   `sendmail-user-agent' -- use the default Emacs Mail package.
|                            See Info node `(emacs)Sending Mail'.
|   `mh-e-user-agent'     -- use the Emacs interface to the MH mail system.
|                            See Info node `(mh-e)'.
|   `message-user-agent'  -- use the Gnus Message package.
|                            See Info node `(message)'.
|   `gnus-user-agent'     -- like `message-user-agent', but with Gnus
|                            paraphernalia, particularly the Gcc: header for
|                            archiving.
`----

I'd prefer the core functionality of both sendmail and message-mode be
merged into a library that offers a default send mail interface and also
a basis for all other MUAs like gnus, mh-e etc. if they need extra stuff
than the default.

-- 
Leo's Emacs uptime: 24 days, 2 hours, 2 minutes, 12 seconds





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

* Re: Sending attachments
  2009-07-04 15:53           ` Eli Zaretskii
@ 2009-07-04 17:08             ` Chad Brown
  2009-07-05 10:18               ` Richard Stallman
  2009-07-05  1:40             ` Daniel Pittman
  2009-07-05  2:39             ` Miles Bader
  2 siblings, 1 reply; 167+ messages in thread
From: Chad Brown @ 2009-07-04 17:08 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

On Jul 4, 2009, at 8:53 AM, Eli Zaretskii wrote:

>> From: Chad Brown <yandros@MIT.EDU>
>> Date: Sat, 4 Jul 2009 08:33:56 -0700
>>
>> I doubt that you can make mail-mode usable for the mime- handling
>> features that multiple packages want from message-mode without
>> significant (mostly duplicated) effort.
>
> Could you please post a list of the features you had in mind, so that
> the effort could be estimated?
>
> Just looking at email messages with MIME attachments, it looks like
> each attachment is just a fancy header line and a body encoded by
> either base64 or quoted-printable.  Implementing a simple command that
> asks for a file name and then encodes it and puts the result in the
> *mail* buffer sounds easy enough, so I'm sure I'm missing something.

I'm sorry to say that it's unlikely, but I will see if I can do.  Most  
of my experience with this sort of thing comes from long-ago work on  
MH-e, wherein I found that simple MIME is pretty easy but everything  
turns crazy when you hit multipart/mixed and multipart/alternative.   
If the goal is simply to be able to attach files to messages, then the  
code required is very simple (my long-ago MH-e for doing so was less  
than 15 lines of elisp).  If you want to handle the larger range of  
MIME options, the complication is hard to avoid.

To be more specific about what I was trying to say:   I doubt that  
mail-mode can be made into a replacement for message-mode for things  
like MH-e easily, and I expect the result will duplicate most of  
message mode.  Adding a simple `attach file' to mail-mode is probably  
not very hard at all, but the result won't allow you to drop message- 
mode/mml (it's been long enough that I forget which parts are where).

*chad




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

* Re: Sending attachments
  2009-07-01 19:58 ` Alfred M. Szmidt
@ 2009-07-05  0:06   ` Richard Stallman
  2009-07-05 21:52     ` Stefan Monnier
  2009-07-05 22:39     ` Alfred M. Szmidt
  0 siblings, 2 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-05  0:06 UTC (permalink / raw)
  To: ams; +Cc: emacs-devel

Etach looks like just what I had in mind.
(The parts that interact with Rmail need updating.)





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

* Re: Sending attachments
  2009-07-04 15:53           ` Eli Zaretskii
  2009-07-04 17:08             ` Chad Brown
@ 2009-07-05  1:40             ` Daniel Pittman
  2009-07-05  2:39             ` Miles Bader
  2 siblings, 0 replies; 167+ messages in thread
From: Daniel Pittman @ 2009-07-05  1:40 UTC (permalink / raw)
  To: emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:
>> From: Chad Brown <yandros@MIT.EDU>
>> Date: Sat, 4 Jul 2009 08:33:56 -0700
>>
>> I doubt that you can make mail-mode usable for the mime- handling
>> features that multiple packages want from message-mode without
>> significant (mostly duplicated) effort.
>
> Could you please post a list of the features you had in mind, so that
> the effort could be estimated?
>
> Just looking at email messages with MIME attachments, it looks like
> each attachment is just a fancy header line and a body encoded by
> either base64 or quoted-printable.  Implementing a simple command that
> asks for a file name and then encodes it and puts the result in the
> *mail* buffer sounds easy enough, so I'm sure I'm missing something.

If you do decide to go the simple path, don't encode anything but text/* MIME
content as Q-P.  Various mailers, especially on Windows, take Q-P as an
instruction to un-Q-P the text, then convert line endings to the platform
format.

This violates the spec, but causes corruption of attachments.  Gnus, for a
while, selected the optimum of Q-P and base64 for size, and I found the above
issue when PDF files selected Q-P and ended up corrupted on Windows.

Regards,
        Daniel





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

* Re: Sending attachments
  2009-07-04 15:53           ` Eli Zaretskii
  2009-07-04 17:08             ` Chad Brown
  2009-07-05  1:40             ` Daniel Pittman
@ 2009-07-05  2:39             ` Miles Bader
  2009-07-05  3:18               ` Eli Zaretskii
                                 ` (2 more replies)
  2 siblings, 3 replies; 167+ messages in thread
From: Miles Bader @ 2009-07-05  2:39 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Katsumi Yamaoka, Chad Brown, ding, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:
> Could you please post a list of the features you had in mind, so that
> the effort could be estimated?

Important things:

  1. Proper handling of non-ascii text. For instance:

      a. Proper encoding of non-ascii headers (using "=?" notation)
      b. Ability to use other transfer encodings besides 8-bit
      c. Ability to automatically choose different character encodings
         depending on the language/context/whatever (e.g., for many
         cases, the "standard" isn't utf-8).

  2. Ability to have both text and binary attachments (both are very
     important), and that these work together with the language support
     in part (1).

  3. The ability to handle the various quirks of sending netnews as
     opposed to email (they're similar in many ways, but obviously not
     all).

     [This presumes that we're looking at _replacing_ the current
     duplicated infrastructure with something new/better -- if the
     non-trivial effort is to be spent to make mail-mode really do email
     correctly, it would be dumb to retain message-mode just for
     handling netnews!]

Of course, message-mode already does all this properly.

My observation has been that there are lot of corner cases, and a lot of
software screws them up.

It would be very very useful to have some of the guys that actually work
on message-mode involved in this conversation, because they probably
know this stuff in much more detail -- I only know what I use as a user,
and have had problems with in the past.

-Miles


p.s. A probably unrelated problem, which made testing a bit annoying:
I can't actually send _any_ mail with mail-mode, because my ISP's
mail-forwarder rejects any messages generated with it!  I'm not quite
sure what extra headers or whatever message-mode adds, but I have no
problems with mail sent using message-mode...

-- 
Friendless, adj. Having no favors to bestow. Destitute of fortune. Addicted to
utterance of truth and common sense.




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

* Re: Sending attachments
  2009-07-05  2:39             ` Miles Bader
@ 2009-07-05  3:18               ` Eli Zaretskii
  2009-07-05  3:44                 ` Miles Bader
  2009-07-05  8:01               ` Andreas Schwab
  2009-07-06 15:05               ` Richard Stallman
  2 siblings, 1 reply; 167+ messages in thread
From: Eli Zaretskii @ 2009-07-05  3:18 UTC (permalink / raw)
  To: Miles Bader; +Cc: yamaoka, yandros, ding, emacs-devel

> From: Miles Bader <miles@gnu.org>
> Cc: Chad Brown <yandros@MIT.EDU>, Katsumi Yamaoka <yamaoka@jpl.org>,
>     emacs-devel@gnu.org, ding@gnus.org
> Date: Sun, 05 Jul 2009 11:39:59 +0900
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> > Could you please post a list of the features you had in mind, so that
> > the effort could be estimated?
> 
> Important things:

Thanks.

>   1. Proper handling of non-ascii text. For instance:
> 
>       a. Proper encoding of non-ascii headers (using "=?" notation)
>       b. Ability to use other transfer encodings besides 8-bit
>       c. Ability to automatically choose different character encodings
>          depending on the language/context/whatever (e.g., for many
>          cases, the "standard" isn't utf-8).

I think this is not really related to attaching files.

>   3. The ability to handle the various quirks of sending netnews as
>      opposed to email (they're similar in many ways, but obviously not
>      all).

And this is out of scope for mail-mode, which (AFAIK) does not support
news.

> p.s. A probably unrelated problem, which made testing a bit annoying:
> I can't actually send _any_ mail with mail-mode, because my ISP's
> mail-forwarder rejects any messages generated with it!  I'm not quite
> sure what extra headers or whatever message-mode adds, but I have no
> problems with mail sent using message-mode...

If you find out why that happens and post the info here, perhaps
someone could fix the problems causing it.  FWIW, I use mail-mode for
many years with many different ISPs with no problems at all.




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

* Re: Sending attachments
  2009-07-05  3:18               ` Eli Zaretskii
@ 2009-07-05  3:44                 ` Miles Bader
  2009-07-05 18:16                   ` Eli Zaretskii
  0 siblings, 1 reply; 167+ messages in thread
From: Miles Bader @ 2009-07-05  3:44 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: yamaoka, yandros, ding, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:
> I think this is not really related to attaching files.
...
> And this is out of scope for mail-mode, which (AFAIK) does not support
> news.

What exactly is the plan here?

Do we want to address the duplication between mail-mode and message-mode
or not?  Isn't this duplication a bad thing?  I think it is -- it
confuses users and adds maintenance burden.  Is adding layers and layers
of poorly integrated leaky bandaids to mail-mode really the path we want
to follow?  Are you just saying "let's add this one function now and
deal with the real problem later"?

-Miles

-- 
Hers, pron. His.




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

* Re: Sending attachments
  2009-07-05  2:39             ` Miles Bader
  2009-07-05  3:18               ` Eli Zaretskii
@ 2009-07-05  8:01               ` Andreas Schwab
  2009-07-05  8:30                 ` Miles Bader
  2009-07-06 15:05               ` Richard Stallman
  2 siblings, 1 reply; 167+ messages in thread
From: Andreas Schwab @ 2009-07-05  8:01 UTC (permalink / raw)
  To: Miles Bader; +Cc: Eli Zaretskii, Chad Brown, Katsumi Yamaoka, ding, emacs-devel

Miles Bader <miles@gnu.org> writes:

> p.s. A probably unrelated problem, which made testing a bit annoying:
> I can't actually send _any_ mail with mail-mode, because my ISP's
> mail-forwarder rejects any messages generated with it!  I'm not quite
> sure what extra headers or whatever message-mode adds, but I have no
> problems with mail sent using message-mode...

Perhaps it's the wrong envelope sender.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."




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

* Re: Sending attachments
  2009-07-05  8:01               ` Andreas Schwab
@ 2009-07-05  8:30                 ` Miles Bader
  0 siblings, 0 replies; 167+ messages in thread
From: Miles Bader @ 2009-07-05  8:30 UTC (permalink / raw)
  To: Andreas Schwab
  Cc: Eli Zaretskii, Chad Brown, Katsumi Yamaoka, ding, emacs-devel

Andreas Schwab <schwab@linux-m68k.org> writes:
>> p.s. A probably unrelated problem, which made testing a bit annoying:
>> I can't actually send _any_ mail with mail-mode, because my ISP's
>> mail-forwarder rejects any messages generated with it!  I'm not quite
>> sure what extra headers or whatever message-mode adds, but I have no
>> problems with mail sent using message-mode...
>
> Perhaps it's the wrong envelope sender.

I think that's it, but somehow, message-mode manages to set it correctly
(or perhaps not set it incorrectly), whereas mail-mode fails to do so.

I was kind of surprised because I thought both used the same backend
sending code in emacs....

-Miles

-- 
Circus, n. A place where horses, ponies and elephants are permitted to see
men, women and children acting the fool.




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

* Re: Sending attachments
  2009-07-04 17:08             ` Chad Brown
@ 2009-07-05 10:18               ` Richard Stallman
  0 siblings, 0 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-05 10:18 UTC (permalink / raw)
  To: Chad Brown; +Cc: eliz, emacs-devel

    MH-e, wherein I found that simple MIME is pretty easy but everything  
    turns crazy when you hit multipart/mixed and multipart/alternative.   

I don't know a lot about Mime.  What does multipart/alternative mean?
I see that in incoming messages that have plain text and HTML,
but handling those messages in Emacs should be basically trivial.
So what is the difficulty?

Likewise for multipart/mixed: I see that in a message I received,
but it looks like handling that message requires nothing special
or difficult.

      Adding a simple `attach file' to mail-mode is probably  
    not very hard at all, but the result won't allow you to drop message- 
    mode/mml (it's been long enough that I forget which parts are where).

I do not propose to eliminate those programs.
The people who installed them should have proposed the change,
rather than sneaking it in as "part of Gnus".  But that was years ago,
and it would not make sense to remove it now.





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

* Re: Sending attachments
  2009-07-03 22:52           ` Richard Stallman
  2009-07-04 15:11             ` Teemu Likonen
@ 2009-07-05 14:47             ` Chong Yidong
  2009-07-06 20:13               ` Eli Zaretskii
  2009-07-07 10:05               ` Richard Stallman
  2009-07-15 21:51             ` Reducing Gnus dependencies in message.el (was: Sending attachments) Reiner Steib
  2 siblings, 2 replies; 167+ messages in thread
From: Chong Yidong @ 2009-07-05 14:47 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel, miles

Richard Stallman <rms@gnu.org> writes:

>     It's a question of necessary complexity.
>
> I don't think so.  Look at all the libraries message.el loads.
>
> I don't want to replace the simple sendmail.el with this tremendous
> pile of complexity.
>
> message.el is also 8000 lines long, where sendmail.el is under 2000
> lines.  I expect that sending attachments won't require more than 200
> lines.

As has been pointed out, message-mode has more features than mail-mode.
Even if we wanted to bring mail-mode up to par, that would turn it into
something just as complex, or more (since, as you noted, message-mode
already relies on other libraries to much of its functionality).




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

* Re: Sending attachments
  2009-07-05  3:44                 ` Miles Bader
@ 2009-07-05 18:16                   ` Eli Zaretskii
  2009-07-05 20:44                     ` Miles Bader
  2009-07-05 22:56                     ` Chong Yidong
  0 siblings, 2 replies; 167+ messages in thread
From: Eli Zaretskii @ 2009-07-05 18:16 UTC (permalink / raw)
  To: Miles Bader; +Cc: yamaoka, yandros, ding, emacs-devel

> From: Miles Bader <miles@gnu.org>
> Cc: yamaoka@jpl.org,  yandros@MIT.EDU,  ding@gnus.org,  emacs-devel@gnu.org
> Date: Sun, 05 Jul 2009 12:44:00 +0900
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> > I think this is not really related to attaching files.
> ...
> > And this is out of scope for mail-mode, which (AFAIK) does not support
> > news.
> 
> What exactly is the plan here?

There is no plan (yet).  I was just trying to estimate the effort
needed for adding simple attachment facility to mail-mode.  Plans, if
there will be such, will come later.

> Do we want to address the duplication between mail-mode and message-mode
> or not?

I don't know about ``we'', but _I_ don't.  I simply don't have enough
time for such cleanups, and don't think I know enough about Gnus and
message-mode to be a good candidate for the job anyway.

> Isn't this duplication a bad thing?

Probably, but we have lived with that since when Gnus was merged with
Emacs.

> Is adding layers and layers of poorly integrated leaky bandaids to
> mail-mode really the path we want to follow?

I have no idea why you thought I was about to add ``leaky bandaids''.
I didn't even say I'm going to write any code, let alone ``leaky''.
And I don't think I ever added to Emacs such low-quality code that
would justify you making such assumptions, should I decide to write
some code.




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

* Re: Sending attachments
  2009-07-03 14:21       ` Sending attachments Alfred M. Szmidt
  2009-07-04 15:33         ` Chad Brown
@ 2009-07-05 20:05         ` Byung-Hee HWANG
  2009-07-05 20:22           ` Alfred M. Szmidt
  1 sibling, 1 reply; 167+ messages in thread
From: Byung-Hee HWANG @ 2009-07-05 20:05 UTC (permalink / raw)
  To: ams; +Cc: Chong Yidong, miles, emacs-devel

"Alfred M. Szmidt" <ams@gnu.org> writes:

>    The first step is to check for incompatibilities and missing
>    features in message-mode.  Currently, message-mode recognizes many
>    mail-mode variables, such as `sendmail-program', and do the right
>    thing in response.  Someone needs to go through all the sendmail.el
>    variables and make sure they are all handled properly in
>    message-mode.  Once that is done, we can start to migrate rmail,
>    the bug reporter, and any other places that use mail-mode to
>    message-mode.
>
> That is much  unneeded work, the only thing  that uses message-mode is
> gnus.  It would be much easier to add etach, or similar, to mail-mode,
> and make gnus use mail-mode which is the default mode for sending mail
> in Emacs.

As a user of Gnus, i think mail-mode need to more features. For
example, mail-mode does not support IMAP. Currently, most folks use
Google's Gmail which offers IMAP. Hence, i cannot agree to such an
Alfred's proposal. Again, Gnus will not go with mail-mode unless Gmail's
users respect for mail-mode.

Sincerely,
 
-- 
Byung-Hee HWANG, KNU 
∑ WWW: http://izb.knu.ac.kr/~bh/




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

* Re: Sending attachments
  2009-07-05 20:05         ` Byung-Hee HWANG
@ 2009-07-05 20:22           ` Alfred M. Szmidt
  0 siblings, 0 replies; 167+ messages in thread
From: Alfred M. Szmidt @ 2009-07-05 20:22 UTC (permalink / raw)
  To: Byung-Hee HWANG; +Cc: cyd, miles, emacs-devel

mail-mode is for sending mail, not for reading it.




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

* Re: Sending attachments
  2009-07-05 18:16                   ` Eli Zaretskii
@ 2009-07-05 20:44                     ` Miles Bader
  2009-07-06  3:15                       ` Eli Zaretskii
  2009-07-06 15:05                       ` Richard Stallman
  2009-07-05 22:56                     ` Chong Yidong
  1 sibling, 2 replies; 167+ messages in thread
From: Miles Bader @ 2009-07-05 20:44 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: yamaoka, yandros, ding, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:
>> > And this is out of scope for mail-mode, which (AFAIK) does not support
>> > news.
>> 
>> What exactly is the plan here?
>
> There is no plan (yet).  I was just trying to estimate the effort
> needed for adding simple attachment facility to mail-mode.  Plans, if
> there will be such, will come later.

So that would be the "let's add this one function now and
deal with the real problem later" answer, yes?

> I have no idea why you thought I was about to add ``leaky bandaids''.
> I didn't even say I'm going to write any code, let alone ``leaky''.
> And I don't think I ever added to Emacs such low-quality code that
> would justify you making such assumptions, should I decide to write
> some code.

I was not saying anything about your code (I wasn't even thinking you'd
write the code), and thus was making no assumptions about it.

The point was that real support for mime (as message-mode has today)
can't be done piecemeal, and that while adding "a little bit" of support
to mail-mode may be a _temporary_ fix for some people's perceived
problem, it isn't a good long-term solution -- and even in the
short-term it actually makes the duplication problem _worse_, so it
seems worth thinking about whether even that is actually desirable.

-Miles

-- 
Abstainer, n. A weak person who yields to the temptation of denying himself a
pleasure. A total abstainer is one who abstains from everything but
abstention, and especially from inactivity in the affairs of others.




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

* Re: message-mode / mail-mode
  2009-07-03  8:43         ` message-mode / mail-mode Miles Bader
  2009-07-03  8:55           ` Miles Bader
  2009-07-03  9:07           ` Teemu Likonen
@ 2009-07-05 21:40           ` Stefan Monnier
  2009-07-06  6:45             ` Reiner Steib
  2 siblings, 1 reply; 167+ messages in thread
From: Stefan Monnier @ 2009-07-05 21:40 UTC (permalink / raw)
  To: Miles Bader; +Cc: Teemu Likonen, rms, emacs-devel

> You should set the variable `mail-header-separator' to ""; message-mode
> also pays attention to this variable.

Still, message-mode needs to be fixed so this is not necessary.


        Stefan




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

* Re: Sending attachments
  2009-07-03 14:21         ` Alfred M. Szmidt
@ 2009-07-05 21:41           ` Stefan Monnier
  2009-07-06 15:05             ` Richard Stallman
  0 siblings, 1 reply; 167+ messages in thread
From: Stefan Monnier @ 2009-07-05 21:41 UTC (permalink / raw)
  To: ams; +Cc: cyd, emacs-devel, rms, miles

>    I object strenuously to the idea of replacing the very simple Mail
>    mode with something complex from Gnus.
> As a user of mail-mode, I agree fully.

Could you give actual concrete arguments why you think so?


        Stefan




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

* Re: Sending attachments
  2009-07-05  0:06   ` Richard Stallman
@ 2009-07-05 21:52     ` Stefan Monnier
  2009-07-06  3:12       ` Eli Zaretskii
  2009-07-06 15:04       ` Richard Stallman
  2009-07-05 22:39     ` Alfred M. Szmidt
  1 sibling, 2 replies; 167+ messages in thread
From: Stefan Monnier @ 2009-07-05 21:52 UTC (permalink / raw)
  To: rms; +Cc: ams, emacs-devel

> Etach looks like just what I had in mind.
> (The parts that interact with Rmail need updating.)

Adding etach to Emacs means adding complexity and the only benefit will
be to add to mail-mode a subset of the features offered by
message-mode, AFAICT.
So for mail-mode it may be a good idea, but not for Emacs as a whole.

As far as I'm concerned, mail-mode should be moved to the
`obsolete' directory.


        Stefan




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

* Re: Sending attachments
  2009-07-05  0:06   ` Richard Stallman
  2009-07-05 21:52     ` Stefan Monnier
@ 2009-07-05 22:39     ` Alfred M. Szmidt
  2009-07-06 15:05       ` Richard Stallman
  1 sibling, 1 reply; 167+ messages in thread
From: Alfred M. Szmidt @ 2009-07-05 22:39 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

   Etach looks like just what I had in mind.

I'll see if I can wip up something that we can included in Emacs, that
replaces mail-attach-file in mail-mode so that it will use MIME
instead.

   (The parts that interact with Rmail need updating.)

Indeed they do, rmail already has some hooks for MIME.  But the
rmailmime mode that I saw was quite complex, and I can no longer find
it, the URL that is listed in rmail.el doesn't work..

Does anyone have a copy of rmailmime.el?




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

* Re: Sending attachments
  2009-07-05 18:16                   ` Eli Zaretskii
  2009-07-05 20:44                     ` Miles Bader
@ 2009-07-05 22:56                     ` Chong Yidong
  2009-07-06 20:10                       ` Eli Zaretskii
  1 sibling, 1 reply; 167+ messages in thread
From: Chong Yidong @ 2009-07-05 22:56 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: yamaoka, yandros, emacs-devel, ding, Miles Bader

Eli Zaretskii <eliz@gnu.org> writes:

>> Is adding layers and layers of poorly integrated leaky bandaids to
>> mail-mode really the path we want to follow?
>
> I have no idea why you thought I was about to add ``leaky bandaids''.

RMS has suggested adding simple attachment functionality to mail-mode,
e.g. via etach.  I haven't had time to look at the code of etach, but I
suspect that all this will accomplish is an incremental and incomplete
extension of mail-mode's feature set---not enough to catch up with
message-mode, but adding more code duplication.




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

* Re: Sending attachments
  2009-07-05 21:52     ` Stefan Monnier
@ 2009-07-06  3:12       ` Eli Zaretskii
  2009-07-11 15:38         ` Stefan Monnier
  2009-07-06 15:04       ` Richard Stallman
  1 sibling, 1 reply; 167+ messages in thread
From: Eli Zaretskii @ 2009-07-06  3:12 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: ams, rms, emacs-devel

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Date: Sun, 05 Jul 2009 23:52:03 +0200
> Cc: ams@gnu.org, emacs-devel@gnu.org
> 
> As far as I'm concerned, mail-mode should be moved to the
> `obsolete' directory.

I hope that's a joke.  Especially since there's no mail-mode.el to
move.




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

* Re: Sending attachments
  2009-07-05 20:44                     ` Miles Bader
@ 2009-07-06  3:15                       ` Eli Zaretskii
  2009-07-06  3:50                         ` Miles Bader
  2009-07-06 15:05                       ` Richard Stallman
  1 sibling, 1 reply; 167+ messages in thread
From: Eli Zaretskii @ 2009-07-06  3:15 UTC (permalink / raw)
  To: Miles Bader; +Cc: yamaoka, yandros, ding, emacs-devel

> From: Miles Bader <miles@gnu.org>
> Cc: yamaoka@jpl.org,  yandros@MIT.EDU,  ding@gnus.org,  emacs-devel@gnu.org
> Date: Mon, 06 Jul 2009 05:44:51 +0900
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> >> > And this is out of scope for mail-mode, which (AFAIK) does not support
> >> > news.
> >> 
> >> What exactly is the plan here?
> >
> > There is no plan (yet).  I was just trying to estimate the effort
> > needed for adding simple attachment facility to mail-mode.  Plans, if
> > there will be such, will come later.
> 
> So that would be the "let's add this one function now and
> deal with the real problem later" answer, yes?

Maybe, or maybe it will be a "let's do nothing" answer.

> The point was that real support for mime (as message-mode has today)
> can't be done piecemeal

I don't think anybody was talking about ``real support for MIME''.
People who managed to get away without MIME at all till this day
probably don't need more than a simple way of attaching non-text
files.




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

* Re: Sending attachments
  2009-07-06  3:15                       ` Eli Zaretskii
@ 2009-07-06  3:50                         ` Miles Bader
  2009-07-06  4:54                           ` Miles Bader
  2009-07-06  6:37                           ` Alfred M. Szmidt
  0 siblings, 2 replies; 167+ messages in thread
From: Miles Bader @ 2009-07-06  3:50 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: yamaoka, yandros, ding, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:
> I don't think anybody was talking about ``real support for MIME''.
> People who managed to get away without MIME at all till this day
> probably don't need more than a simple way of attaching non-text
> files.

It's not what rms asked about, but it's certainly relevant to the
discussion.  Even if rms and ams would be satisfied with mail-mode +
simple-attach, it's natural to step back and think about the wider
implications of doing that.

In particular, the objections to simply adopting message-mode are still
unclear to me (other than the obvious one, that rms continues to be
annoyed because it was merged [apparently] without asking him).  Roughly
these objections seem to be something along the lines of "mail-mode is
simpler", but unless I've missed it, there's been little discussion of
exactly what the benefits of that are.

Some random points that come to mind:

  (1) We must still maintain message-mode as well, so mail-mode's
      "simplicity" yields no obvious code maintenance Benefit.

      Indeed, it's obviously more of a _burden_ to maintain both modes
      than it is to maintain message-mode alone (in the case that we got
      rid of mail-mode).  This burden goes up, of course, if mail-mode
      starts getting more features, like the suggested attachments.

  (2) I've used both modes over the years, and from my viewpoint as a
      user, both modes seem pretty much the same form a UI standpoint --
      message-mode has more bindings to support its additional
      functionality, but they do not get in the way as far as I can see.

      So as far as I can tell, mail-mode does not have an obviously
      simpler UI for the average user.

So... what exactly _is_ the "simplicity advantage" that's been alluded to?

[The "duplicated code disadvantage", on the other hand is pretty obvious...]

Thanks,

-Miles

-- 
Sabbath, n. A weekly festival having its origin in the fact that God made the
world in six days and was arrested on the seventh.




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

* Re: Sending attachments
  2009-07-06  3:50                         ` Miles Bader
@ 2009-07-06  4:54                           ` Miles Bader
  2009-07-06 20:06                             ` Eli Zaretskii
  2009-07-06  6:37                           ` Alfred M. Szmidt
  1 sibling, 1 reply; 167+ messages in thread
From: Miles Bader @ 2009-07-06  4:54 UTC (permalink / raw)
  To: emacs-devel; +Cc: ding

Miles Bader <miles@gnu.org> writes:
> Some random points that come to mind:
>
>   (1) We must still maintain message-mode as well, so mail-mode's
>       "simplicity" yields no obvious code maintenance Benefit.
>
>   (2) I've used both modes over the years, and from my viewpoint as a
>       user, both modes seem pretty much the same form a UI standpoint

Oh, also:

  (3) Having both modes present presents a user burden, especially
      because the default is mail-mode -- there are many cases where
      a new user may need the extra features (even if he doesn't
      realize this, e.g., if he is sending non-ASCII characters in a
      way that isn't handled properly by mail-mode), but will still
      be using the default settings.

      Not only must the documentation be written to consider this
      and guide users, but in many cases, the user won't look at the
      documentation, or won't look in the proper place, and so will
      simply decide that Emacs mail handling doesn't support the
      desired feature.  In the case non-ASCII character case
      mentioned above, he may not even _know_ that he needs to do
      anything or look at any documentation -- he'll just send
      incorrect mail.

Thanks,

-Miles

-- 
Education, n. That which discloses to the wise and disguises from the foolish
their lack of understanding.





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

* Re: Sending attachments
  2009-07-06  3:50                         ` Miles Bader
  2009-07-06  4:54                           ` Miles Bader
@ 2009-07-06  6:37                           ` Alfred M. Szmidt
  2009-07-06  7:47                             ` Miles Bader
                                               ` (2 more replies)
  1 sibling, 3 replies; 167+ messages in thread
From: Alfred M. Szmidt @ 2009-07-06  6:37 UTC (permalink / raw)
  To: Miles Bader; +Cc: eliz, yandros, yamaoka, ding, emacs-devel

     (1) We must still maintain message-mode as well, so mail-mode's
	 "simplicity" yields no obvious code maintenance Benefit.

Seeing that we have already rcirc vs. erc, rmail vs. gnus vs. vm
vs. mh (which each has their own mail sending mode!), viper
vs. vi-mode vs. vile; a small _derived_ mode can't be the problem.
You already have people who prefer it, and are more than happy to fix
any bugs it has.  Maintaince is clear not the issue here.

	 Indeed, it's obviously more of a _burden_ to maintain both
	 modes than it is to maintain message-mode alone (in the case
	 that we got rid of mail-mode).  This burden goes up, of
	 course, if mail-mode starts getting more features, like the
	 suggested attachments.

For such a feature to be properly implmented they wouldn't be in
mail-mode (or any such mode), but in a seperate mode that handles MIME
attachment exclusivly.  If message-mode handles this itself, then it
is a sign that it was not properly thought through.

  (3) Having both modes present presents a user burden, especially
      because the default is mail-mode -- there are many cases where a
      new user may need the extra features (even if he doesn't realize
      this, e.g., if he is sending non-ASCII characters in a way that
      isn't handled properly by mail-mode), but will still be using
      the default settings.

I use it every day for non-ASCII text, and mail-mode has not had any
problems with that.




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

* Re: message-mode / mail-mode
  2009-07-05 21:40           ` Stefan Monnier
@ 2009-07-06  6:45             ` Reiner Steib
  2009-07-11 10:04               ` Stefan Monnier
  0 siblings, 1 reply; 167+ messages in thread
From: Reiner Steib @ 2009-07-06  6:45 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: ding, emacs-devel

On Sun, Jul 05 2009, Stefan Monnier wrote:
> Miles Bader wrote:
>> Teemu Likonen <tlikonen@iki.fi> writes:
>>> Context-sensitive commands are good but in message-mode they seem to
>>> require that the "--text follows this line--" separator line exists.
[...]
>> You should set the variable `mail-header-separator' to ""; message-mode
>> also pays attention to this variable.
>
> Still, message-mode needs to be fixed so this is not necessary.

Please elaborate.

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/




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

* Re: Sending attachments
  2009-07-06  6:37                           ` Alfred M. Szmidt
@ 2009-07-06  7:47                             ` Miles Bader
  2009-07-06 20:08                               ` Eli Zaretskii
  2009-07-06 14:13                             ` Chong Yidong
  2009-07-07  5:57                             ` Giorgos Keramidas
  2 siblings, 1 reply; 167+ messages in thread
From: Miles Bader @ 2009-07-06  7:47 UTC (permalink / raw)
  To: ams; +Cc: eliz, yandros, yamaoka, ding, emacs-devel

"Alfred M. Szmidt" <ams@gnu.org> writes:
>      (1) We must still maintain message-mode as well, so mail-mode's
> 	 "simplicity" yields no obvious code maintenance Benefit.
>
> Seeing that we have already rcirc vs. erc, rmail vs. gnus vs. vm
> vs. mh (which each has their own mail sending mode!), viper
> vs. vi-mode vs. vile; a small _derived_ mode can't be the problem.

For all of the above, the duplication _does_ cause additional
maintenance burden, and more user confusion.

However, for many such packages the UIs of the various alternative modes
are quite different, so it's much easier to argue that the alternatives
are all "necessary" (in some cases that may not be true -- e.g., I'm not
sure if vi-mode is still really necessary), and that the burden is
justified.

mail-mode vs. message-mode is a particular funny case because the
message-mode UI seems to be pretty much a superset of mail-mode's UI
(if it isn't, please give details).

ERC vs. rcirc is a case where ERC is more functional, but has a very
different feel to the user.  My vague sense is that maybe people are
saying they feel the same is true of mail-mode vs. message-mode, but in
my own experience, such a difference was not at all obvious.

> You already have people who prefer it, and are more than happy to fix
> any bugs it has.

So, tell me, in concrete terms, _why_ do they prefer it?   Well, OK, you
may not want to speak for others, so just tell me why _you_ prefer it?
How would you be adversely affected if one day, someone snuck up and
replaced mail-mode with message-mode?

To help you get started, here are a general categories:

 (1) UI differences (AFAICT, they're very very similar, but I'm sure
     there are some differences that annoy people -- though in some
     cases these are probably bugs...)

 (2) Customization/hook differences -- maybe mail-mode has some great
     hooks or settings that message-mode doesn't.

 (3) Behavioral differences -- does mail-mode work with some systems
     where message-mode doesn't (as I mentioned earlier, mail-mode fails
     to send for some reason on one of my machines)?

Remember, be concrete, and be detailed -- we've all argued enough that
people's basic position is clear enough, and I don't see how it's
possible to advance this discussion without some actual details...

The reason why I sound a bit incredulous is that I've used both, and
other than message-mode's extra functionality -- which seemed pretty
much invisible to me unless I needed it -- they seemed more or less
identical.  [Well there are some things, like the fill prefix when
filling a header line is different...]

> Maintenance is clearly not the issue here.

Both modes seem fairly mature, so it's not the problem it might be, but
any bugs need to be checked for in both modes, and any new features may
need to be thought about in the context of both.  Documentation needs to
consider both, and worry about making the difference clear to users.
But I agree, it's probably not the main issue (though in the abstract
it's Not Good to have duplicate code bases).

I think, however, that the user burden of the duplication is very real.
People do not know, in general, that to get certain functionality they
have to use a different mail-sending mode.

> 	 Indeed, it's obviously more of a _burden_ to maintain both
> 	 modes than it is to maintain message-mode alone (in the case
> 	 that we got rid of mail-mode).  This burden goes up, of
> 	 course, if mail-mode starts getting more features, like the
> 	 suggested attachments.
>
> For such a feature to be properly implmented they wouldn't be in
> mail-mode (or any such mode), but in a seperate mode that handles MIME
> attachment exclusivly.  If message-mode handles this itself, then it
> is a sign that it was not properly thought through.

That is not at all clear -- AFAIK, much of the actual MIME stuff is a
separate library, but MIME covers a lot of aspects of mail encoding, not
just attachments, and all of that it's going to need to be hooked into
the top-level mode.

In any case, I can't defend the quality of the message-mode code.  The
general code quality or design of mail-mode may well be higher.

However, if mail-mode doesn't have the requisite functionality (which
certainly seems to be the case), then we could

 (a) Keep both, and suffer the problems of having both (maintenance
     burden and user confusion).

 (b) Fix any bugs / functional inadequacies in in message-mode, and
     trash mail-mode.  Since message-mode largely seems to be a superset
     from the user's point of view, this option seems to have a fairly
     small cost.  If message-mode's code is bad, then that's a shame,
     but having message-mode alone is certainly less of a problem than
     message-mode plus something else.

 (c) Add the required functionality to mail-mode, fix any other problems
     with it, and trash message-mode.  As mail-mode is missing a lot of
     functionality, this would seem to have a far higher cost than
     option (b), but the end result might be better.

If mail-mode has better code than message-mode, then ideally we'd choose
(c), but in practice, the implementation cost (and associated extra
maintenance burden of new code) may make (b) the better choice.

> I use it every day for non-ASCII text, and mail-mode has not had any
> problems with that.

The most obvious problem with mail-mode's handling of non-ASCII text is
that it doesn't seem to encode headers correctly (headers in email are
annoying, you need to use a whole separate system for encoding them).

[and does mail-mode support any non-8-bit transfer encodings?  Does it
work if the message encoding isn't utf-8, and the user uses multiple
languages?]

Thanks,

-Miles

-- 
Erudition, n. Dust shaken out of a book into an empty skull.




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

* Re: Sending attachments
  2009-07-06  6:37                           ` Alfred M. Szmidt
  2009-07-06  7:47                             ` Miles Bader
@ 2009-07-06 14:13                             ` Chong Yidong
  2009-07-06 20:15                               ` Eli Zaretskii
  2009-07-07  5:57                             ` Giorgos Keramidas
  2 siblings, 1 reply; 167+ messages in thread
From: Chong Yidong @ 2009-07-06 14:13 UTC (permalink / raw)
  To: ams; +Cc: ding, emacs-devel, yamaoka, eliz, yandros, Miles Bader

"Alfred M. Szmidt" <ams@gnu.org> writes:

> Seeing that we have already rcirc vs. erc, rmail vs. gnus vs. vm
> vs. mh (which each has their own mail sending mode!), viper
> vs. vi-mode vs. vile; a small _derived_ mode can't be the problem.
> You already have people who prefer it, and are more than happy to fix
> any bugs it has.  Maintaince is clear not the issue here.

Apart from Miles' reply to this (with which I fully agree), it should be
noted that rcirc/erc/gnus/mh have dedicated maintainers, while mail-mode
is maintained in-tree.




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

* Re: Sending attachments
  2009-07-05 21:52     ` Stefan Monnier
  2009-07-06  3:12       ` Eli Zaretskii
@ 2009-07-06 15:04       ` Richard Stallman
  2009-07-11 15:40         ` Stefan Monnier
  1 sibling, 1 reply; 167+ messages in thread
From: Richard Stallman @ 2009-07-06 15:04 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: ams, emacs-devel

    As far as I'm concerned, mail-mode should be moved to the
    `obsolete' directory.

Please don't do that!




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

* Re: Sending attachments
  2009-07-05 22:39     ` Alfred M. Szmidt
@ 2009-07-06 15:05       ` Richard Stallman
  2009-07-07  9:43         ` Alfred M. Szmidt
  0 siblings, 1 reply; 167+ messages in thread
From: Richard Stallman @ 2009-07-06 15:05 UTC (permalink / raw)
  To: ams; +Cc: emacs-devel

    I'll see if I can wip up something that we can included in Emacs, that
    replaces mail-attach-file in mail-mode so that it will use MIME
    instead.

Other than some simplifications, because it would not need to work
in old Emacs versions, why is any change needed?




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

* Re: Sending attachments
  2009-07-05 20:44                     ` Miles Bader
  2009-07-06  3:15                       ` Eli Zaretskii
@ 2009-07-06 15:05                       ` Richard Stallman
  2009-07-11 19:08                         ` Stefan Monnier
  1 sibling, 1 reply; 167+ messages in thread
From: Richard Stallman @ 2009-07-06 15:05 UTC (permalink / raw)
  To: Miles Bader; +Cc: eliz, yandros, yamaoka, ding, emacs-devel

    So that would be the "let's add this one function now and
    deal with the real problem later" answer, yes?

The real issue that I raised is sending attachments with Mail mode.
Installing Etach will deal with that.  This actually does not involve
a change in sendmail.el, since Etach is modular.




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

* Re: Sending attachments
  2009-07-05  2:39             ` Miles Bader
  2009-07-05  3:18               ` Eli Zaretskii
  2009-07-05  8:01               ` Andreas Schwab
@ 2009-07-06 15:05               ` Richard Stallman
  2 siblings, 0 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-06 15:05 UTC (permalink / raw)
  To: Miles Bader; +Cc: eliz, yandros, yamaoka, ding, emacs-devel

      1. Proper handling of non-ascii text. For instance:

	  a. Proper encoding of non-ascii headers (using "=?" notation)
	  b. Ability to use other transfer encodings besides 8-bit
	  c. Ability to automatically choose different character encodings
	     depending on the language/context/whatever (e.g., for many
	     cases, the "standard" isn't utf-8).

      2. Ability to have both text and binary attachments (both are very
	 important), and that these work together with the language support
	 in part (1).

The features I would like to see are probably a subset of this.  I am
not sure it needs to be as automatic and complete as this would have
it.

Etach seems to do the job that I want done.






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

* Re: Sending attachments
  2009-07-05 21:41           ` Stefan Monnier
@ 2009-07-06 15:05             ` Richard Stallman
  2009-07-06 16:07               ` Chong Yidong
  2009-07-06 16:16               ` Glenn Morris
  0 siblings, 2 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-06 15:05 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: ams, emacs-devel, cyd, miles

I can maintain and extend Mail mode.  I cannot maintain Message mode;
it is too hairy and depends on too much.

Etach, once documented in the Emacs manual
(which is very simple to do),
will show Emacs users how to send attachments.

Etach also decodes Mime.  I have not tried that yet
but I will soon.




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

* Re: Sending attachments
  2009-07-06 15:05             ` Richard Stallman
@ 2009-07-06 16:07               ` Chong Yidong
  2009-07-07 10:05                 ` Richard Stallman
  2009-07-06 16:16               ` Glenn Morris
  1 sibling, 1 reply; 167+ messages in thread
From: Chong Yidong @ 2009-07-06 16:07 UTC (permalink / raw)
  To: rms; +Cc: ams, emacs-devel, Stefan Monnier, miles

Richard Stallman <rms@gnu.org> writes:

> Etach, once documented in the Emacs manual (which is very simple to
> do), will show Emacs users how to send attachments.
>
> Etach also decodes Mime.  I have not tried that yet but I will soon.

We should not add yet another mime library to Emacs, when we already
have one (mml.el).




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

* Re: Sending attachments
  2009-07-06 15:05             ` Richard Stallman
  2009-07-06 16:07               ` Chong Yidong
@ 2009-07-06 16:16               ` Glenn Morris
  2009-07-07 10:05                 ` Richard Stallman
  1 sibling, 1 reply; 167+ messages in thread
From: Glenn Morris @ 2009-07-06 16:16 UTC (permalink / raw)
  To: rms; +Cc: cyd, ams, miles, Stefan Monnier, emacs-devel

Richard Stallman wrote:

> Etach also decodes Mime. I have not tried that yet but I will soon.

Have you looked at rmailmm.el, which is part of Emacs?

;;; rmailmm.el --- MIME decoding and display stuff for RMAIL





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

* Re: Sending attachments
  2009-07-06  4:54                           ` Miles Bader
@ 2009-07-06 20:06                             ` Eli Zaretskii
  2009-07-06 22:35                               ` Miles Bader
  0 siblings, 1 reply; 167+ messages in thread
From: Eli Zaretskii @ 2009-07-06 20:06 UTC (permalink / raw)
  To: Miles Bader; +Cc: ding, emacs-devel

> From: Miles Bader <miles@gnu.org>
> Date: Mon, 06 Jul 2009 13:54:03 +0900
> Cc: ding@gnus.org
> 
>                              In the case non-ASCII character case
>       mentioned above, he may not even _know_ that he needs to do
>       anything or look at any documentation -- he'll just send
>       incorrect mail.

Did you actually try that?  Mail mode will not let you send such
messages, it will prompt for a proper encoding.




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

* Re: Sending attachments
  2009-07-06  7:47                             ` Miles Bader
@ 2009-07-06 20:08                               ` Eli Zaretskii
  0 siblings, 0 replies; 167+ messages in thread
From: Eli Zaretskii @ 2009-07-06 20:08 UTC (permalink / raw)
  To: Miles Bader; +Cc: ams, yandros, yamaoka, ding, emacs-devel

> From: Miles Bader <miles@gnu.org>
> Cc: eliz@gnu.org, yandros@MIT.EDU, yamaoka@jpl.org, ding@gnus.org,
>         emacs-devel@gnu.org
> Date: Mon, 06 Jul 2009 16:47:22 +0900
> 
> does mail-mode support any non-8-bit transfer encodings?

Yes.

> Does it work if the message encoding isn't utf-8, and the user uses
> multiple languages?

No.  It supports only a single encoding for the whole body (and will
insist on getting one, before it sends).




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

* Re: Sending attachments
  2009-07-05 22:56                     ` Chong Yidong
@ 2009-07-06 20:10                       ` Eli Zaretskii
  0 siblings, 0 replies; 167+ messages in thread
From: Eli Zaretskii @ 2009-07-06 20:10 UTC (permalink / raw)
  To: Chong Yidong; +Cc: yamaoka, yandros, emacs-devel, ding, miles

> From: Chong Yidong <cyd@stupidchicken.com>
> Cc: Miles Bader <miles@gnu.org>, yamaoka@jpl.org, yandros@MIT.EDU,
>         ding@gnus.org, emacs-devel@gnu.org
> Date: Sun, 05 Jul 2009 18:56:04 -0400
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> Is adding layers and layers of poorly integrated leaky bandaids to
> >> mail-mode really the path we want to follow?
> >
> > I have no idea why you thought I was about to add ``leaky bandaids''.
> 
> RMS has suggested adding simple attachment functionality to mail-mode,
> e.g. via etach.  I haven't had time to look at the code of etach, but I
> suspect that all this will accomplish is an incremental and incomplete
> extension of mail-mode's feature set---not enough to catch up with
> message-mode, but adding more code duplication.

Even if I would agree with your point, it's still a far cry from leaky
bandaids.




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

* Re: Sending attachments
  2009-07-05 14:47             ` Chong Yidong
@ 2009-07-06 20:13               ` Eli Zaretskii
  2009-07-07  1:12                 ` Miles Bader
  2009-07-07 10:05               ` Richard Stallman
  1 sibling, 1 reply; 167+ messages in thread
From: Eli Zaretskii @ 2009-07-06 20:13 UTC (permalink / raw)
  To: Chong Yidong; +Cc: miles, rms, emacs-devel

> From: Chong Yidong <cyd@stupidchicken.com>
> Date: Sun, 05 Jul 2009 10:47:32 -0400
> Cc: emacs-devel@gnu.org, miles@gnu.org
> 
> As has been pointed out, message-mode has more features than mail-mode.

Yes.  And Gnus has much more features than Rmail.  So what?  We all do
agree that much more features means more complexity in setting things
up.  Why impose that on people who are happy with simple modes?

> Even if we wanted to bring mail-mode up to par

No one suggested that.

> that would turn it into something just as complex, or more (since,
> as you noted, message-mode already relies on other libraries to much
> of its functionality).

Encoding a file uses only core Emacs features (base64-encode-region),
so no libraries should be involved.




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

* Re: Sending attachments
  2009-07-06 14:13                             ` Chong Yidong
@ 2009-07-06 20:15                               ` Eli Zaretskii
  0 siblings, 0 replies; 167+ messages in thread
From: Eli Zaretskii @ 2009-07-06 20:15 UTC (permalink / raw)
  To: Chong Yidong; +Cc: yamaoka, ding, emacs-devel, ams, yandros, miles

> From: Chong Yidong <cyd@stupidchicken.com>
> Cc: Miles Bader <miles@gnu.org>, eliz@gnu.org, yandros@MIT.EDU,
>         yamaoka@jpl.org, ding@gnus.org, emacs-devel@gnu.org
> Date: Mon, 06 Jul 2009 10:13:51 -0400
> 
> "Alfred M. Szmidt" <ams@gnu.org> writes:
> 
> > Seeing that we have already rcirc vs. erc, rmail vs. gnus vs. vm
> > vs. mh (which each has their own mail sending mode!), viper
> > vs. vi-mode vs. vile; a small _derived_ mode can't be the problem.
> > You already have people who prefer it, and are more than happy to fix
> > any bugs it has.  Maintaince is clear not the issue here.
> 
> Apart from Miles' reply to this (with which I fully agree), it should be
> noted that rcirc/erc/gnus/mh have dedicated maintainers, while mail-mode
> is maintained in-tree.

For some value of ``maintained''.  Cursory scan of the logs shows that
it gets one simple change every 3 months or so, sometimes even less
(modulo doc fixes).  So much for a ``burden''.




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

* Re: Sending attachments
  2009-07-06 20:06                             ` Eli Zaretskii
@ 2009-07-06 22:35                               ` Miles Bader
  2009-07-07  0:59                                 ` Kenichi Handa
  0 siblings, 1 reply; 167+ messages in thread
From: Miles Bader @ 2009-07-06 22:35 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: ding, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:
>> In the case non-ASCII character case mentioned above, he may not even
>> _know_ that he needs to do anything or look at any documentation --
>> he'll just send incorrect mail.
>
> Did you actually try that?  Mail mode will not let you send such
> messages, it will prompt for a proper encoding.

You may be thinking of a different case.

I did test sending a message with non-ASCII text in the header, which
mail-mode sent incorrectly, without any prompting or warning (you can't
just encode header text using the body's encoding, you need to use the
special "?=" encoding stuff).

-Miles

-- 
We have met the enemy, and he is us.  -- Pogo




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

* Re: Sending attachments
  2009-07-06 22:35                               ` Miles Bader
@ 2009-07-07  0:59                                 ` Kenichi Handa
  2009-07-07  9:43                                   ` Alfred M. Szmidt
  2009-07-08  0:16                                   ` Richard Stallman
  0 siblings, 2 replies; 167+ messages in thread
From: Kenichi Handa @ 2009-07-07  0:59 UTC (permalink / raw)
  To: Miles Bader; +Cc: eliz, ding, emacs-devel

In article <87y6r1san7.fsf@catnip.gol.com>, Miles Bader <miles@gnu.org> writes:

> Eli Zaretskii <eliz@gnu.org> writes:
>>> In the case non-ASCII character case mentioned above, he may not even
>>> _know_ that he needs to do anything or look at any documentation --
>>> he'll just send incorrect mail.
> >
> > Did you actually try that?  Mail mode will not let you send such
> > messages, it will prompt for a proper encoding.

> You may be thinking of a different case.

> I did test sending a message with non-ASCII text in the header, which
> mail-mode sent incorrectly, without any prompting or warning (you can't
> just encode header text using the body's encoding, you need to use the
> special "?=" encoding stuff).

I've been believed that mail-mode (and the new rmail code)
supports non-ASCII Subject: correctly, but it was not.  I've
just noticed that I'm using these setups in my .emacs.  The
similar codes should be installed (of course, not as hooks).

(require 'rfc2047)

(defun rmail-decode-header ()
  (save-excursion
    (goto-char (point-min))
    (search-forward "\n\n")
    (if (re-search-backward "^subject:" nil t)
	(let ((buffer-read-only nil)
	      (pos (match-end 0)))
	  (forward-line 1)
	  (while (looking-at "[ \t]")
	    (forward-line 1))
	  (rfc2047-decode-region pos (1- (point)))))))

(add-hook 'rmail-show-message-hook 'rmail-decode-header)

(require 'rmailsum)

(defun mail-decode-summary-line (line)
  (rfc2047-decode-string line))

(setq rmail-summary-line-decoder 'mail-decode-summary-line)

(require 'sendmail)

(defun mail-encode-header ()
  (save-excursion
    (goto-char (point-min))
    (search-forward mail-header-separator nil 'move)
    (let ((case-fold-search t)
	  pos)
      (when (re-search-backward "^subject:" nil t)
	(setq pos (point))
	(forward-line 1)
	(while (looking-at "[ \t][^ \t\n]")
	  (forward-line 1))
	(rfc2047-encode-region pos (1- (point)))))))

(add-hook 'mail-send-hook 'mail-encode-header)

(defun mail-decode-header ()
  (save-excursion
    (mail-position-on-field "Subject" t)
    (if (not (bobp))
	(let ((pos (point)))
	  (beginning-of-line)
	  (while (looking-at "[ \t]")
	    (forward-line -1))
	  (rfc2047-decode-region (point) pos)))))

(add-hook 'mail-setup-hook 'mail-decode-header)

---
Kenichi Handa
handa@m17n.org




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

* Re: Sending attachments
  2009-07-06 20:13               ` Eli Zaretskii
@ 2009-07-07  1:12                 ` Miles Bader
  2009-07-07  3:22                   ` Eli Zaretskii
  2009-07-07  9:43                   ` Alfred M. Szmidt
  0 siblings, 2 replies; 167+ messages in thread
From: Miles Bader @ 2009-07-07  1:12 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Chong Yidong, rms, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:
>> As has been pointed out, message-mode has more features than mail-mode.
>
> Yes.  And Gnus has much more features than Rmail.  So what?  We all do
> agree that much more features means more complexity in setting things
> up.  Why impose that on people who are happy with simple modes?

How, exactly, is message-mode an "imposition" on "people who are happy
with simple modes"?

  * Its user-interface?  [As far as I can tell, message-mode's UI
    _isn't_ complex, and indeed is pretty much exactly the same as
    mail-mode's (its additional functionality being largely invisible
    unless you use it).  I've used both many times over the years, and
    never noticed anything obviously different (there are random trivial
    differences like header-filling whitespace, etc, but those are not
    significant -- if they actually bother people, they can easily be
    changed).]

  * Its resource consumption?  [It doesn't seem any slower (which makes
    sense, as the great bulk of the extra functionality is only used
    with explicitly invoked).  It's more code, but doesn't seem horribly
    large by emacs standards, and additional memory used by its code
    seems small compared to the rest of emacs, and shouldn't be an issue
    on any modern system.]

  * Is it more buggy?  [Never noticed any obvious difference in this respect.]

  * Is it missing useful user-customization hooks or settings that
    mail-mode has?

  * Does it interface badly with some other Emacs code (e.g., rmail)?

Please, please, somebody who asserts that mail-mode is necessary, give
some concrete examples as to _why_.  The amount of hand-waving in this
thread is maddening...

-Miles

-- 
Future, n. That period of time in which our affairs prosper, our friends
are true and our happiness is assured.




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

* Re: Sending attachments
  2009-07-07  1:12                 ` Miles Bader
@ 2009-07-07  3:22                   ` Eli Zaretskii
  2009-07-07  4:54                     ` Miles Bader
  2009-07-07  9:43                   ` Alfred M. Szmidt
  1 sibling, 1 reply; 167+ messages in thread
From: Eli Zaretskii @ 2009-07-07  3:22 UTC (permalink / raw)
  To: Miles Bader; +Cc: cyd, rms, emacs-devel

> From: Miles Bader <miles@gnu.org>
> Cc: Chong Yidong <cyd@stupidchicken.com>, rms@gnu.org, emacs-devel@gnu.org
> Date: Tue, 07 Jul 2009 10:12:57 +0900
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> >> As has been pointed out, message-mode has more features than mail-mode.
> >
> > Yes.  And Gnus has much more features than Rmail.  So what?  We all do
> > agree that much more features means more complexity in setting things
> > up.  Why impose that on people who are happy with simple modes?
> 
> How, exactly, is message-mode an "imposition" on "people who are happy
> with simple modes"?

If you insist on everyone switching to message-mode and making
mail-mode obsolete, you are imposing message-mode on them.

> Please, please, somebody who asserts that mail-mode is necessary, give
> some concrete examples as to _why_.

Maybe someone else will.  This old fart simply doesn't want to learn a
new mode unless it's absolutely necessary.  Is this so hard to
understand?




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

* Re: Sending attachments
  2009-07-07  3:22                   ` Eli Zaretskii
@ 2009-07-07  4:54                     ` Miles Bader
  2009-07-07 19:14                       ` Eli Zaretskii
  0 siblings, 1 reply; 167+ messages in thread
From: Miles Bader @ 2009-07-07  4:54 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: cyd, rms, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:
>> How, exactly, is message-mode an "imposition" on "people who are happy
>> with simple modes"?
>
> If you insist on everyone switching to message-mode and making
> mail-mode obsolete, you are imposing message-mode on them.

"imposition" is pejorative; it implies that the people being imposed
upon will suffer in some way.  Since I don't see any obvious negative
effect from switching to message-mode (counter-examples welcome!), using
a pejorative term doesn't really seem warranted.

>> Please, please, somebody who asserts that mail-mode is necessary, give
>> some concrete examples as to _why_.
>
> Maybe someone else will.  This old fart simply doesn't want to learn a
> new mode unless it's absolutely necessary.  Is this so hard to
> understand?

What if the new mode is effectively indistinguishable from the old mode?

See, _that's_ why I'm so confused -- message-mode is not some kind of
wacky new UI, it seems to me to be pretty much _the same_ as mail-mode
from the user's point of view.

If I'm wrong about this, I'd like to know.  I've used both, so I think I
have _some_ clue, but maybe I'm missing something.

Thanks,

-Miles

-- 
Consult, v.i. To seek another's disapproval of a course already decided on.




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

* Re: Sending attachments
  2009-07-06  6:37                           ` Alfred M. Szmidt
  2009-07-06  7:47                             ` Miles Bader
  2009-07-06 14:13                             ` Chong Yidong
@ 2009-07-07  5:57                             ` Giorgos Keramidas
  2 siblings, 0 replies; 167+ messages in thread
From: Giorgos Keramidas @ 2009-07-07  5:57 UTC (permalink / raw)
  To: ams; +Cc: ding, emacs-devel, yamaoka, eliz, yandros, Miles Bader

On Mon, 06 Jul 2009 02:37:32 -0400, "Alfred M. Szmidt" <ams@gnu.org> wrote:
> For such a feature to be properly implmented they wouldn't be in
> mail-mode (or any such mode), but in a seperate mode that handles MIME
> attachment exclusivly.  If message-mode handles this itself, then it
> is a sign that it was not properly thought through.

It's a library already, IIRC.  The mml-* functions can parse a simple
meta-language from plain text buffers and generate MIME messages:

,---[ (emacs-mime)Top > Composing ----------------------------------
|
| 2 Composing
| ***********
|
| Creating a MIME message is boring and non-trivial.  Therefore, a
| library called `mml' has been defined that parses a language called MML
| (MIME Meta Language) and generates MIME messages.
|
`-----------------------------------------------------------------------

Perhaps mail-mode can be tweaked to use `mml-' functions too?





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

* Re: Sending attachments
  2009-07-06 15:05       ` Richard Stallman
@ 2009-07-07  9:43         ` Alfred M. Szmidt
  0 siblings, 0 replies; 167+ messages in thread
From: Alfred M. Szmidt @ 2009-07-07  9:43 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

       I'll see if I can wip up something that we can included in
       Emacs, that replaces mail-attach-file in mail-mode so that it
       will use MIME instead.

   Other than some simplifications, because it would not need to work
   in old Emacs versions, why is any change needed?

If etach is added to emacs, then I suppose it would be unneeded work.




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

* Re: Sending attachments
  2009-07-07  0:59                                 ` Kenichi Handa
@ 2009-07-07  9:43                                   ` Alfred M. Szmidt
  2009-07-08  0:16                                   ` Richard Stallman
  1 sibling, 0 replies; 167+ messages in thread
From: Alfred M. Szmidt @ 2009-07-07  9:43 UTC (permalink / raw)
  To: Kenichi Handa; +Cc: miles, eliz, ding, emacs-devel

That is really neat, thank you.



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

* Re: Sending attachments
  2009-07-07  1:12                 ` Miles Bader
  2009-07-07  3:22                   ` Eli Zaretskii
@ 2009-07-07  9:43                   ` Alfred M. Szmidt
  2009-07-07 10:11                     ` Richard Riley
  2009-07-07 13:53                     ` Chong Yidong
  1 sibling, 2 replies; 167+ messages in thread
From: Alfred M. Szmidt @ 2009-07-07  9:43 UTC (permalink / raw)
  To: Miles Bader; +Cc: eliz, emacs-devel, cyd, rms

Please, lets drop this discussion.  Richard volunteered to maintain
mail-mode, so do I, and Eli I suspect will be more than happy to do it
as well.




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

* Re: Sending attachments
  2009-07-06 16:16               ` Glenn Morris
@ 2009-07-07 10:05                 ` Richard Stallman
  0 siblings, 0 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-07 10:05 UTC (permalink / raw)
  To: Glenn Morris; +Cc: cyd, ams, miles, monnier, emacs-devel

    Have you looked at rmailmm.el, which is part of Emacs?

    ;;; rmailmm.el --- MIME decoding and display stuff for RMAIL

Thanks for reminding me about this.

Etach has code for making attachments and for decoding attachments,
but they are separate in implementation.  If rmailmm is better for
decoding, we could install only the Etach encoding support.

I looked at, and tried, both rmailmm and Etach's mime decoding code.

I just tried rmailmm on a message which had a text part and an HTML
part.  It made a temporary buffer and showed both of them in it.  If I
changed it to put some separator between the two parts, it would be
usable.

etach-detach is more convenient because does one attachment at a time.
It also understands mime more.  For instance, it understands that the
text and HTLM are alternatives and you only want to see one.

I needed to make a few changes to get it to work with rmail-mbox, but
they were simplifications.  It now displays the textual attachments
right in the rmail view buffer.

I concluded that the etach-detach code is superior.  I think it should
replace rmailmm.  With a little more work I could give it a mode
of behavior similar to rmailmm, so as to make the replacement smoother.






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

* Re: Sending attachments
  2009-07-05 14:47             ` Chong Yidong
  2009-07-06 20:13               ` Eli Zaretskii
@ 2009-07-07 10:05               ` Richard Stallman
  2009-07-07 13:49                 ` Chong Yidong
  1 sibling, 1 reply; 167+ messages in thread
From: Richard Stallman @ 2009-07-07 10:05 UTC (permalink / raw)
  To: Chong Yidong; +Cc: emacs-devel, miles

    As has been pointed out, message-mode has more features than mail-mode.
    Even if we wanted to bring mail-mode up to par, that would turn it into
    something just as complex,

If "par" means all the same features, nobody wants to do that.  It is not
necessary or useful.

What I want to do is install Etach.  Specifically, the part of Etach
that creates mime attachments.  This would provide the facility of
sending attachments in Mail mode, but without any actual change to
sendmail.el.

There may be a few other features that it would be nice to provide in
Mail mode, and some of them might involve adding some code in that file.
But this would not involve anything like the complexity of Message mode.

Etach attachment is a modular feature which does not directly interact
with the code in sendmail.el.  Users could load it or not.

message.el forces the loading of many other packages (I sent the list
before).  So its effective complexity includes all of them.  It is
tied in with Gnus, and can't be maintained on its own.  Mail mode is nice
and simple, and I will maintain it myself if you don't want to.







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

* Re: Sending attachments
  2009-07-06 16:07               ` Chong Yidong
@ 2009-07-07 10:05                 ` Richard Stallman
  2009-07-07 12:19                   ` Andreas Schwab
  2009-07-07 12:48                   ` Jason Rumney
  0 siblings, 2 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-07 10:05 UTC (permalink / raw)
  To: Chong Yidong; +Cc: ams, emacs-devel, monnier, miles

    We should not add yet another mime library to Emacs, when we already
    have one (mml.el).

Etach and mml both deal with puttimg mime into a message, but in very
different ways.  mml.el requires the user to write text in the MML
language and then convert it into mime.

Etach has a convenient interface M-x attach which attaches a file in
the message in the current buffer.  That is a simple feature and
easy to use.

Etach and MML are complementary, so it is better to have them both.





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

* Re: Sending attachments
  2009-07-07  9:43                   ` Alfred M. Szmidt
@ 2009-07-07 10:11                     ` Richard Riley
  2009-07-07 13:53                     ` Chong Yidong
  1 sibling, 0 replies; 167+ messages in thread
From: Richard Riley @ 2009-07-07 10:11 UTC (permalink / raw)
  To: ams; +Cc: eliz, emacs-devel, cyd, rms, Miles Bader


"Alfred M. Szmidt" <ams@gnu.org> writes:

> Please, lets drop this discussion.  Richard volunteered to maintain
> mail-mode, so do I, and Eli I suspect will be more than happy to do it
> as well.
>

Reading this discussion is quite interesting. I have to ask why you are
so keen to duplicate efforts when it seems relatively clear that
message-mode is a non intrusive superset of mail-mode. Getting more
familiar with emacs I have to say that its frequently an issue for new
adopters as well as seasoned users that there are too many versions of
effectively the same thing leading to duplicated efforts as well as
confusion in both code usage and documentation. In addition, quoting properly
might add more force to your argument. Miles has asked multiple times
for something that mail-mode provides that message mode does not, he has
pointed out how there is no real learning curve. I would be very
interested, from the developer point of view, to know why you seem to be
so dead set against retiring what is effectively a sub-set of a more
commonly used and better maintained mode like message-mode. Especially
in the context of adding things to mail-mode which are blatantly
unproven in this thread. 

Excuse me my 3 seconds, but, well, the arguments for maintaining
mail-mode seem, to me who has no agenda, nothing more than "because I
say so".




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

* Re: Sending attachments
  2009-07-07 10:05                 ` Richard Stallman
@ 2009-07-07 12:19                   ` Andreas Schwab
  2009-07-08  0:16                     ` Richard Stallman
  2009-07-07 12:48                   ` Jason Rumney
  1 sibling, 1 reply; 167+ messages in thread
From: Andreas Schwab @ 2009-07-07 12:19 UTC (permalink / raw)
  To: rms; +Cc: Chong Yidong, miles, ams, monnier, emacs-devel

Richard Stallman <rms@gnu.org> writes:

>     We should not add yet another mime library to Emacs, when we already
>     have one (mml.el).
>
> Etach and mml both deal with puttimg mime into a message, but in very
> different ways.  mml.el requires the user to write text in the MML
> language and then convert it into mime.

It doesn't.  There are front-end functions that do all that for you.

> Etach has a convenient interface M-x attach which attaches a file in
> the message in the current buffer.

As does MML (mml-attach-file).

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."




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

* Re: Sending attachments
  2009-07-07 10:05                 ` Richard Stallman
  2009-07-07 12:19                   ` Andreas Schwab
@ 2009-07-07 12:48                   ` Jason Rumney
  1 sibling, 0 replies; 167+ messages in thread
From: Jason Rumney @ 2009-07-07 12:48 UTC (permalink / raw)
  To: rms; +Cc: ams, emacs-devel

Richard Stallman wrote:
> mml.el requires the user to write text in the MML
> language and then convert it into mime.
>   

Most users would use mml-attach-file, though some might find writing 
text in MML faster if they are familiar with it. And the conversion to 
MIME is the major part of what mml.el handles, as part of a send hook 
(or maybe directly called by message-mode's send function).






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

* Re: Sending attachments
  2009-07-07 10:05               ` Richard Stallman
@ 2009-07-07 13:49                 ` Chong Yidong
  2009-07-08  0:16                   ` Richard Stallman
  0 siblings, 1 reply; 167+ messages in thread
From: Chong Yidong @ 2009-07-07 13:49 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel, miles

Richard Stallman <rms@gnu.org> writes:

> What I want to do is install Etach.  Specifically, the part of Etach
> that creates mime attachments.  This would provide the facility of
> sending attachments in Mail mode, but without any actual change to
> sendmail.el.

Since there is existing, actively-maintained code in Emacs for sending
attachments, it's incorrect to add yet another library for this.
Assuming the status quo, with mail-mode and message-mode separate,
adding mime functionality to mail-mode should involve calling this
existing code.

> message.el forces the loading of many other packages (I sent the list
> before).  So its effective complexity includes all of them.  It is
> tied in with Gnus, and can't be maintained on its own.

Message mode is actively maintained by the Gnus maintainers, so this
point is irrelevant.  And there is no other salient objection to message
mode, as far as I can tell.




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

* Re: Sending attachments
  2009-07-07  9:43                   ` Alfred M. Szmidt
  2009-07-07 10:11                     ` Richard Riley
@ 2009-07-07 13:53                     ` Chong Yidong
  1 sibling, 0 replies; 167+ messages in thread
From: Chong Yidong @ 2009-07-07 13:53 UTC (permalink / raw)
  To: ams; +Cc: eliz, emacs-devel, rms, Miles Bader

"Alfred M. Szmidt" <ams@gnu.org> writes:

> Please, lets drop this discussion.  Richard volunteered to maintain
> mail-mode, so do I, and Eli I suspect will be more than happy to do it
> as well.

The problem is that further development of mail-mode will likely involve
adding code that directly duplicates the existing code used in message
mode, with inferior results (e.g. mml vs etach).




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

* Re: Sending attachments
  2009-07-07  4:54                     ` Miles Bader
@ 2009-07-07 19:14                       ` Eli Zaretskii
  2009-07-11 18:50                         ` Stefan Monnier
  0 siblings, 1 reply; 167+ messages in thread
From: Eli Zaretskii @ 2009-07-07 19:14 UTC (permalink / raw)
  To: Miles Bader; +Cc: cyd, rms, emacs-devel

> From: Miles Bader <miles@gnu.org>
> Cc: cyd@stupidchicken.com, rms@gnu.org, emacs-devel@gnu.org
> Date: Tue, 07 Jul 2009 13:54:25 +0900
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> >> How, exactly, is message-mode an "imposition" on "people who are happy
> >> with simple modes"?
> >
> > If you insist on everyone switching to message-mode and making
> > mail-mode obsolete, you are imposing message-mode on them.
> 
> "imposition" is pejorative

So is ``leaky bandaids''.

> > This old fart simply doesn't want to learn a new mode unless it's
> > absolutely necessary.  Is this so hard to understand?
> 
> What if the new mode is effectively indistinguishable from the old mode?

My gray hair says there ain't no such thing.  If it's more powerful
and sophisticated, there's some price to pay.




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

* Re: Sending attachments
  2009-07-07 13:49                 ` Chong Yidong
@ 2009-07-08  0:16                   ` Richard Stallman
  2009-07-10 13:29                     ` Chong Yidong
  2009-07-11 19:02                     ` Stefan Monnier
  0 siblings, 2 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-08  0:16 UTC (permalink / raw)
  To: Chong Yidong; +Cc: emacs-devel, miles

    > message.el forces the loading of many other packages (I sent the list
    > before).  So its effective complexity includes all of them.  It is
    > tied in with Gnus, and can't be maintained on its own.

    Message mode is actively maintained by the Gnus maintainers, so this
    point is irrelevant.

It is not a good thing that message mode can only be maintained by the
Gnus maintainers.




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

* Re: Sending attachments
  2009-07-07 12:19                   ` Andreas Schwab
@ 2009-07-08  0:16                     ` Richard Stallman
  2009-07-08  9:46                       ` Andreas Schwab
                                         ` (2 more replies)
  0 siblings, 3 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-08  0:16 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: cyd, miles, ams, monnier, emacs-devel

    > Etach has a convenient interface M-x attach which attaches a file in
    > the message in the current buffer.

    As does MML (mml-attach-file).

It isn't in the emacs-mime manual so I did not know about it.  I tried
it just now.  It asked me a lot of questions and then inserted this
text.

<#part type="text/x-sh" filename="~/foo.sh" disposition=inline description=foo>
<#/part>

I suppose this is MML and needs to get converted later.
However, when I sent the message with C-c C-c, it did not convert.
I don't see that it set up any hook to do so.

After a lot of searching thru that manual I found the function
mml-to-mime.

If mml-to-mime were put on a hook so that C-c C-c would call it, this
feature would be usable.  A suitable front-end to mml-attach-file
could avoid asking all the annoying questions.  It would only be
necessary to document it.

However, that hook could also cause trouble, since it might
trigger by accident when users did not intend it.

Another drawback, compared with etach-detach, is that you don't see
what is really going to appear in the message.




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

* Re: Sending attachments
  2009-07-07  0:59                                 ` Kenichi Handa
  2009-07-07  9:43                                   ` Alfred M. Szmidt
@ 2009-07-08  0:16                                   ` Richard Stallman
  2009-07-11 15:45                                     ` Stefan Monnier
  1 sibling, 1 reply; 167+ messages in thread
From: Richard Stallman @ 2009-07-08  0:16 UTC (permalink / raw)
  To: Kenichi Handa; +Cc: miles, eliz, ding, emacs-devel

I can adapt and install Handa's code.  Before I do,
does anyone see a problem with the change he proposes?



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

* Re: Sending attachments
  2009-07-08  0:16                     ` Richard Stallman
@ 2009-07-08  9:46                       ` Andreas Schwab
  2009-07-08 18:34                         ` Richard Stallman
  2009-07-08 11:41                       ` Jason Rumney
  2009-07-08 19:08                       ` Reiner Steib
  2 siblings, 1 reply; 167+ messages in thread
From: Andreas Schwab @ 2009-07-08  9:46 UTC (permalink / raw)
  To: rms; +Cc: cyd, miles, ams, monnier, emacs-devel

Richard Stallman <rms@gnu.org> writes:

> Another drawback, compared with etach-detach, is that you don't see
> what is really going to appear in the message.

That's what mml-preview is for.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."




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

* Re: Sending attachments
  2009-07-08  0:16                     ` Richard Stallman
  2009-07-08  9:46                       ` Andreas Schwab
@ 2009-07-08 11:41                       ` Jason Rumney
  2009-07-08 13:41                         ` Miles Bader
                                           ` (2 more replies)
  2009-07-08 19:08                       ` Reiner Steib
  2 siblings, 3 replies; 167+ messages in thread
From: Jason Rumney @ 2009-07-08 11:41 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

Richard Stallman wrote:
> <#part type="text/x-sh" filename="~/foo.sh" disposition=inline description=foo>
> <#/part>
>   

> A suitable front-end to mml-attach-file
> could avoid asking all the annoying questions.

It is probably reasonable to use a type of application/octet-stream, 
disposition of attachment and have no description for simple 
attachments.  So the only absolutely necessary question is the 
filename.  We could have another command for attaching inline images and 
text files if that is a goal also, and such a function could determine 
the type automatically from the file type (which seems to be done now, 
but the user is prompted to change it), always have a disposition of 
inline, and again not use description.






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

* Re: Sending attachments
  2009-07-08 11:41                       ` Jason Rumney
@ 2009-07-08 13:41                         ` Miles Bader
  2009-07-08 14:16                           ` Teemu Likonen
  2009-07-08 19:07                         ` Reiner Steib
  2009-07-09 11:54                         ` Richard Stallman
  2 siblings, 1 reply; 167+ messages in thread
From: Miles Bader @ 2009-07-08 13:41 UTC (permalink / raw)
  To: Jason Rumney; +Cc: rms, emacs-devel

Jason Rumney <jasonr@gnu.org> writes:
> always have a disposition of inline, and again not use description.

Hmm, I think disposition=inline is often (usually?) wrong...
My impression is that most people, when they attach something, want it
attached as a separate downloadable thingie.

-Miles

-- 
Brain, n. An apparatus with which we think we think.




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

* Re: Sending attachments
  2009-07-08 13:41                         ` Miles Bader
@ 2009-07-08 14:16                           ` Teemu Likonen
  2009-07-08 14:27                             ` Miles Bader
  0 siblings, 1 reply; 167+ messages in thread
From: Teemu Likonen @ 2009-07-08 14:16 UTC (permalink / raw)
  To: Miles Bader; +Cc: emacs-devel, rms, Jason Rumney

On 2009-07-08 22:41 (+0900), Miles Bader wrote:

> Jason Rumney <jasonr@gnu.org> writes:
>> always have a disposition of inline, and again not use description.
>
> Hmm, I think disposition=inline is often (usually?) wrong...
> My impression is that most people, when they attach something, want it
> attached as a separate downloadable thingie.

It's very useful to have a choice. For small textual file the "inline"
type is good because it can be seen and read without further action. An
example:

    http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=3437#10

Inline MIME part is better than putting the content to the message body
because it is protected from possible word-wrapping of the editor or
mail client. Inline parts can be saved to disk too.

Real attachment is obviously better for binary files and large textual
files. It would waste too much space if a large textual attachment was
an "inline".

In my opinion mml-attach-file does not ask "annoying question". Other
than choosing the file user can just press Enter to all the questions.




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

* Re: Sending attachments
  2009-07-08 14:16                           ` Teemu Likonen
@ 2009-07-08 14:27                             ` Miles Bader
  2009-07-08 14:40                               ` Teemu Likonen
                                                 ` (2 more replies)
  0 siblings, 3 replies; 167+ messages in thread
From: Miles Bader @ 2009-07-08 14:27 UTC (permalink / raw)
  To: Teemu Likonen; +Cc: Jason Rumney, rms, emacs-devel

Teemu Likonen <tlikonen@iki.fi> writes:
>>> always have a disposition of inline, and again not use description.
>>
>> Hmm, I think disposition=inline is often (usually?) wrong...
>> My impression is that most people, when they attach something, want it
>> attached as a separate downloadable thingie.
>
> It's very useful to have a choice. For small textual file the "inline"
> type is good because it can be seen and read without further action.

Sure, I agree there are times when inline can be useful -- my objection
was to the (apparent) idea of having inline be the default without
prompting (I think _if_ people want to avoid prompting, inline is the
wrong default).

-Miles

-- 
自らを空にして、心を開く時、道は開かれる




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

* Re: Sending attachments
  2009-07-08 14:27                             ` Miles Bader
@ 2009-07-08 14:40                               ` Teemu Likonen
  2009-07-08 15:09                               ` Jason Rumney
  2009-07-09 11:54                               ` Richard Stallman
  2 siblings, 0 replies; 167+ messages in thread
From: Teemu Likonen @ 2009-07-08 14:40 UTC (permalink / raw)
  To: Miles Bader; +Cc: Jason Rumney, rms, emacs-devel

On 2009-07-08 23:27 (+0900), Miles Bader wrote:

> Teemu Likonen <tlikonen@iki.fi> writes:
>> It's very useful to have a choice. For small textual file the
>> "inline" type is good because it can be seen and read without further
>> action.
>
> Sure, I agree there are times when inline can be useful -- my
> objection was to the (apparent) idea of having inline be the default
> without prompting (I think _if_ people want to avoid prompting, inline
> is the wrong default).

Oh yes, I agree very much, inline would be wrong default if the question
was totally hidden. I wanted to point out that those "annoying
questions" (according to Richard) are _useful_ questions to me.




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

* Re: Sending attachments
  2009-07-08 14:27                             ` Miles Bader
  2009-07-08 14:40                               ` Teemu Likonen
@ 2009-07-08 15:09                               ` Jason Rumney
  2009-07-09  2:47                                 ` Miles Bader
  2009-07-09 11:54                               ` Richard Stallman
  2 siblings, 1 reply; 167+ messages in thread
From: Jason Rumney @ 2009-07-08 15:09 UTC (permalink / raw)
  To: Miles Bader; +Cc: emacs-devel

I wrote:

    It is probably reasonable to use a type of application/octet-stream,
    disposition of attachment and have no description for simple
    attachments.
    ....
    We could have another command for attaching inline images and text
    files if that is a goal also, and such a function could ....


Miles Bader quoted:
>>>> always have a disposition of inline, and again not use description.
>>>>         
> Sure, I agree there are times when inline can be useful -- my objection
> was to the (apparent) idea of having inline be the default without
> prompting (I think _if_ people want to avoid prompting, inline is the
> wrong default).
>   


It seems you only read the last bit of what I wrote.





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

* Re: Sending attachments
  2009-07-08  9:46                       ` Andreas Schwab
@ 2009-07-08 18:34                         ` Richard Stallman
  2009-07-08 20:36                           ` Reiner Steib
  0 siblings, 1 reply; 167+ messages in thread
From: Richard Stallman @ 2009-07-08 18:34 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: cyd, miles, ams, monnier, emacs-devel

    That's what mml-preview is for.

It isn't mentioned in the Emacs-Mime manual.  Its doc string seems to
say it displays the message with Gnus, which is not what I want to do.

I did manage to preview the mime text by executing (mml-to-mime).
(That interface is not satisfactory.)  But now, after looking at the
code of mml-preview, I wonder whether that is enough.  The code of
mml-preview does things I do not understand the purpose of.

Here's what the code does, leading up to the call to mml-to-mime.
Why is this needed?  What does this do?

      (mml-preview-insert-mail-followup-to)
      (let ((message-deletable-headers (if (message-news-p)
					   nil
					 message-deletable-headers)))
	(message-generate-headers
	 (copy-sequence (if (message-news-p)
			    message-required-news-headers
			  message-required-mail-headers))))
      (if (re-search-forward
	   (concat "^" (regexp-quote mail-header-separator) "\n") nil t)
	  (replace-match "\n"))
      (let ((mail-header-separator ""));; mail-header-separator is removed.
	(message-sort-headers)
	(mml-to-mime))




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

* Re: Sending attachments
  2009-07-08 11:41                       ` Jason Rumney
  2009-07-08 13:41                         ` Miles Bader
@ 2009-07-08 19:07                         ` Reiner Steib
  2009-07-09 11:54                         ` Richard Stallman
  2 siblings, 0 replies; 167+ messages in thread
From: Reiner Steib @ 2009-07-08 19:07 UTC (permalink / raw)
  To: Jason Rumney; +Cc: rms, emacs-devel

On Wed, Jul 08 2009, Jason Rumney wrote:

> Richard Stallman wrote:
[...]
>> A suitable front-end to mml-attach-file could avoid asking all the
>> annoying questions.
>
> It is probably reasonable to use a type of application/octet-stream,

Please don't follow the bad behavior of MS Outlook.  mml-attach-file
figures out the suitable default by consulting the MIME type / Mailcap
files.  application/octet-stream is more or less a fallback for
arbitrary binary data, see RFC 2046
<http://tools.ietf.org/html/rfc2046#section-4.5.1>.

> disposition of attachment and have no description for simple
> attachments.  So the only absolutely necessary question is the
> filename.

We could add an option as we do when using drag and drop to attach a
file:

,----[ <f1> v mml-dnd-attach-options RET ]
| mml-dnd-attach-options is a variable defined in `mml.el'.
| Its value is nil
| 
| Documentation:
| Which options should be queried when attaching a file via drag and drop.
| 
| If it is a list, valid members are `type', `description' and
| `disposition'.  `disposition' implies `type'.  If it is nil,
| don't ask for options.  If it is t, ask the user whether or not
| to specify options.
| 
| You can customize this variable.
`----

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/




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

* Re: Sending attachments
  2009-07-08  0:16                     ` Richard Stallman
  2009-07-08  9:46                       ` Andreas Schwab
  2009-07-08 11:41                       ` Jason Rumney
@ 2009-07-08 19:08                       ` Reiner Steib
  2 siblings, 0 replies; 167+ messages in thread
From: Reiner Steib @ 2009-07-08 19:08 UTC (permalink / raw)
  To: Richard Stallman; +Cc: emacs-devel

On Wed, Jul 08 2009, Richard Stallman wrote:

>     As does MML (mml-attach-file).
>
> It isn't in the emacs-mime manual so I did not know about it.  

It is documented in the Message manual:

,----[ (info "(message)MIME") ]
|    The most typical thing users want to use the multipart things in
| MIME for is to add "attachments" to mail they send out.  This can be
| done with the `C-c C-a' command (`M-x mml-attach-file'), which will
| prompt for a file name and a MIME type.
| 
|    If your Emacs supports drag and drop, you can also drop the file in
| the Message buffer.  [...]
`----

> I tried it just now.  It asked me a lot of questions and then
> inserted this text.
>
> <#part type="text/x-sh" filename="~/foo.sh" disposition=inline description=foo>
> <#/part>
>
> I suppose this is MML and needs to get converted later.
> However, when I sent the message with C-c C-c, it did not convert.
> I don't see that it set up any hook to do so.

message-mode does the conversion automatically

,----[ (info "(message)MIME") ]
| Message is a MIME-compliant posting agent.  The user generally doesn't
| have to do anything to make the MIME happen--Message will automatically
| add the `Content-Type' and `Content-Transfer-Encoding' headers.
`----

> After a lot of searching thru that manual I found the function
> mml-to-mime.

Well, it under Composing -> Conversion, which seem quite suitable to
me.  

,----[ (info "(emacs-mime)Conversion") ]
|    An MML message can be converted back to MIME by the `mml-to-mime'
| function.
`----

message-mode uses mml-generate-mime, though:

,----[ (info "(emacs-mime)Composing") ]
|    The main interface function is `mml-generate-mime'.  It will examine
| the contents of the current (narrowed-to) buffer and return a string
| containing the MIME message.
`----

> If mml-to-mime were put on a hook so that C-c C-c would call it, this
> feature would be usable.  A suitable front-end to mml-attach-file
> could avoid asking all the annoying questions.  

mml-attach-file is the front-end used in message-mode for many years.
I quite often adjust type and disposition (inline vs. attachment).  I
don't recall any complains about the questions from our users.  Just
hit RET if you are happy with.

> It would only be necessary to document it.
>
> However, that hook could also cause trouble, since it might
> trigger by accident when users did not intend it.

It quite unlikely that users insert MML markup by accident.  When
writing about it, there is `mml-quote-region'.

> Another drawback, compared with etach-detach, is that you don't see
> what is really going to appear in the message.

C-u M-x mml-preview RET, M-x mml-preview RET

,----[ <f1> f mml-preview RET ]
| mml-preview is an interactive compiled Lisp function in `mml.el'.
| It is bound to <menu-bar> <Attachments> <Preview>, C-c RET P.
| (mml-preview &optional RAW)
| 
| Display current buffer with Gnus, in a new buffer.
| If RAW, display a raw encoded MIME message.
`----

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/




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

* Re: Sending attachments
  2009-07-08 18:34                         ` Richard Stallman
@ 2009-07-08 20:36                           ` Reiner Steib
  2009-07-09 11:53                             ` Richard Stallman
  0 siblings, 1 reply; 167+ messages in thread
From: Reiner Steib @ 2009-07-08 20:36 UTC (permalink / raw)
  To: Richard Stallman; +Cc: emacs-devel

On Wed, Jul 08 2009, Richard Stallman wrote:

> I did manage to preview the mime text by executing (mml-to-mime).
> (That interface is not satisfactory.)  But now, after looking at the
> code of mml-preview, I wonder whether that is enough.  The code of
> mml-preview does things I do not understand the purpose of.
>
> Here's what the code does, leading up to the call to mml-to-mime.
> Why is this needed?  

The purpose is to display the mail message more like it would be sent.

> What does this do?

Removing/adding suitable headers, stripping mail-header-separator,
sorting headers.

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/




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

* Re: Sending attachments
  2009-07-08 15:09                               ` Jason Rumney
@ 2009-07-09  2:47                                 ` Miles Bader
  0 siblings, 0 replies; 167+ messages in thread
From: Miles Bader @ 2009-07-09  2:47 UTC (permalink / raw)
  To: Jason Rumney; +Cc: emacs-devel

Jason Rumney <jasonr@gnu.org> writes:
> It seems you only read the last bit of what I wrote.

Whatever....  If people want to waste their time duplicating code and
making Emacs harder to use and understand for silly reasons, it's their
business, but I'm not going spend any more effort on it.

So, I'm going to plonk this thread.

If at some point real issues start to be addressed (for instance,
actually figuring out a coherent plan for making mail/news sending in
Emacs better for everybody, not just rms and ams), could someone give me
a ping, so I can start paying attention again?

Thanks,

-Miles

-- 
My spirit felt washed.  With blood.  [Eli Shin, on "The Passion of the Christ"]




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

* Re: Sending attachments
  2009-07-08 20:36                           ` Reiner Steib
@ 2009-07-09 11:53                             ` Richard Stallman
  0 siblings, 0 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-09 11:53 UTC (permalink / raw)
  To: Reiner Steib; +Cc: emacs-devel

    The purpose is to display the mail message more like it would be sent.

    > What does this do?

    Removing/adding suitable headers, stripping mail-header-separator,
    sorting headers.

I see that that is true as regards mail-header-separator.
However, the rest seems not to be right for Mail mode.
It looks like this code is written only for use in Gnus.




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

* Re: Sending attachments
  2009-07-08 11:41                       ` Jason Rumney
  2009-07-08 13:41                         ` Miles Bader
  2009-07-08 19:07                         ` Reiner Steib
@ 2009-07-09 11:54                         ` Richard Stallman
  2009-07-09 20:47                           ` Reiner Steib
  2 siblings, 1 reply; 167+ messages in thread
From: Richard Stallman @ 2009-07-09 11:54 UTC (permalink / raw)
  To: Jason Rumney; +Cc: emacs-devel

    It is probably reasonable to use a type of application/octet-stream, 
    disposition of attachment and have no description for simple 
    attachments.

For most files, the type can be determined from the file name and
contents.  The simple interface should be able to do everything
automatically.  Maybe just accepting mml's default type would
do the right job.  If not, the code to do this is available in Etach.






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

* Re: Sending attachments
  2009-07-08 14:27                             ` Miles Bader
  2009-07-08 14:40                               ` Teemu Likonen
  2009-07-08 15:09                               ` Jason Rumney
@ 2009-07-09 11:54                               ` Richard Stallman
  2009-07-09 20:43                                 ` Reiner Steib
  2 siblings, 1 reply; 167+ messages in thread
From: Richard Stallman @ 2009-07-09 11:54 UTC (permalink / raw)
  To: Miles Bader; +Cc: tlikonen, jasonr, emacs-devel

I searched several weeks of incoming mail and disposition=inline never
appears.

Viewing text inline is very useful, but that doesn't mean sending
disposition=inline is useful.  Both rmailmm and Etach display some
text parts inline, and they don't need to see disposition=inline to do
it.




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

* Re: Sending attachments
  2009-07-09 11:54                               ` Richard Stallman
@ 2009-07-09 20:43                                 ` Reiner Steib
  2009-07-10  6:39                                   ` Richard Stallman
  0 siblings, 1 reply; 167+ messages in thread
From: Reiner Steib @ 2009-07-09 20:43 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

On Thu, Jul 09 2009, Richard Stallman wrote:

> I searched several weeks of incoming mail and disposition=inline
> never appears.

There are many examples in emacs-devel:

/var/spool/news/gmane/emacs/devel# grep '^Content-Disposition:.*inline.*filename' *|wc -l
40

Most MUAs (Mail User Agents) probably don't offer to any choice to
the user.

> Viewing text inline is very useful, but that doesn't mean sending
> disposition=inline is useful.  

"disposition" is more or less a recommendation for the receiving agent
how to display it.

> Both rmailmm and Etach display some text parts inline, and they
> don't need to see disposition=inline to do it.

Neither does Gnus (and probably MH-E, too).  Viewing inline
vs. attachment can be toggled interactively or specified through
`mm-inline-override-types'.

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/




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

* Re: Sending attachments
  2009-07-09 11:54                         ` Richard Stallman
@ 2009-07-09 20:47                           ` Reiner Steib
  0 siblings, 0 replies; 167+ messages in thread
From: Reiner Steib @ 2009-07-09 20:47 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

On Thu, Jul 09 2009, Richard Stallman wrote:

> For most files, the type can be determined from the file name and
> contents.  

That is what mml.el does.

> The simple interface should be able to do everything automatically.
> Maybe just accepting mml's default type would do the right job.

For most types, it is okay.  But e.g. for "README" text/plain +
disposition=inline is much more suitable than application/octet-stream
+ disposition=attachment.

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/




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

* Re: Sending attachments
  2009-07-09 20:43                                 ` Reiner Steib
@ 2009-07-10  6:39                                   ` Richard Stallman
  2009-07-10  9:02                                     ` Stephen J. Turnbull
  2009-07-10  9:17                                     ` Jason Rumney
  0 siblings, 2 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-10  6:39 UTC (permalink / raw)
  To: Reiner Steib; +Cc: emacs-devel

    There are many examples in emacs-devel:

    /var/spool/news/gmane/emacs/devel# grep '^Content-Disposition:.*inline.*filename' *|wc -l
    40

If I search my incoming mail over a long enough period,
I suppose I would see them.

    "disposition" is more or less a recommendation for the receiving agent
    how to display it.

    > Both rmailmm and Etach display some text parts inline, and they
    > don't need to see disposition=inline to do it.

    Neither does Gnus (and probably MH-E, too).  Viewing inline
    vs. attachment can be toggled interactively or specified through
    `mm-inline-override-types'.

In theory, that kind of recommendation might be useful.
But in practice, since the readers decide heuristically
whether to display inline, users mostly have no reason
to go out of their way to offer a recommendation.
It is better normally not to ask.





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

* Re: Sending attachments
  2009-07-10  6:39                                   ` Richard Stallman
@ 2009-07-10  9:02                                     ` Stephen J. Turnbull
  2009-07-10 11:01                                       ` Eli Zaretskii
  2009-07-11 18:29                                       ` Richard Stallman
  2009-07-10  9:17                                     ` Jason Rumney
  1 sibling, 2 replies; 167+ messages in thread
From: Stephen J. Turnbull @ 2009-07-10  9:02 UTC (permalink / raw)
  To: rms; +Cc: Reiner Steib, emacs-devel

Richard Stallman writes:

 >     Neither does Gnus (and probably MH-E, too).  Viewing inline
 >     vs. attachment can be toggled interactively or specified through
 >     `mm-inline-override-types'.
 > 
 > In theory, that kind of recommendation might be useful.
 > But in practice, since the readers decide heuristically

True, but shouldn't we focus on users of smarter readers, and on our
own use cases?  Most Emacs users don't use such dumb readers.  They
use Gnus or another advanced implementation which will normally
respect the recommendation.

 > whether to display inline, users mostly have no reason
 > to go out of their way to offer a recommendation.
 > It is better normally not to ask.

That may be true in many users' practice.  However, I find myself
offering a recommendation about 10-20% of the time, because I disagree
with the default.  For example, some projects include images.  I
generally do not want a new version of an image displayed in the
buffer, I want it saved to the project tree.  But when I'm sending
mail to a local users' group of the last meeting with pix of
somebody's system, I often do want it inlined.  I've been asked how I
do that by non-Emacs users on several occasions, so I know that there
are readers out there that do respect this header.

Patches are another example.  Sometimes patches are intended to be
reviewed, but discouraging cut and paste from mail buffers (of
non-Emacs MUAs) is a good idea since they often munge the text of both
patches and 

Sure, the user can (if they're lucky or wilful enough to be using a
good MUA like Gnus) toggle the display or save an inlined attachment
to a file if they want.  But it takes me ~0.2 seconds (1 keystroke) to
accept the default 80% of the time when it really doesn't matter, ~1
second (1 keystroke) to accept the default when it matters, and ~2
seconds (2 keystrokes with completion) to change it.

I think that's a small cost to advertise this feature, and give the
expert user the option by default.

I realize that there are users with disabilities etc such that the
cost is much higher.  However, I suggest they may be better served by
a feature that evaluates the quality of the default offered, and short
circuits the question when the program is "pretty sure" the default is
correct.  Eg, I don't think anybody really would want tar.gz displayed
inline by default.  Ditto large PDFs.

It would also be possible to specify a customizable alist of MIME
types with values 'attachment or 'inline, allowing the user to specify
ones that should automatically be given a particular disposition.
Something like that must already be part of MML, although if it's
customizable I didn't find it.

This may be way more complex than you would like, of course.

Thing is, that complexity is going to pop up at every turn as you
develop these features.





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

* Re: Sending attachments
  2009-07-10  6:39                                   ` Richard Stallman
  2009-07-10  9:02                                     ` Stephen J. Turnbull
@ 2009-07-10  9:17                                     ` Jason Rumney
  1 sibling, 0 replies; 167+ messages in thread
From: Jason Rumney @ 2009-07-10  9:17 UTC (permalink / raw)
  To: rms; +Cc: Reiner Steib, emacs-devel

Richard Stallman wrote:
> But in practice, since the readers decide heuristically
> whether to display inline, users mostly have no reason
> to go out of their way to offer a recommendation.
> It is better normally not to ask.
>   

A good interface might  be to normally only prompt for the filename, but 
if a prefix argument is given then prompt for disposition, content-type 
and description also.  Then users would have a simple interface, but can 
still access the full functionality if they want.






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

* Re: Sending attachments
  2009-07-10  9:02                                     ` Stephen J. Turnbull
@ 2009-07-10 11:01                                       ` Eli Zaretskii
  2009-07-10 11:55                                         ` Jason Rumney
  2009-07-10 12:42                                         ` Stephen J. Turnbull
  2009-07-11 18:29                                       ` Richard Stallman
  1 sibling, 2 replies; 167+ messages in thread
From: Eli Zaretskii @ 2009-07-10 11:01 UTC (permalink / raw)
  To: Stephen J. Turnbull; +Cc: rms, Reiner.Steib, emacs-devel

> From: "Stephen J. Turnbull" <stephen@xemacs.org>
> Date: Fri, 10 Jul 2009 18:02:28 +0900
> Cc: Reiner Steib <Reiner.Steib@gmx.de>, emacs-devel@gnu.org
> 
> Thing is, that complexity is going to pop up at every turn as you
> develop these features.

True.  Which is why I thought the intent was to create something
exceedingly simple, e.g.:

  . a single command to attach a file, perhaps with C-u that allows
    finer control on MIME headers (see Jason's proposal not long ago)

  . a single command to save one attachment to a disk file, perhaps
    with C-u that would run a program on the data rather than saving
    it

Anything more complex than that is really going to resemble existing
code in mml and elsewhere, and is not worth another from-scratch
effort, IMO.




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

* Re: Sending attachments
  2009-07-10 11:01                                       ` Eli Zaretskii
@ 2009-07-10 11:55                                         ` Jason Rumney
  2009-07-11 18:30                                           ` Richard Stallman
  2009-07-10 12:42                                         ` Stephen J. Turnbull
  1 sibling, 1 reply; 167+ messages in thread
From: Jason Rumney @ 2009-07-10 11:55 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Stephen J. Turnbull, rms, Reiner.Steib, emacs-devel

Eli Zaretskii wrote:
> Anything more complex than that is really going to resemble existing
> code in mml and elsewhere, and is not worth another from-scratch
> effort, IMO.
>   

Even the simple case involves a lot of code in the background to encode 
and provide the correct headers, so it is not worth another from-scratch 
effort. My suggestion was intended to be about putting a simple 
interface in front of mml, since the main objection to using that for 
mail-mode seems to be that the interface is too complex, and if we can 
overcome that, we can avoid adding yet another mime library into Emacs.

The other things to address are hiding the mml code it inserts (I'd 
suggest a file icon image for graphical displays, or buttonized 
[Attached File] for text mode, but RMS has expressed a preference for 
seeing the actual base64 or quoted-printable content that would be sent, 
so another option is to immediately call the function that transforms 
mml to actual mime instead of calling it in the send hook).






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

* Re: Sending attachments
  2009-07-10 11:01                                       ` Eli Zaretskii
  2009-07-10 11:55                                         ` Jason Rumney
@ 2009-07-10 12:42                                         ` Stephen J. Turnbull
  1 sibling, 0 replies; 167+ messages in thread
From: Stephen J. Turnbull @ 2009-07-10 12:42 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: rms, Reiner.Steib, emacs-devel

Eli Zaretskii writes:
 > > From: "Stephen J. Turnbull" <stephen@xemacs.org>
 > > Date: Fri, 10 Jul 2009 18:02:28 +0900
 > > Cc: Reiner Steib <Reiner.Steib@gmx.de>, emacs-devel@gnu.org
 > > 
 > > Thing is, that complexity is going to pop up at every turn as you
 > > develop these features.
 > 
 > True.  Which is why I thought the intent was to create something
 > exceedingly simple, e.g.:

That simplicity drove me nuts as a Mule maintainer, because it didn't
try to defend against users who went beyond the parameters sendmail.el
was ready to deal with.  Eg, I would tell somebody to send a bug
report using M-x report-xemacs-bug.  That uses sendmail.el because
Gnus and VM are both in the package distribution of XEmacs.  They'd
put non-ASCII in the header because it was a phrase they were having
problems getting Mule to handle correctly, Mule would encode it to
(raw, not RFC 2047) KOI8 or something, and it would take down the bug
list because (at that time) Mailman assumed ASCII in the headers of
mail coming off the wire, and threw an exception if it didn't get it.
(Now we just get mojibake, but we've fixed our bug reporter to say "if
possible we would really appreciate if you would kill this buffer,
customize `mail-composition-agent' and start your report over" because
really people do want to attach files, sometimes with non-ASCII names,
with their reports.)

OK, so now you fix mail-mode to deal with this.  You have two options:
error on non-ASCII in the headers, or RFC 2047 encode.  This is
non-trivial if you want to be RFC conformant, because you SHOULD use
quoted printable encoding for languages like French that use ASCII
supersets, and SHOULD use BASE64 for languages like Hebrew that don't.
(In practice this is usually done by looking at the fraction of ASCII
characters, rather than by determining the language.)  See RFC 2119
for the official definitions of requirement levels of capitalized
terms like SHOULD and MUST; IMHO a SHOULD is pretty strong.

Good, good, we're making progress (at the expense of a couple hundred
lines of code unless you grab rfc2047.el from Gnus -- which is what
Ken'ichi's 10-line .emacs hook does), whose usage assume several other
libraries in the usual Gnus-y way, and is 35KB or so by itself).

OK, so now we add an attachment feature.  No problem, right?  We
already handle RFC 2047, so our headers are OK, right?  Wrong.  RFC
2047 *specifically* forbids use of the encoding it defines to specify
file names in MIME headers.  This is a MUST NOT; a failure to conform
means you have a non-conformant MUA.  This is a boolean standard, your
MUA flunks, it's not "a little bit non-conformant".

OK. so now we have a choice.  You can error on an attempt to use a
non-ASCII filename, or you can implement RFC 2231.  More complexity,
rfc2231.el is 10KB.  Or you could munge the file name in some way and
instruct the recipient to change it back, or ask the sender to change
it.

Sure, you could stop short of a full implementation of all the RFCs
related to these "minimal features" you want, but where?  Figuring out
what to to include and what not to include, and introducing code to
check for and refuse unsupported requests from the user is
non-trivial, itself, and IMO should be based on an even better
knowledge of the RFCs than simply implementing the whole RFC.

You could say, oh, we don't have to do that.  And you're right ... but
IMO a non-RFC-conforming product really isn't something you want to
distribute as part of Emacs.

Is it really worth dealing with all this when as far as Miles and I
can tell, the sendmail.el UI (including hooks and keyboard macros) is
a 100% compatible subset of the Message mode UI?  Wouldn't it be a
better idea for one of the few serious Mail mode users to just try
Message mode for a few days, and fix any problems that show up?
Reading the RFCs is not easy.

Richard's point about complexity and modularity is a good one, of
course, but Message mode isn't that complex and is reasonably
well-factored.  The complexity comes in on the reader side of Gnus,
and I admit that's an impenetrable thicket of code.  But then, it's
much much easier to write something that just produces conformant
messages in RFC 822 format than it is to have a multibackend reader
that not only deals with netnews and a host of mail formats, but also
the hideous stuff that is produced by Microsoft and Yahoo! mailers,
not to mention spammers.





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

* Re: Sending attachments
  2009-07-08  0:16                   ` Richard Stallman
@ 2009-07-10 13:29                     ` Chong Yidong
  2009-07-11 19:02                     ` Stefan Monnier
  1 sibling, 0 replies; 167+ messages in thread
From: Chong Yidong @ 2009-07-10 13:29 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel, miles

Richard Stallman <rms@gnu.org> writes:

>     > message.el forces the loading of many other packages (I sent the list
>     > before).  So its effective complexity includes all of them.  It is
>     > tied in with Gnus, and can't be maintained on its own.
>
>     Message mode is actively maintained by the Gnus maintainers, so this
>     point is irrelevant.
>
> It is not a good thing that message mode can only be maintained by the
> Gnus maintainers.

Proper maintenance requires a familiarity with the relevant RFCs; the
Gnus maintainers have this expertise, and we should leverage this to the
greatest extent possible.

Thus, even if we keep mail-mode, due to vested interests, I am opposed
to adding a "simple" (and possibly standards-noncompliant) mime library.
We should instead make use of mml.el, because the Gnus maintainers have
already expended effort making it standards-compliant.




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

* Re: message-mode / mail-mode
  2009-07-06  6:45             ` Reiner Steib
@ 2009-07-11 10:04               ` Stefan Monnier
  0 siblings, 0 replies; 167+ messages in thread
From: Stefan Monnier @ 2009-07-11 10:04 UTC (permalink / raw)
  To: ding; +Cc: emacs-devel

>>>> Context-sensitive commands are good but in message-mode they seem to
>>>> require that the "--text follows this line--" separator line exists.
> [...]
>>> You should set the variable `mail-header-separator' to ""; message-mode
>>> also pays attention to this variable.
>> Still, message-mode needs to be fixed so this is not necessary.
> Please elaborate.

message-mode should accept both the empty line and "--text follows this
line--" as a header-terminator.


        Stefan




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

* Re: Sending attachments
  2009-07-06  3:12       ` Eli Zaretskii
@ 2009-07-11 15:38         ` Stefan Monnier
  0 siblings, 0 replies; 167+ messages in thread
From: Stefan Monnier @ 2009-07-11 15:38 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: ams, rms, emacs-devel

>> As far as I'm concerned, mail-mode should be moved to the
>> `obsolete' directory.
> I hope that's a joke.

It's most definitely not.  AFAIK, message-mode is a proper superset of
mail-mode, so mail-mode is a prime candidate for obsolescence.

> Especially since there's no mail-mode.el to move.

I see you've figured out why I said mail-mode and not mail-mode.el.


        Stefan




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

* Re: Sending attachments
  2009-07-06 15:04       ` Richard Stallman
@ 2009-07-11 15:40         ` Stefan Monnier
  2009-07-12 10:11           ` Richard Stallman
  0 siblings, 1 reply; 167+ messages in thread
From: Stefan Monnier @ 2009-07-11 15:40 UTC (permalink / raw)
  To: rms; +Cc: ams, emacs-devel

>     As far as I'm concerned, mail-mode should be moved to the
>     `obsolete' directory.
> Please don't do that!

Why not?  More specifically, what do you think would break if we did
something along the lines of:

   (define-obsolete-function-alias 'mail-mode 'message-mode)


-- Stefan




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

* Re: Sending attachments
  2009-07-08  0:16                                   ` Richard Stallman
@ 2009-07-11 15:45                                     ` Stefan Monnier
  0 siblings, 0 replies; 167+ messages in thread
From: Stefan Monnier @ 2009-07-11 15:45 UTC (permalink / raw)
  To: rms; +Cc: miles, eliz, emacs-devel, ding, Kenichi Handa

> I can adapt and install Handa's code.  Before I do,
> does anyone see a problem with the change he proposes?

Feel free to install it.  Note that it brings mail-mode closer to
message-mode, relying on the same MIME code, so I'm very favorable
to it.  I'd go even further and implement all the remaining missing
features.  It can be done with even less code (just a defalias).


        Stefan




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

* Re: Sending attachments
  2009-07-10  9:02                                     ` Stephen J. Turnbull
  2009-07-10 11:01                                       ` Eli Zaretskii
@ 2009-07-11 18:29                                       ` Richard Stallman
  1 sibling, 0 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-11 18:29 UTC (permalink / raw)
  To: Stephen J. Turnbull; +Cc: Reiner.Steib, emacs-devel

     > In theory, that kind of recommendation might be useful.
     > But in practice, since the readers decide heuristically

    True, but shouldn't we focus on users of smarter readers, and on our
    own use cases?

The readers that decide heuristically are the smarter readers, at
least in my opinion.  I would not want to use one that always obeys
the specified disposition.

    That may be true in many users' practice.  However, I find myself
    offering a recommendation about 10-20% of the time, because I disagree
    with the default.

I am not opposed to having a more complex interface like the current one
of mml-attach-file.  I just want a simpler one to be the usual one.
Using C-u to make it ask the other questions seems fine.




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

* Re: Sending attachments
  2009-07-10 11:55                                         ` Jason Rumney
@ 2009-07-11 18:30                                           ` Richard Stallman
  0 siblings, 0 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-11 18:30 UTC (permalink / raw)
  To: Jason Rumney; +Cc: eliz, stephen, Reiner.Steib, emacs-devel

    The other things to address are hiding the mml code it inserts (I'd 
    suggest a file icon image for graphical displays, or buttonized 
    [Attached File] for text mode, but RMS has expressed a preference for 
    seeing the actual base64 or quoted-printable content that would be sent, 
    so another option is to immediately call the function that transforms 
    mml to actual mime instead of calling it in the send hook).

I think it would be clearer that way, but I don't think it's important
enough to make a big deal about.

This can be done with a simple extension to mml.
mml-attach-file could optionally convert to mime when it finishes.

mml-attach-file could also detect that the message has already been
converted to mime, in which case it could unconvert using mime-to-mml
before attaching the file.

This, together with the suggestion to ask all the questions only with
C-u, would make it do what I have in mind.





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

* Re: Sending attachments
  2009-07-07 19:14                       ` Eli Zaretskii
@ 2009-07-11 18:50                         ` Stefan Monnier
  2009-07-11 20:25                           ` Eli Zaretskii
  0 siblings, 1 reply; 167+ messages in thread
From: Stefan Monnier @ 2009-07-11 18:50 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: cyd, emacs-devel, rms, Miles Bader

> My gray hair says there ain't no such thing.  If it's more powerful
> and sophisticated, there's some price to pay.

So your argument is hypothetical, rather than based on concrete
problems.  To me that counts as "one vote to make mail-mode obsolete".


        Stefan




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

* Re: Sending attachments
  2009-07-08  0:16                   ` Richard Stallman
  2009-07-10 13:29                     ` Chong Yidong
@ 2009-07-11 19:02                     ` Stefan Monnier
  1 sibling, 0 replies; 167+ messages in thread
From: Stefan Monnier @ 2009-07-11 19:02 UTC (permalink / raw)
  To: rms; +Cc: Chong Yidong, miles, emacs-devel

>> message.el forces the loading of many other packages (I sent the list
>> before).  So its effective complexity includes all of them.  It is
>> tied in with Gnus, and can't be maintained on its own.

Then the conclusion should be that we should work with the Gnus
maintainers to improve the modularity of the code relevant to
message-mode.  AFAIK they are in favor of such an effort (the intention
of message-mode has always been to supercede mail-mode and stay
independent from Gnus, IIUC, which is why it has its own manual).

As a matter of fact I think message-mode is already fairly well
modularized, when you consider the fact that it's developed by people
who have no real need to care about other MUAs than Gnus.

>     Message mode is actively maintained by the Gnus maintainers, so this
>     point is irrelevant.
> It is not a good thing that message mode can only be maintained by the
> Gnus maintainers.

FWIW, I'm not a Gnus maintainer, but I have made changes to message-mode
and to the MIME code of Gnus, so I don't think it's fair to say that it
can only be maintained by the Gnus maintainers.


        Stefan




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

* Re: Sending attachments
  2009-07-06 15:05                       ` Richard Stallman
@ 2009-07-11 19:08                         ` Stefan Monnier
  2009-07-11 19:41                           ` Alfred M. Szmidt
  0 siblings, 1 reply; 167+ messages in thread
From: Stefan Monnier @ 2009-07-11 19:08 UTC (permalink / raw)
  To: rms; +Cc: ding, emacs-devel, yamaoka, eliz, yandros, Miles Bader

> The real issue that I raised is sending attachments with Mail mode.

Actually, not really.  I think "the real issue" if sending attachments
(and non-ASCII text, including in headers) in "the default
mail-composition interface".  *Very* few users actually choose
mail-mode.

> Installing Etach will deal with that.  This actually does not involve
> a change in sendmail.el, since Etach is modular.

A simpler change is to make message-mode the default UI.
This thread seems to show that noone knows of any actual difference that
users would notice (other than being able to attach files and stuff, of
course).

So I think the first step should be to change mail-user-agent to
default to message-user-agent.
The next step will then be to make Rmail use message-mode as well
(which may require some changes to message-mode, of course).


        Stefan




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

* Re: Sending attachments
  2009-07-11 19:08                         ` Stefan Monnier
@ 2009-07-11 19:41                           ` Alfred M. Szmidt
  2009-07-12  3:05                             ` Leo
  2009-07-13 12:11                             ` Stefan Monnier
  0 siblings, 2 replies; 167+ messages in thread
From: Alfred M. Szmidt @ 2009-07-11 19:41 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: rms, ding, emacs-devel, yamaoka, eliz, yandros, miles

   So I think the first step should be to change mail-user-agent to
   default to message-user-agent.  The next step will then be to make
   Rmail use message-mode as well (which may require some changes to
   message-mode, of course).

PLEASE DO NOT DO THIS!  People using mail-mode have already expressed
that they prefer it over message-mode, please respect that!




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

* Re: Sending attachments
  2009-07-11 18:50                         ` Stefan Monnier
@ 2009-07-11 20:25                           ` Eli Zaretskii
  0 siblings, 0 replies; 167+ messages in thread
From: Eli Zaretskii @ 2009-07-11 20:25 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: Miles Bader <miles@gnu.org>,  cyd@stupidchicken.com,  rms@gnu.org,  emacs-devel@gnu.org
> Date: Sat, 11 Jul 2009 14:50:59 -0400
> 
> > My gray hair says there ain't no such thing.  If it's more powerful
> > and sophisticated, there's some price to pay.
> 
> So your argument is hypothetical, rather than based on concrete
> problems.

Not hypothetical, based on experience.

> To me that counts as "one vote to make mail-mode obsolete".

Yes, I used to hold such naive ideas as well: that an argument isn't
valid unless it is based on provable facts.  I'm much better now,
thank you.




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

* Re: Sending attachments
  2009-07-11 19:41                           ` Alfred M. Szmidt
@ 2009-07-12  3:05                             ` Leo
  2009-07-12  3:10                               ` Lennart Borgman
  2009-07-13 12:11                             ` Stefan Monnier
  1 sibling, 1 reply; 167+ messages in thread
From: Leo @ 2009-07-12  3:05 UTC (permalink / raw)
  To: emacs-devel; +Cc: ding

On 2009-07-11 20:41 +0100, Alfred M. Szmidt wrote:
>    So I think the first step should be to change mail-user-agent to
>    default to message-user-agent.  The next step will then be to make
>    Rmail use message-mode as well (which may require some changes to
>    message-mode, of course).
>
> PLEASE DO NOT DO THIS!  People using mail-mode have already expressed
> that they prefer it over message-mode, please respect that!

Don't worry.
We can put it in emacswiki so that it will be available for good.

-- 
Leo's Emacs uptime: 31 days, 13 hours, 21 minutes, 13 seconds





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

* Re: Sending attachments
  2009-07-12  3:05                             ` Leo
@ 2009-07-12  3:10                               ` Lennart Borgman
  0 siblings, 0 replies; 167+ messages in thread
From: Lennart Borgman @ 2009-07-12  3:10 UTC (permalink / raw)
  To: Leo; +Cc: ding, emacs-devel

On Sun, Jul 12, 2009 at 5:05 AM, Leo<sdl.web@gmail.com> wrote:
> On 2009-07-11 20:41 +0100, Alfred M. Szmidt wrote:
>>    So I think the first step should be to change mail-user-agent to
>>    default to message-user-agent.  The next step will then be to make
>>    Rmail use message-mode as well (which may require some changes to
>>    message-mode, of course).
>>
>> PLEASE DO NOT DO THIS!  People using mail-mode have already expressed
>> that they prefer it over message-mode, please respect that!
>
> Don't worry.
> We can put it in emacswiki so that it will be available for good.

I think you are misunderstanding. The code will still be distributed
with Emacs but will not be used by default.

If you think something is missing in message-mode then please consider
contributing code for what you miss.




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

* Re: Sending attachments
  2009-07-11 15:40         ` Stefan Monnier
@ 2009-07-12 10:11           ` Richard Stallman
  2009-07-13 12:14             ` Stefan Monnier
  0 siblings, 1 reply; 167+ messages in thread
From: Richard Stallman @ 2009-07-12 10:11 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: ams, emacs-devel

    Why not?  More specifically, what do you think would break if we did
    something along the lines of:

       (define-obsolete-function-alias 'mail-mode 'message-mode)

I may need to maintain Emacs again; past history shows other
maintainers come and go.  If that happens, I want to have Mail mode,
not depend on something that is part of Gnus.

Please don't mess this up.


I am considering moving some code (including mml) outside Gnus so that
Gnus will not be an issue for its future maintenance.  (I've done that
to other packages before.)




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

* Re: Sending attachments
  2009-07-11 19:41                           ` Alfred M. Szmidt
  2009-07-12  3:05                             ` Leo
@ 2009-07-13 12:11                             ` Stefan Monnier
  2009-07-15  9:35                               ` Alfred M. Szmidt
  1 sibling, 1 reply; 167+ messages in thread
From: Stefan Monnier @ 2009-07-13 12:11 UTC (permalink / raw)
  To: ams; +Cc: rms, ding, emacs-devel, yamaoka, eliz, yandros, miles

>    So I think the first step should be to change mail-user-agent to
>    default to message-user-agent.  The next step will then be to make
>    Rmail use message-mode as well (which may require some changes to
>    message-mode, of course).

> PLEASE DO NOT DO THIS!  People using mail-mode have already expressed
> that they prefer it over message-mode,

Most of the people who use mail-mode have not expressed any opinion.
The vast majority of them have no idea they're using mail-mode and that
they have a choice to use something else.

> please respect that!

The very few users who have expressed a preference for mail-mode have
not given any concrete argument for why.  Some developers/maintainers of
mail-mode have expressed their preference for it, indeed, but that's
a different issue.


        Stefan


PS: And to reply to Lennart, when I say "obsolete" that means I have the
intention to get rid of the corresponding code as well, tho as we know
such things take time, and even more so in cases like this one where the
maintainers are emotionally atached to their code and happen to be some
of the most important Emacs developers.




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

* Re: Sending attachments
  2009-07-12 10:11           ` Richard Stallman
@ 2009-07-13 12:14             ` Stefan Monnier
  2009-07-14 10:44               ` Richard Stallman
  0 siblings, 1 reply; 167+ messages in thread
From: Stefan Monnier @ 2009-07-13 12:14 UTC (permalink / raw)
  To: rms; +Cc: ams, emacs-devel

>     Why not?  More specifically, what do you think would break if we did
>     something along the lines of:
>        (define-obsolete-function-alias 'mail-mode 'message-mode)
> I may need to maintain Emacs again; past history shows other
> maintainers come and go.  If that happens, I want to have Mail mode,
> not depend on something that is part of Gnus.

Please explain why you consider "part of Gnus" to be a negative attribute.

> I am considering moving some code (including mml) outside Gnus so that
> Gnus will not be an issue for its future maintenance.  (I've done that
> to other packages before.)

As I said, making message-mode (and related libraries) more generic
is good.  I fully support it, and I think the Gnus maintainers would
not oppose it either.


        Stefan




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

* Re: Sending attachments
  2009-07-13 12:14             ` Stefan Monnier
@ 2009-07-14 10:44               ` Richard Stallman
  2009-07-14 13:10                 ` Leo
                                   ` (4 more replies)
  0 siblings, 5 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-14 10:44 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: ams, emacs-devel

    > I may need to maintain Emacs again; past history shows other
    > maintainers come and go.  If that happens, I want to have Mail mode,
    > not depend on something that is part of Gnus.

    Please explain why you consider "part of Gnus" to be a negative attribute.

There are two reasons.  First, its primary source is maintained
outside of Emacs.  Second, the people who work on it do not hesitate
to add dependencies between one part and another, with results that
one quickly sees on studying files from Gnus.

Another problem with Gnus maintenance is that, whenever they see the
need for some other feature, they add it to Gnus, without discussing
it with the Emacs maintainer, and without attempting to make the
package independent of Gnus.

Another problem is that a lot of the code is ugly and hard to
understand.  While this CAN happen to any code, I think the separate
maintenance of Gnus encourages it, since it discourages other people
than the Gnus developers from working on the code at all.

I decided to make rfc2047.el work outside Gnus.  Most of the
dependence on other Gnus files existed for no good reason at all.
However, a couple of functions in mm-util do real work that seems
important.  They are a specialized facility in the same file with lots
of low-level XEmacs compatibility functions used in Gnus.  Perhaps I
will just split that file.




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

* Re: Sending attachments
  2009-07-14 10:44               ` Richard Stallman
@ 2009-07-14 13:10                 ` Leo
  2009-07-14 13:52                 ` Stephen J. Turnbull
                                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 167+ messages in thread
From: Leo @ 2009-07-14 13:10 UTC (permalink / raw)
  To: emacs-devel

On 2009-07-14 11:44 +0100, Richard Stallman wrote:
> There are two reasons. First, its primary source is maintained outside
> of Emacs. Second, the people who work on it do not hesitate to add
> dependencies between one part and another, with results that one
> quickly sees on studying files from Gnus.
> 
> Another problem with Gnus maintenance is that, whenever they see the
> need for some other feature, they add it to Gnus, without discussing
> it with the Emacs maintainer, and without attempting to make the
> package independent of Gnus.
>
> Another problem is that a lot of the code is ugly and hard to
> understand. While this CAN happen to any code, I think the separate
> maintenance of Gnus encourages it, since it discourages other people
> than the Gnus developers from working on the code at all.
>
> I decided to make rfc2047.el work outside Gnus. Most of the dependence
> on other Gnus files existed for no good reason at all. However, a
> couple of functions in mm-util do real work that seems important. They
> are a specialized facility in the same file with lots of low-level
> XEmacs compatibility functions used in Gnus. Perhaps I will just split
> that file.

What Richard has said makes a lot of sense. There are different
standards on the quality of code that can be included in Emacs.
Unfortunately many think that 'it works' is the standard. Also many libs
stop developing because they have been included. We shouldn't be afraid
to recycle them if that's where they belong.

-- 
Leo's Emacs uptime: 33 days, 23 hours, 24 minutes, 49 seconds





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

* Re: Sending attachments
  2009-07-14 10:44               ` Richard Stallman
  2009-07-14 13:10                 ` Leo
@ 2009-07-14 13:52                 ` Stephen J. Turnbull
  2009-07-15 16:45                   ` Ted Zlatanov
  2009-07-16  1:10                   ` Richard Stallman
  2009-07-14 16:17                 ` Jonathan Rockway
                                   ` (2 subsequent siblings)
  4 siblings, 2 replies; 167+ messages in thread
From: Stephen J. Turnbull @ 2009-07-14 13:52 UTC (permalink / raw)
  To: rms; +Cc: ams, Stefan Monnier, emacs-devel

Richard Stallman writes:

 > There are two reasons.  First, its primary source is maintained
 > outside of Emacs.

I don't see how that's a reason not to use the perfectly good Message
mode that is a part of Emacs.  If you can't persuade them to go along
with your refactorings, you still will be starting from a much more
featureful MUA, one which is well-debugged and highly conformant.

 > Another problem is that a lot of the code is ugly and hard to
 > understand.  While this CAN happen to any code, I think the
 > separate maintenance of Gnus encourages it, since it discourages
 > other people than the Gnus developers from working on the code at
 > all.

That's certainly not my experience.  I'd say about half of the hackers
closest to me over the last 10 years have been at least occasional
contributors to Gnus.  And they've been really good citizens in
general even though their main interests are rather different from
"core" Emacs developers.

It seems to me that both Gnus and Emacs would benefit from you
pow-wowing with Miles Bader and anybody else who works on Gnus-Emacs
integration, and make the points about refactoring and maintainability
to them.  Ask them to represent your needs (ie, only the basic
features, more emphasis on refactoring and maintainability in Message
mode).  It's worth trying to avoid the duplication, for Message mode,
at least.





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

* Re: Sending attachments
  2009-07-14 10:44               ` Richard Stallman
  2009-07-14 13:10                 ` Leo
  2009-07-14 13:52                 ` Stephen J. Turnbull
@ 2009-07-14 16:17                 ` Jonathan Rockway
  2009-07-14 18:33                 ` Bastien
  2009-07-14 18:48                 ` Stefan Monnier
  4 siblings, 0 replies; 167+ messages in thread
From: Jonathan Rockway @ 2009-07-14 16:17 UTC (permalink / raw)
  To: emacs-devel

* On Tue, Jul 14 2009, Richard Stallman wrote:

> Another problem with Gnus maintenance is that, whenever they see the
> need for some other feature, they add it to Gnus, without discussing
> it with the Emacs maintainer, and without attempting to make the
> package independent of Gnus.

I think they want something that works first.  Once the code works, it
can be refactored to be generic.

Some people don't want to discuss every minute detail of the code before
they implement it.  The bike shed can be painted after it's built.

(Look at how long this thread is.  Did all this discussion actually
accomplish anything, or was it mostly a waste of time?)

Anyway, I think the solution is to cleanup the Gnus code as needed
rather than completely rewrite it from scratch and call it something
else.  I can't speak for the Gnus developers, but I'm sure they would
appreciate the help.  The point of free software is that the users can
improve the code; so that it works better, or so that it can be used
somewhere else more generically.  Right?

Regards,
Jonathan Rockway

--
print just => another => perl => hacker => if $,=$"




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

* Re: Sending attachments
  2009-07-14 10:44               ` Richard Stallman
                                   ` (2 preceding siblings ...)
  2009-07-14 16:17                 ` Jonathan Rockway
@ 2009-07-14 18:33                 ` Bastien
  2009-07-14 18:48                 ` Stefan Monnier
  4 siblings, 0 replies; 167+ messages in thread
From: Bastien @ 2009-07-14 18:33 UTC (permalink / raw)
  To: rms; +Cc: ams, Stefan Monnier, emacs-devel

Richard Stallman <rms@gnu.org> writes:

> Another problem with Gnus maintenance is that, whenever they see the
> need for some other feature, they add it to Gnus, without discussing
> it with the Emacs maintainer, and without attempting to make the
> package independent of Gnus.
>
> Another problem is that a lot of the code is ugly and hard to
> understand.  While this CAN happen to any code, I think the separate
> maintenance of Gnus encourages it, since it discourages other people
> than the Gnus developers from working on the code at all.

Would Gnus maintainers strongly resist to the idea of maintaining Gnus
within Emacs?  

-- 
 Bastien




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

* Re: Sending attachments
  2009-07-14 10:44               ` Richard Stallman
                                   ` (3 preceding siblings ...)
  2009-07-14 18:33                 ` Bastien
@ 2009-07-14 18:48                 ` Stefan Monnier
  2009-07-16  1:11                   ` Richard Stallman
  2009-07-16  1:12                   ` Richard Stallman
  4 siblings, 2 replies; 167+ messages in thread
From: Stefan Monnier @ 2009-07-14 18:48 UTC (permalink / raw)
  To: rms; +Cc: ams, emacs-devel

>> I may need to maintain Emacs again; past history shows other
>> maintainers come and go.  If that happens, I want to have Mail mode,
>> not depend on something that is part of Gnus.

>     Please explain why you consider "part of Gnus" to be
>     a negative attribute.

> There are two reasons.  First, its primary source is maintained
> outside of Emacs.  Second, the people who work on it do not hesitate
> to add dependencies between one part and another, with results that
> one quickly sees on studying files from Gnus.

I'm sure they'll appreciate help in reducing dependencies between modules.

> Another problem with Gnus maintenance is that, whenever they see the
> need for some other feature, they add it to Gnus, without discussing
> it with the Emacs maintainer, and without attempting to make the
> package independent of Gnus.

Actually, they originally did make a specific effort to make
message-mode independent from Gnus so that it can replace mail-mode.
And then mail-mode stayed and so message-mode evolved under the pressure
of nothing else than Gnus.

> Another problem is that a lot of the code is ugly and hard to
> understand.  While this CAN happen to any code, I think the separate
> maintenance of Gnus encourages it, since it discourages other people
> than the Gnus developers from working on the code at all.

I don't know about you, but I'm a lot more afraid of CC-mode's code than
of Gnus's.  If you agree with that and following your reasoning, we
should have kept the old c-mode.el.


        Stefan




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

* Re: Sending attachments
  2009-07-13 12:11                             ` Stefan Monnier
@ 2009-07-15  9:35                               ` Alfred M. Szmidt
  2009-07-15 11:44                                 ` Richard Riley
  2009-07-15 14:22                                 ` Stefan Monnier
  0 siblings, 2 replies; 167+ messages in thread
From: Alfred M. Szmidt @ 2009-07-15  9:35 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: rms, ding, emacs-devel, yamaoka, eliz, yandros, miles

Nobody (atleast I do not) has no issues with setting mail-user-agent
to message-user-agent; since that allows people who prefer mail-mode
to continue to use it.  And can be easily reverted at a later date.

But your insistance to remove a perfectly usable mode that people
actually prefer, and wish to continue to use _and_ maintain, is not
productive.


There are far more important things to work on in Emacs.  Org mode has
many modes that already exist in Emacs which are not very popular.  I
am in particular thinking of table-mode and footnote-mode, which are
very useful modes, but Org mode has similar modes that are better.



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

* Re: Sending attachments
  2009-07-15  9:35                               ` Alfred M. Szmidt
@ 2009-07-15 11:44                                 ` Richard Riley
  2009-07-15 14:22                                 ` Stefan Monnier
  1 sibling, 0 replies; 167+ messages in thread
From: Richard Riley @ 2009-07-15 11:44 UTC (permalink / raw)
  To: ams; +Cc: Stefan Monnier, rms, ding, emacs-devel, yamaoka, eliz, yandros,
	miles

"Alfred M. Szmidt" <ams@gnu.org> writes:

> Nobody (atleast I do not) has no issues with setting mail-user-agent
> to message-user-agent; since that allows people who prefer mail-mode
> to continue to use it.  And can be easily reverted at a later date.
>
> But your insistance to remove a perfectly usable mode that people
> actually prefer, and wish to continue to use _and_ maintain, is not
> productive.

As an observer this argument you keep putting up is very weak.

Not one person has offered a reason why they can not use the subset of
message-mode which encompasses mail-mode.

It appears, from the outside, simply ludicrous to maintain TWO suites of
SW one of which is a *poorer* and less meticulous subset of the other
purely because, well,  - actually there have been zero usability reasons
put forwards - only "because I said so" foot stomping reasons.




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

* Re: Sending attachments
  2009-07-15  9:35                               ` Alfred M. Szmidt
  2009-07-15 11:44                                 ` Richard Riley
@ 2009-07-15 14:22                                 ` Stefan Monnier
  1 sibling, 0 replies; 167+ messages in thread
From: Stefan Monnier @ 2009-07-15 14:22 UTC (permalink / raw)
  To: ams; +Cc: rms, ding, emacs-devel, yamaoka, eliz, yandros, miles

> Nobody (atleast I do not) has no issues with setting mail-user-agent
> to message-user-agent;

Which is wy I did it.

> But your insistance to remove a perfectly usable mode that people
> actually prefer, and wish to continue to use _and_ maintain, is not
> productive.

Where did I insist to remove it?  It's still there, isn't it?
I do indeed want to obsolete it.  I also want to make strings and
defconst immutable, and let be lexically scoped, and ...
Some of those will hopefully happen within my lifetime, others not.

Obsoleting mail-mode actually requires some amount of technical work,
and I have better things to do, so don't expect it to happen any time
soon, especially since it would require an enormous amount of
social-work along side.

But I do oppose very strongly the addition of etach: if someone wants to
add MIME features to mail-mode, it should be by bringing mail-mode and
message-mode closer to each other.


        Stefan



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

* Re: Sending attachments
  2009-07-14 13:52                 ` Stephen J. Turnbull
@ 2009-07-15 16:45                   ` Ted Zlatanov
  2009-07-15 18:18                     ` Frank Schmitt
                                       ` (2 more replies)
  2009-07-16  1:10                   ` Richard Stallman
  1 sibling, 3 replies; 167+ messages in thread
From: Ted Zlatanov @ 2009-07-15 16:45 UTC (permalink / raw)
  To: emacs-devel

On Tue, 14 Jul 2009 11:17:33 -0500 Jonathan Rockway <jon@jrock.us> wrote: 

JR> * On Tue, Jul 14 2009, Richard Stallman wrote:

>> Another problem with Gnus maintenance is that, whenever they see the
>> need for some other feature, they add it to Gnus, without discussing
>> it with the Emacs maintainer, and without attempting to make the
>> package independent of Gnus.

JR> Anyway, I think the solution is to cleanup the Gnus code as needed
JR> rather than completely rewrite it from scratch and call it something
JR> else.  I can't speak for the Gnus developers, but I'm sure they would
JR> appreciate the help.  The point of free software is that the users can
JR> improve the code; so that it works better, or so that it can be used
JR> somewhere else more generically.  Right?

(speaking as a Gnus and Emacs contributor)

Right.  I have not seen anything concrete about what needs to be fixed,
refactored, etc. in Gnus.  There aren't many developers actively
contributing to Gnus, either, so making major changes will take a long
time and needs to be well-justified.  Gnus welcomes new developers with
open hooves...er...arms, but the code complexity is probably
intimidating to most.

Pulling code out of Gnus has the downside that it then needs to be
inside Emacs, but XEmacs may not have it.  XEmacs compatibility has (as
long as I can remember) been a Gnus goal.  How should Gnus and Emacs
deal with this?  I hope "drop XEmacs support" is not an option.

Ted





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

* Re: Sending attachments
  2009-07-15 16:45                   ` Ted Zlatanov
@ 2009-07-15 18:18                     ` Frank Schmitt
  2009-07-16  4:42                       ` Stephen J. Turnbull
  2009-07-15 18:27                     ` Stefan Monnier
  2009-07-16 16:17                     ` Richard Stallman
  2 siblings, 1 reply; 167+ messages in thread
From: Frank Schmitt @ 2009-07-15 18:18 UTC (permalink / raw)
  To: emacs-devel

Ted Zlatanov <tzz@lifelogs.com> writes:

> Pulling code out of Gnus has the downside that it then needs to be
> inside Emacs, but XEmacs may not have it.  XEmacs compatibility has (as
> long as I can remember) been a Gnus goal.  How should Gnus and Emacs
> deal with this?  I hope "drop XEmacs support" is not an option.

Is XEmacs compatibility really worth the trouble? How many XEmacs users
are still out there?

-- 
Have you ever considered how much text can fit in eighty columns?  Given that a
signature typically contains up to four lines of text, this space allows you to
attach a tremendous amount of valuable information to your messages.  Seize the
opportunity and don't waste your signature on bullshit that nobody cares about.





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

* Re: Sending attachments
  2009-07-15 16:45                   ` Ted Zlatanov
  2009-07-15 18:18                     ` Frank Schmitt
@ 2009-07-15 18:27                     ` Stefan Monnier
  2009-07-16 16:17                     ` Richard Stallman
  2 siblings, 0 replies; 167+ messages in thread
From: Stefan Monnier @ 2009-07-15 18:27 UTC (permalink / raw)
  To: Ted Zlatanov; +Cc: emacs-devel

> Pulling code out of Gnus has the downside that it then needs to be
> inside Emacs, but XEmacs may not have it.

Don't worry about this part: the changes (supposedly) needed don't
intend to remove any code, just better modularize it (e.g. so that
message-mode can be self-standing without importing (transitively)
gnus-*.el packages).


        Stefan




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

* Reducing Gnus dependencies in message.el (was: Sending attachments)
  2009-07-03 22:52           ` Richard Stallman
  2009-07-04 15:11             ` Teemu Likonen
  2009-07-05 14:47             ` Chong Yidong
@ 2009-07-15 21:51             ` Reiner Steib
  2 siblings, 0 replies; 167+ messages in thread
From: Reiner Steib @ 2009-07-15 21:51 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel, ding

On Sat, Jul 04 2009, Richard Stallman wrote:

>     > I object strenuously to the idea of replacing the very simple Mail
>     > mode with something complex from Gnus.
>
>     It's a question of necessary complexity.
>
> I don't think so.  Look at all the libraries message.el loads.
>
>
>     (require 'hashcash)
>     (require 'canlock)

We can eliminate these by using autoloads.  canlock is used for news
postings in Gnus by default.  Hashcash is an optional feature for
mail.

>     (require 'mailheader)

[mailheader.el is not part of Gnus, but part of Emacs.]  Required to
insert correctly formated (quoting, folding, ...) headers into mail
message buffers.

;;; mailheader.el --- mail header parsing, merging, formatting
[...]
;;; Commentary:

;; This package provides an abstraction to RFC822-style messages, used in
;; mail, news, and some other systems.  The simple syntactic rules for such
;; headers, such as quoting and line folding, are routinely reimplemented
;; in many individual packages.  This package removes the need for this
;; redundancy [...]

>     (require 'gmm-utils)

;;; gmm-utils.el --- Utility functions for Gnus, Message and MML

... is an attempt to reduce Gnus dependencies from Message and MML
files.

>     (require 'nnheader)
>
>       That loads
> 	(require 'mail-utils)

[mailutils.el is not part of Gnus, but part of Emacs].  It provides
utility functions for mail handling.  Both, rmail.el and sendmail.el
use it.  I see no point in avoiding using it.

;;; mail-utils.el --- utility functions used both by rmail and rnews
[...]
;; Utility functions for mail and netnews handling.  These handle fine
;; points of header parsing.

> 	(require 'mm-util)

;;; mm-util.el --- Utility functions for Mule and low level things
... needed for MIME.

> 	(require 'gnus-util)

I will try to eliminate this dependency.

>     ;; This is apparently necessary even though things are autoloaded.
>     ;; Because we dynamically bind mail-abbrev-mode-regexp, we'd better
>     ;; require mailabbrev here.
>     (if (featurep 'xemacs)
> 	(require 'mail-abbrevs)
>       (require 'mailabbrev))

Handling expansions of mail aliases.

>     (require 'mail-parse)

For parsing and encoding headers and body correctly.

>     (require 'mml)

Required for MIME handling (e.g. sending attachments).

>     (require 'rfc822)

[rfc822.el is not part of Gnus, but part of Emacs.]  Uses to ensure that
address headers are RFC822-compliant.  Is also used in rmail.el.

>     (require 'ecomplete)

We can eliminate these by using autoloads.  ecomplete is optional.

> I don't want to replace the simple sendmail.el with this tremendous
> pile of complexity.
>
> message.el is also 8000 lines long, where sendmail.el is under 2000
> lines.  I expect that sending attachments won't require more than 200
> lines.

Doing all aspects of MIME mostly correct is not quite simple.  Many
MUAs (Mail User Agent) have severe bugs WRT this.  When reading about
non-trivial topics in the relevant newsgroups, most of the time only
mutt and Gnus do the right thing.

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/



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

* Re: Sending attachments
  2009-07-14 13:52                 ` Stephen J. Turnbull
  2009-07-15 16:45                   ` Ted Zlatanov
@ 2009-07-16  1:10                   ` Richard Stallman
  2009-07-16  5:30                     ` Stephen J. Turnbull
  2009-07-16 14:45                     ` Ted Zlatanov
  1 sibling, 2 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-16  1:10 UTC (permalink / raw)
  To: Stephen J. Turnbull; +Cc: ams, monnier, emacs-devel

     > There are two reasons.  First, its primary source is maintained
     > outside of Emacs.

    I don't see how that's a reason not to use the perfectly good Message
    mode that is a part of Emacs.

Someone asked me why I see this as a problem, and I explained why.
You may not see it as a problem, but the point is that I do.

    It seems to me that both Gnus and Emacs would benefit from you
    pow-wowing with Miles Bader and anybody else who works on Gnus-Emacs
    integration, and make the points about refactoring and maintainability
    to them.

I would like to see progress in this direction, and I am willing to do
a certain amount of work to help it.  However, at present I have
nothing to specific suggest, because I know very little about the code
of Gnus.  Its complexity has discouraged me from looking at it except
in cases of need.

On a few occasions I have looked at part of Gnus.  Each time what I
encountered was daunting complexity, each part interacting with many
other parts.  I tried my best to reduce the amount of code I had to
look at.

I don't know how many other parts of Gnus are comparable to rfc2047.el
in that they are useful general facilities and ought to be made
separate and modular.  If Gnus developers are interested in doing work
to make these files modular, I'm interested in looking for candidates.




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

* Re: Sending attachments
  2009-07-14 18:48                 ` Stefan Monnier
@ 2009-07-16  1:11                   ` Richard Stallman
  2009-07-16  1:12                   ` Richard Stallman
  1 sibling, 0 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-16  1:11 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: ams, emacs-devel

    I don't know about you, but I'm a lot more afraid of CC-mode's code than
    of Gnus's.  If you agree with that and following your reasoning, we
    should have kept the old c-mode.el.

CC mode stays in its own area of functionality -- it has no tendency
to spawn replacements for other parts of Emacs.  I am confident that,
if Alan thinks some new non-C-specific feature is needed for CC mode,
he will discuss the right way to develop it as a new module.

Thus, while its complexity is a problem (and will cause difficulty if
Alan disappears), it is a contained problem.




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

* Re: Sending attachments
  2009-07-14 18:48                 ` Stefan Monnier
  2009-07-16  1:11                   ` Richard Stallman
@ 2009-07-16  1:12                   ` Richard Stallman
  1 sibling, 0 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-16  1:12 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: ams, emacs-devel

    > There are two reasons.  First, its primary source is maintained
    > outside of Emacs.  Second, the people who work on it do not hesitate
    > to add dependencies between one part and another, with results that
    > one quickly sees on studying files from Gnus.

    I'm sure they'll appreciate help in reducing dependencies between modules.

I am sure they would, but that doesn't excuse creating all those
dependencies.

    Actually, they originally did make a specific effort to make
    message-mode independent from Gnus so that it can replace mail-mode.

Maybe they wanted it to replace Mail mode, but they didn't ask me if I
wanted to replace it.  They should have talked with me first, and then
I would have said, "Please extend Mail mode, and please talk with me
about what you want to do."




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

* Re: Sending attachments
  2009-07-15 18:18                     ` Frank Schmitt
@ 2009-07-16  4:42                       ` Stephen J. Turnbull
  2009-07-16  5:19                         ` Jason Rumney
  0 siblings, 1 reply; 167+ messages in thread
From: Stephen J. Turnbull @ 2009-07-16  4:42 UTC (permalink / raw)
  To: Frank Schmitt; +Cc: emacs-devel

Frank Schmitt writes:

 > Is XEmacs compatibility really worth the trouble? How many XEmacs users
 > are still out there?

First, XEmacs compatibility is not usually that great a burden.
Certainly, when you're trying to support bleeding edge features (viz.
preview-latex), you run into problems.  But mostly the work is already
done, and with a few exceptions where XEmacs led Emacs by 5 to 10
years in introducing an API and Emacs deliberately varied, we do
(eventually) sync by adding the feature with the Emacs-style APIs.

Second, there are still plenty of XEmacs and SXEmacs users to justify
*keeping* existing features.  Several GNU/Linux distros have tried to
drop XEmacs packages or deemphasize them in one way or another, and
gotten *strong* pushback from their users.  XEmacs also still has a
strong following in two large companies that I know of, I believe
because they consider it much easier to maintain local extensions to
XEmacs.  They don't even try with Emacs.  I have to think that there
are a lot of such users out there, who probably don't participate much
in free software channels, they just use it.

There's also the question of *contributors* vs. users.  XEmacs (and
even more so, SXEmacs) contributors have been quite loyal, due to the
large investment required to work on internals of any Emacsen.  So
making XEmacs less usable would quite likely result in a loss of
developers to the entire community rather than a flow of developers to
Emacs proper.

Anyway, the question is if merging Gnus code into Emacs would result
in a purge of XEmacs compatibility code.  Sometimes Richard uses
expressions that suggest that might happen, but AFAICT his opinion on
the matter is that he thinks mixing XEmacs compatibility code with
application implementation is unclean, and he advocates *separating*
them out.  Of course if XEmacs compatibility modules are not going to
be maintained, he prefers them to be dropped, and I'm sure he'd prefer
that the effort be devoted to Emacs proper -- but after all, that's
the contributor's choice.




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

* Re: Sending attachments
  2009-07-16  4:42                       ` Stephen J. Turnbull
@ 2009-07-16  5:19                         ` Jason Rumney
  2009-07-16 14:30                           ` Ted Zlatanov
  0 siblings, 1 reply; 167+ messages in thread
From: Jason Rumney @ 2009-07-16  5:19 UTC (permalink / raw)
  To: Stephen J. Turnbull; +Cc: Frank Schmitt, emacs-devel

Stephen J. Turnbull wrote:
> Anyway, the question is if merging Gnus code into Emacs would result
> in a purge of XEmacs compatibility code.
To clarify, the question is about merging SOME Gnus code into Emacs. I 
would see it working the same way as the code that has been merged from 
Gnus already, where the Gnus folk continue to offer their own packages 
for XEmacs and older versions of Emacs that include the files that were 
merged into Emacs plus any compatibility code that has been modularized 
and doesn't need to be in the Emacs repository.






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

* Re: Sending attachments
  2009-07-16  1:10                   ` Richard Stallman
@ 2009-07-16  5:30                     ` Stephen J. Turnbull
  2009-07-19  4:37                       ` Richard Stallman
  2009-07-16 14:45                     ` Ted Zlatanov
  1 sibling, 1 reply; 167+ messages in thread
From: Stephen J. Turnbull @ 2009-07-16  5:30 UTC (permalink / raw)
  To: rms; +Cc: ams, monnier, emacs-devel

Richard Stallman writes:

 > Someone asked me why I see this as a problem, and I explained why.
 > You may not see it as a problem, but the point is that I do.

Sure.  And my point is that I don't understand why you see it as a
problem.  I like to understand these things, and I'm at a loss to come
up with a sane rationalization.  So I feel very very stuck.  That
would be OK if it were just me, but I don't think I'm the only one who
feels that way.  In fact I think some of those who are feeling stuck
are important contributors to Emacs, and to free software.

 >     It seems to me that both Gnus and Emacs would benefit from you
 >     pow-wowing with Miles Bader and anybody else who works on Gnus-Emacs
 >     integration, and make the points about refactoring and maintainability
 >     to them.
 > 
 > I would like to see progress in this direction, and I am willing to do
 > a certain amount of work to help it.  However, at present I have
 > nothing to specific suggest, because I know very little about the code
 > of Gnus.

What you've posted about rfc2047.el already goes way beyond
"nothing". :-)

 > Its complexity has discouraged me from looking at it except in
 > cases of need.

Unfortunately, that complexity is mostly a reflection of the problem
domain.  It is *not* merely a reflection of the number of features of
Gnus; reducing the complexity of your requirements will not reduce the
complexity of a RFC conforming implementation proportionately.  For
example, you personally may have no need to send non-ASCII characters
in headers.  Nevertheless, the MUA you use must check for them,
because they might be present in an automatically generated header
(eg, a reply).  Of course you can simplify somewhat by refusing to
implement RFC 2047, and simply have `mail-send' signal an error,
leaving it to the user to clean up the header.  But the check itself
is complexity, and goes beyond what Mail mode has ever done.  And it
gets worse; RFC 2047 by itself is insufficient.  Even if you've
implemented RFC 2047, you need to check whether parameter values of
MIME headers contain non-ASCII, because RFC 2047 itself specifically
prohibits use of RFC 2047 encoded-words in parameters.  Now, you also
need RFC 2231.  Mail is rife with these corner cases.

This is not mere conformance for the sake of conformance.  To give one
example, Mailman for many years had a bug where a non-ASCII character
in a header could cause a whole installation and all of its lists to
become unusable until a sysadmin shunts the offending message out of
the queue.

 > If Gnus developers are interested in doing work to make these files
 > modular, I'm interested in looking for candidates.

Thank you!





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

* Re: Sending attachments
  2009-07-16  5:19                         ` Jason Rumney
@ 2009-07-16 14:30                           ` Ted Zlatanov
  0 siblings, 0 replies; 167+ messages in thread
From: Ted Zlatanov @ 2009-07-16 14:30 UTC (permalink / raw)
  To: emacs-devel

On Thu, 16 Jul 2009 13:19:07 +0800 Jason Rumney <jasonr@gnu.org> wrote: 

JR> Stephen J. Turnbull wrote:
>> Anyway, the question is if merging Gnus code into Emacs would result
>> in a purge of XEmacs compatibility code.
JR> To clarify, the question is about merging SOME Gnus code into Emacs. I
JR> would see it working the same way as the code that has been merged
JR> from Gnus already, where the Gnus folk continue to offer their own
JR> packages for XEmacs and older versions of Emacs that include the files
JR> that were merged into Emacs plus any compatibility code that has been
JR> modularized and doesn't need to be in the Emacs repository.

On Wed, 15 Jul 2009 14:27:46 -0400 Stefan Monnier <monnier@iro.umontreal.ca> wrote: 

>> Pulling code out of Gnus has the downside that it then needs to be
>> inside Emacs, but XEmacs may not have it.

SM> Don't worry about this part: the changes (supposedly) needed don't
SM> intend to remove any code, just better modularize it (e.g. so that
SM> message-mode can be self-standing without importing (transitively)
SM> gnus-*.el packages).

As long as we're talking about changes local to the Gnus project (not
pulling things out to Emacs itself) I think this is reasonable.  If,
however, we plan to pull libraries out to Emacs, as I think some of the
comments are suggesting, we need to ensure it will not break XEmacs
compatibility.  Thanks for the clarification.

Ted





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

* Re: Sending attachments
  2009-07-16  1:10                   ` Richard Stallman
  2009-07-16  5:30                     ` Stephen J. Turnbull
@ 2009-07-16 14:45                     ` Ted Zlatanov
  2009-07-17 13:30                       ` Richard Stallman
  1 sibling, 1 reply; 167+ messages in thread
From: Ted Zlatanov @ 2009-07-16 14:45 UTC (permalink / raw)
  To: emacs-devel

On Wed, 15 Jul 2009 21:10:58 -0400 Richard Stallman <rms@gnu.org> wrote: 

RS> I don't know how many other parts of Gnus are comparable to rfc2047.el
RS> in that they are useful general facilities and ought to be made
RS> separate and modular.  If Gnus developers are interested in doing work
RS> to make these files modular, I'm interested in looking for candidates.

If we establish a list of specific things, as Reiner's list for example,
it will be easier to work on it.  As I mentioned, there aren't that many
Gnus developers and refactoring code is a thankless task that tends to
take tons of time.  You should expect this to be a slow process.

Ted





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

* Re: Sending attachments
  2009-07-15 16:45                   ` Ted Zlatanov
  2009-07-15 18:18                     ` Frank Schmitt
  2009-07-15 18:27                     ` Stefan Monnier
@ 2009-07-16 16:17                     ` Richard Stallman
  2009-07-16 18:17                       ` Ted Zlatanov
  2 siblings, 1 reply; 167+ messages in thread
From: Richard Stallman @ 2009-07-16 16:17 UTC (permalink / raw)
  To: Ted Zlatanov; +Cc: emacs-devel

    Pulling code out of Gnus has the downside that it then needs to be
    inside Emacs, but XEmacs may not have it.  XEmacs compatibility has (as
    long as I can remember) been a Gnus goal.

1. XEmacs can have these files if its developers want.

2. There could be a Gnus-XEmacs compatibility package
released alongside Gnus.





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

* Re: Sending attachments
  2009-07-16 16:17                     ` Richard Stallman
@ 2009-07-16 18:17                       ` Ted Zlatanov
  2009-07-17 12:20                         ` Stephen J. Turnbull
  0 siblings, 1 reply; 167+ messages in thread
From: Ted Zlatanov @ 2009-07-16 18:17 UTC (permalink / raw)
  To: emacs-devel

On Thu, 16 Jul 2009 12:17:52 -0400 Richard Stallman <rms@gnu.org> wrote: 

RS>     Pulling code out of Gnus has the downside that it then needs to be
RS>     inside Emacs, but XEmacs may not have it.  XEmacs compatibility has (as
RS>     long as I can remember) been a Gnus goal.

RS> 1. XEmacs can have these files if its developers want.

RS> 2. There could be a Gnus-XEmacs compatibility package
RS> released alongside Gnus.

I think Reiner Steib and Stephen Turnbull, among others, need to discuss
this with you and the Emacs maintainers.  I'll go along with whatever
decision the group makes.

Ted





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

* Re: Sending attachments
  2009-07-16 18:17                       ` Ted Zlatanov
@ 2009-07-17 12:20                         ` Stephen J. Turnbull
  2009-07-19  0:55                           ` Mike Kupfer
  0 siblings, 1 reply; 167+ messages in thread
From: Stephen J. Turnbull @ 2009-07-17 12:20 UTC (permalink / raw)
  To: Ted Zlatanov; +Cc: emacs-devel

Ted Zlatanov writes:

 > RS> 1. XEmacs can have these files if its developers want.
 > 
 > RS> 2. There could be a Gnus-XEmacs compatibility package
 > RS> released alongside Gnus.
 > 
 > I think Reiner Steib and Stephen Turnbull, among others, need to discuss
 > this with you and the Emacs maintainers.  I'll go along with whatever
 > decision the group makes.

Mike Kupfer should be in the mix, other than that I don't have a
particular opinion on what to do.





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

* Re: Sending attachments
  2009-07-16 14:45                     ` Ted Zlatanov
@ 2009-07-17 13:30                       ` Richard Stallman
  2009-07-17 18:05                         ` Ted Zlatanov
  0 siblings, 1 reply; 167+ messages in thread
From: Richard Stallman @ 2009-07-17 13:30 UTC (permalink / raw)
  To: Ted Zlatanov; +Cc: emacs-devel

    If we establish a list of specific things, as Reiner's list for example,
    it will be easier to work on it.  As I mentioned, there aren't that many
    Gnus developers and refactoring code is a thankless task that tends to
    take tons of time.  You should expect this to be a slow process.

I understand that.  My point is, first do no harm.

Since it is hard work to remove these dependencies,
please avoid making more of them.  When you want to add
a new file, ask yourself whether its function is inherently
part of Gnus, or whether it is something general (like rfc2047.el
for example) that you simply want for Gnus.  And if it is the latter,
please write it in a way that doesn't depend on Gnus, and propose
it for inclusion in Emacs.





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

* Re: Sending attachments
  2009-07-17 13:30                       ` Richard Stallman
@ 2009-07-17 18:05                         ` Ted Zlatanov
  2009-07-18 17:11                           ` Richard Stallman
  2009-07-18 17:11                           ` Sending attachments Richard Stallman
  0 siblings, 2 replies; 167+ messages in thread
From: Ted Zlatanov @ 2009-07-17 18:05 UTC (permalink / raw)
  To: emacs-devel

On Fri, 17 Jul 2009 09:30:30 -0400 Richard Stallman <rms@gnu.org> wrote: 

RS>     If we establish a list of specific things, as Reiner's list for example,
RS>     it will be easier to work on it.  As I mentioned, there aren't that many
RS>     Gnus developers and refactoring code is a thankless task that tends to
RS>     take tons of time.  You should expect this to be a slow process.

RS> I understand that.  My point is, first do no harm.

RS> Since it is hard work to remove these dependencies,
RS> please avoid making more of them.  When you want to add
RS> a new file, ask yourself whether its function is inherently
RS> part of Gnus, or whether it is something general (like rfc2047.el
RS> for example) that you simply want for Gnus.  And if it is the latter,
RS> please write it in a way that doesn't depend on Gnus, and propose
RS> it for inclusion in Emacs.

I'll try to watch for this in new submissions and in my own work.

Ted





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

* Re: Sending attachments
  2009-07-17 18:05                         ` Ted Zlatanov
@ 2009-07-18 17:11                           ` Richard Stallman
  2009-07-18 19:15                             ` rfc2047.el dependencies on mm-util.el (was: Sending attachments) Reiner Steib
  2009-07-18 17:11                           ` Sending attachments Richard Stallman
  1 sibling, 1 reply; 167+ messages in thread
From: Richard Stallman @ 2009-07-18 17:11 UTC (permalink / raw)
  To: Ted Zlatanov; +Cc: emacs-devel

rfc2047.el depends on some substantial code in mm-util.el:
mm-charset-to-coding-system and mm-find-mime-charset-region.  I cannot
understand that code, and I am not sure what it is trying to do.  I
understand the doc strings, but they explain only in vague terms.

Can you separate out that functionality into a file by itself, which
does not depend on the rest of Gnus, and clean it up and/or add
comments so that it is clear?




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

* Re: Sending attachments
  2009-07-17 18:05                         ` Ted Zlatanov
  2009-07-18 17:11                           ` Richard Stallman
@ 2009-07-18 17:11                           ` Richard Stallman
  1 sibling, 0 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-18 17:11 UTC (permalink / raw)
  To: Ted Zlatanov; +Cc: emacs-devel

    RS> part of Gnus, or whether it is something general (like rfc2047.el
    RS> for example) that you simply want for Gnus.  And if it is the latter,
    RS> please write it in a way that doesn't depend on Gnus, and propose
    RS> it for inclusion in Emacs.

    I'll try to watch for this in new submissions and in my own work.

Thank you.  Things will be a lot better that way.




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

* rfc2047.el dependencies on mm-util.el (was: Sending attachments)
  2009-07-18 17:11                           ` Richard Stallman
@ 2009-07-18 19:15                             ` Reiner Steib
  2009-07-19  4:36                               ` Richard Stallman
  0 siblings, 1 reply; 167+ messages in thread
From: Reiner Steib @ 2009-07-18 19:15 UTC (permalink / raw)
  To: Richard Stallman; +Cc: Ted Zlatanov, ding, emacs-devel

On Sat, Jul 18 2009, Richard Stallman wrote:

> rfc2047.el depends on some substantial code in mm-util.el:
> mm-charset-to-coding-system and mm-find-mime-charset-region.  I cannot
> understand that code, and I am not sure what it is trying to do.  I
> understand the doc strings, but they explain only in vague terms.

Please elaborate what is not clear...

,----[ <f1> f mm-find-mime-charset-region RET ]
| mm-find-mime-charset-region is a compiled Lisp function in `mm-util.el'.
| (mm-find-mime-charset-region B E &optional HACK-CHARSETS)
| 
| Return the MIME charsets needed to encode the region between B and E.
| nil means ASCII, a single-element list represents an appropriate MIME
| charset, and a longer list means no appropriate charset.
`----

,----[ <f1> f mm-charset-to-coding-system RET ]
| mm-charset-to-coding-system is a compiled Lisp function in `mm-util.el'.
| (mm-charset-to-coding-system CHARSET &optional LBT ALLOW-OVERRIDE SILENT)
| 
| Return coding-system corresponding to CHARSET.
| CHARSET is a symbol naming a MIME charset.  [...]
`----

MIME charsets are not the same as (Emacs) coding systems.  This
function does the mapping and also handles overrides (many MUAs
specify wrong charsets), invalid charsets, etc.

> Can you separate out that functionality into a file by itself, which
> does not depend on the rest of Gnus, and clean it up and/or add
> comments so that it is clear?

rfc2047.el implements (one of) the MIME standards.  mm-utils.el
contains utility functions for MIME.  I.e. they are closely related.
I'm not sure it is worth to separate out parts of it.

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/




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

* Re: Sending attachments
  2009-07-17 12:20                         ` Stephen J. Turnbull
@ 2009-07-19  0:55                           ` Mike Kupfer
  0 siblings, 0 replies; 167+ messages in thread
From: Mike Kupfer @ 2009-07-19  0:55 UTC (permalink / raw)
  To: emacs-devel

>>>>> "ST" == Stephen J Turnbull <stephen@xemacs.org> writes:

ST> Ted Zlatanov writes:

RS> 1. XEmacs can have these files if its developers want.

RS> 2. There could be a Gnus-XEmacs compatibility package released
RS> alongside Gnus.

>> I think Reiner Steib and Stephen Turnbull, among others, need to
>> discuss this with you and the Emacs maintainers.  I'll go along
>> with whatever decision the group makes.

ST> Mike Kupfer should be in the mix, other than that I don't have a
ST> particular opinion on what to do.

Hi, folks.  I'm the Gnus maintainer for XEmacs.  Stephen T. pointed me
at this discussion.

The XEmacs-specific code in Gnus appears in one of two ways (that I'm
aware of):

1. XEmacs-specific files (gnus-xmas.el, messagexmas.el)
2. (featurep 'xemacs) checks in otherwise common code.

I just did a quick pass through the Gnus 5.10.10 sources to see how
often (featurep 'xemacs) appears.  I get 45 hits for message.el plus
mm*.el (171 hits for Gnus as a whole).  A lot of those 45 hits are in
menu generation code, leaving 18 or so places that will like require
more serious work for refactoring.

gnus-xmas.el and messagexmas.el are distributed with the Gnus releases
from gnus.org.  I'd like to see those files remain with the Gnus
sources, as separating them would increase the risk of breakage as
changes are made to the common code.

mike





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

* Re: rfc2047.el dependencies on mm-util.el (was: Sending attachments)
  2009-07-18 19:15                             ` rfc2047.el dependencies on mm-util.el (was: Sending attachments) Reiner Steib
@ 2009-07-19  4:36                               ` Richard Stallman
  2009-07-19  5:30                                 ` rfc2047.el dependencies on mm-util.el Stefan Monnier
  2009-07-19 18:10                                 ` rfc2047.el dependencies on mm-util.el (was: Sending attachments) Eli Zaretskii
  0 siblings, 2 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-19  4:36 UTC (permalink / raw)
  To: Reiner Steib; +Cc: tzz, ding, emacs-devel

    > rfc2047.el depends on some substantial code in mm-util.el:
    > mm-charset-to-coding-system and mm-find-mime-charset-region.  I cannot
    > understand that code, and I am not sure what it is trying to do.  I
    > understand the doc strings, but they explain only in vague terms.

    Please elaborate what is not clear...

If only a piece of it were unclear, that would be a reasonable question.
However, the problem is that I can't even begin to understand most
of those functions.  The necessary info is not present.

    MIME charsets are not the same as (Emacs) coding systems.  This
    function does the mapping and also handles overrides (many MUAs
    specify wrong charsets), invalid charsets, etc.

That is just the beginning of the necessary explanation for
understanding what this code does.  To state the purpose in general
terms like this is not enough.

To make the code clear means explaining the specifics of what it does.
Each group of a few lines needs comments to explain why those lines
are there.  Lots of background information needs to be provided.

    rfc2047.el implements (one of) the MIME standards.  mm-utils.el
    contains utility functions for MIME.  I.e. they are closely related.

Only part of mm-utils.el is closely related to rfc2047.el.  That part
is what I am talking about here.  It consists of the two functions
mm-find-mime-charset-region and mm-charset-to-coding-system, and their
subroutines and data.

    I'm not sure it is worth to separate out parts of it.

I don't think you and I are talking about the same "it".  The things
you think I want to separate, actually I want to keep together.

I am going to move rfc20457.el outside Gnus to make it a regular part
of Emacs.

What I want to do is keep the two functions
mm-find-mime-charset-region and mm-charset-to-coding-system (and their
subroutines and data) together with rfc2047.el, making them too a
regular part of Emacs.  This requires separating them from the rest of
mm-utils.el which will remain inside Gnus.  It also requires making
them clean and understandable.

I am asking Gnus developers to help me by do this by splitting mm-utils
and cleaning up this part.

If I have to do this on my own, then since I can't understand all the
code of these functions, I will have to delete parts of the code until
I can understand what remains.  Some features will be lost, but at
least it will be clear and maintainable.  Whatever features I had to
discard could be re-added later if someone can write them cleanly.

However, if you help, maybe we can achieve a better outcome in which
we get clean code that implements all the existing features of
mm-charset-to-coding-system and mm-find-mime-charset-region, and thus
have no inconvenience for anyone.






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

* Re: Sending attachments
  2009-07-16  5:30                     ` Stephen J. Turnbull
@ 2009-07-19  4:37                       ` Richard Stallman
  0 siblings, 0 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-19  4:37 UTC (permalink / raw)
  To: Stephen J. Turnbull; +Cc: ams, monnier, emacs-devel

     > Its complexity has discouraged me from looking at it except in
     > cases of need.

    Unfortunately, that complexity is mostly a reflection of the problem
    domain.

I think you are mistaken.  I think most of the complexity has nothing
to do with this.




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

* Re: rfc2047.el dependencies on mm-util.el
  2009-07-19  4:36                               ` Richard Stallman
@ 2009-07-19  5:30                                 ` Stefan Monnier
  2009-07-19 23:21                                   ` Richard Stallman
  2009-07-19 18:10                                 ` rfc2047.el dependencies on mm-util.el (was: Sending attachments) Eli Zaretskii
  1 sibling, 1 reply; 167+ messages in thread
From: Stefan Monnier @ 2009-07-19  5:30 UTC (permalink / raw)
  To: rms; +Cc: tzz, ding, Reiner Steib, emacs-devel

> If only a piece of it were unclear, that would be a reasonable question.
> However, the problem is that I can't even begin to understand most
> of those functions.  The necessary info is not present.

I'm not familar with those functions, but they don't look particularly
unclear to me.  So I don't know what "necessary info" you're looking for.

>     rfc2047.el implements (one of) the MIME standards.  mm-utils.el
>     contains utility functions for MIME.  I.e. they are closely related.

> Only part of mm-utils.el is closely related to rfc2047.el.  That part
> is what I am talking about here.  It consists of the two functions
> mm-find-mime-charset-region and mm-charset-to-coding-system, and their
> subroutines and data.

They're used in other places as well (basically to encode message
bodies), so they don't really belong to rfc2047.el.

> I am going to move rfc20457.el outside Gnus to make it a regular part
> of Emacs.

It's been part of Emacs since Emacs-21.  And I don't think you can
prevent the Gnus maintainers from distributing rfc2047.el along
with Gnus.

> What I want to do is keep the two functions
> mm-find-mime-charset-region and mm-charset-to-coding-system (and their
> subroutines and data) together with rfc2047.el, making them too
> a regular part of Emacs.  This requires separating them from the rest
> of mm-utils.el which will remain inside Gnus.  It also requires making
> them clean and understandable.

Rather than focus on code-ownership, I'd rather we focus on this latter
part: "clean and understandable".

> I am asking Gnus developers to help me by do this by splitting mm-utils
> and cleaning up this part.

Maybe one way to look at it is to split mm-utils.el into a part that
deals with compatibility between different Emacsen
(e.g. mm-string-to-multibyte) and the other that provides actual
functionality (e.g. mm-find-mime-charset-region).

I'm still wondering why someone would want to do that since it seems
pretty far from the goal of improving the user's experience.
IOW, another way to look at this problem would be: what changes would it
take to make Rmail use message-mode for composition?  I'm sure this will
take less time and make more people happier.


        Stefan




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

* Re: rfc2047.el dependencies on mm-util.el (was: Sending attachments)
  2009-07-19  4:36                               ` Richard Stallman
  2009-07-19  5:30                                 ` rfc2047.el dependencies on mm-util.el Stefan Monnier
@ 2009-07-19 18:10                                 ` Eli Zaretskii
  2009-07-19 23:22                                   ` Richard Stallman
  2009-07-22 21:57                                   ` Kevin Ryde
  1 sibling, 2 replies; 167+ messages in thread
From: Eli Zaretskii @ 2009-07-19 18:10 UTC (permalink / raw)
  To: rms; +Cc: tzz, ding, Reiner.Steib, emacs-devel

> From: Richard Stallman <rms@gnu.org>
> Date: Sun, 19 Jul 2009 00:36:49 -0400
> Cc: tzz@lifelogs.com, ding@gnus.org, emacs-devel@gnu.org
> 
> What I want to do is keep the two functions
> mm-find-mime-charset-region and mm-charset-to-coding-system (and their
> subroutines and data) together with rfc2047.el, making them too a
> regular part of Emacs.

Do we really need these two functions?  I think we have the necessary
infrastructure in Emacs:

  . find-charset-region

  . find-coding-systems-region

  . find-coding-systems-for-charsets

  . (coding-system-get FOO :mime-charset)

  . coding-system-list

  . sort-coding-systems

If these are not enough to write a much cleaner, leaner versions of
those two mm-utils functions, please tell what else is missing.




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

* Re: rfc2047.el dependencies on mm-util.el
  2009-07-19  5:30                                 ` rfc2047.el dependencies on mm-util.el Stefan Monnier
@ 2009-07-19 23:21                                   ` Richard Stallman
  2009-07-20 18:21                                     ` Stefan Monnier
  0 siblings, 1 reply; 167+ messages in thread
From: Richard Stallman @ 2009-07-19 23:21 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Reiner.Steib, tzz, ding, emacs-devel


    I'm not familar with those functions, but they don't look particularly
    unclear to me.

If you can manage to understand them, can you please add comments explaining
their code clearly?

    > Only part of mm-utils.el is closely related to rfc2047.el.  That part
    > is what I am talking about here.  It consists of the two functions
    > mm-find-mime-charset-region and mm-charset-to-coding-system, and their
    > subroutines and data.

    They're used in other places as well (basically to encode message
    bodies), so they don't really belong to rfc2047.el.

I would not say they "belong to" it, but they are closely related to
it.

    > I am going to move rfc20457.el outside Gnus to make it a regular part
    > of Emacs.

    It's been part of Emacs since Emacs-21.

I am going to make it a regular part of Emacs -- no longer part of Gnus.

      And I don't think you can
    prevent the Gnus maintainers from distributing rfc2047.el along
    with Gnus.

I have no wish to stop them.  I'm concerned with what's in Emacs.  How
Gnus is distributed outside of Emacs is not the issue.

      This requires separating them from the rest
    > of mm-utils.el which will remain inside Gnus.  It also requires making
    > them clean and understandable.

    Rather than focus on code-ownership, I'd rather we focus on this latter
    part: "clean and understandable".

Part of making them clean and understandable is making the code not
depend on Gnus.

This won't stop Gnus from using these facilities.  It could use them
just as it uses any other Emacs facilities.

    Maybe one way to look at it is to split mm-utils.el into a part that
    deals with compatibility between different Emacsen
    (e.g. mm-string-to-multibyte) and the other that provides actual
    functionality (e.g. mm-find-mime-charset-region).

That could be the first step.  Then the next step is to make the
second part clear and independent of Gnus.

    I'm still wondering why someone would want to do that since it seems
    pretty far from the goal of improving the user's experience.

The goal is to move rfc2047.el outside of Gnus so that other parts
of Emacs can use it without using Gnus.



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

* Re: rfc2047.el dependencies on mm-util.el (was: Sending attachments)
  2009-07-19 18:10                                 ` rfc2047.el dependencies on mm-util.el (was: Sending attachments) Eli Zaretskii
@ 2009-07-19 23:22                                   ` Richard Stallman
  2009-07-22 21:57                                   ` Kevin Ryde
  1 sibling, 0 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-19 23:22 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Reiner.Steib, tzz, ding, emacs-devel

    > What I want to do is keep the two functions
    > mm-find-mime-charset-region and mm-charset-to-coding-system (and their
    > subroutines and data) together with rfc2047.el, making them too a
    > regular part of Emacs.

    Do we really need these two functions?  I think we have the necessary
    infrastructure in Emacs:

      . find-charset-region

      . find-coding-systems-region
    ...

I don't know whether they do 100% of the job.  I asked Handa basically
that question a week ago, but he has not answered yet.

I have been working on extracting the actually needed parts of mm-util.el.
That code often consists of wrappers around these standard functions.
But it does not have comments explaining why do something different,
or which cases  are intended to get different treatment, etc.



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

* Re: rfc2047.el dependencies on mm-util.el
  2009-07-19 23:21                                   ` Richard Stallman
@ 2009-07-20 18:21                                     ` Stefan Monnier
  2009-07-20 18:26                                       ` Bastien
  0 siblings, 1 reply; 167+ messages in thread
From: Stefan Monnier @ 2009-07-20 18:21 UTC (permalink / raw)
  To: rms; +Cc: tzz, ding, Reiner.Steib, emacs-devel

>     I'm not familar with those functions, but they don't look particularly
>     unclear to me.

> If you can manage to understand them, can you please add comments explaining
> their code clearly?

Not really, because I don't know what's unclear about it.

>> I am going to move rfc20457.el outside Gnus to make it a regular part
>> of Emacs.
>     It's been part of Emacs since Emacs-21.
> I am going to make it a regular part of Emacs

I don't know what that means.

> -- no longer part of Gnus.

Isn't this out of your control?

>       And I don't think you can prevent the Gnus maintainers from
>     distributing rfc2047.el along with Gnus.
> I have no wish to stop them.  I'm concerned with what's in Emacs.  How
> Gnus is distributed outside of Emacs is not the issue.

Then I don't know what you mean by "no longer part of Gnus".

>     Rather than focus on code-ownership, I'd rather we focus on this latter
>     part: "clean and understandable".
> Part of making them clean and understandable is making the code not
> depend on Gnus.

What do you mean by "Gnus" in this context?  E.g., in my view,
mm-util.el is not part of Gnus (C-s gnus in this file shows it does
appear, but mostly in comments).

>     I'm still wondering why someone would want to do that since it seems
>     pretty far from the goal of improving the user's experience.
> The goal is to move rfc2047.el outside of Gnus so that other parts
> of Emacs can use it without using Gnus.

These words don't mean much to me since AFAICT rfc2047.el is already
independent from Gnus.


        Stefan




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

* Re: rfc2047.el dependencies on mm-util.el
  2009-07-20 18:21                                     ` Stefan Monnier
@ 2009-07-20 18:26                                       ` Bastien
  2009-07-20 18:45                                         ` Chong Yidong
  0 siblings, 1 reply; 167+ messages in thread
From: Bastien @ 2009-07-20 18:26 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: tzz, Reiner.Steib, rms, ding, emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>> I am going to make it a regular part of Emacs
>
> I don't know what that means.
>
>> -- no longer part of Gnus.
>
> Isn't this out of your control?

I think Richard is talking about moving the rfc2047.el file outside of
the gnus/ directory in Emacs.

-- 
 Bastien




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

* Re: rfc2047.el dependencies on mm-util.el
  2009-07-20 18:26                                       ` Bastien
@ 2009-07-20 18:45                                         ` Chong Yidong
  2009-07-21 14:41                                           ` Richard Stallman
  0 siblings, 1 reply; 167+ messages in thread
From: Chong Yidong @ 2009-07-20 18:45 UTC (permalink / raw)
  To: Bastien; +Cc: rms, Reiner.Steib, tzz, ding, emacs-devel, Stefan Monnier

Bastien <bastienguerry@googlemail.com> writes:

> I think Richard is talking about moving the rfc2047.el file outside of
> the gnus/ directory in Emacs.

If the Gnus maintainers are actively maintaining and developing the
rfc*.el files, it's not worthwhile to move those files from gnus/ into
net/, if that would make it harder for them to do thir job (due to the
repository synch issues etc.)  But if these files are more or less
"stable", then I don't see why not.

In the meantime, there's no reason to avoid `require'ing a package just
because that package happens to live in the gnus/ directory.




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

* Re: rfc2047.el dependencies on mm-util.el
  2009-07-20 18:45                                         ` Chong Yidong
@ 2009-07-21 14:41                                           ` Richard Stallman
  0 siblings, 0 replies; 167+ messages in thread
From: Richard Stallman @ 2009-07-21 14:41 UTC (permalink / raw)
  To: Chong Yidong; +Cc: bastienguerry, Reiner.Steib, tzz, ding, emacs-devel, monnier

    In the meantime, there's no reason to avoid `require'ing a package just
    because that package happens to live in the gnus/ directory.

Indeed, the reason isn't tht it's in `gnus', but rather that it is
part of Gnus and dependent on lots of other parts of Gnus.





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

* Re: rfc2047.el dependencies on mm-util.el (was: Sending attachments)
  2009-07-19 18:10                                 ` rfc2047.el dependencies on mm-util.el (was: Sending attachments) Eli Zaretskii
  2009-07-19 23:22                                   ` Richard Stallman
@ 2009-07-22 21:57                                   ` Kevin Ryde
  1 sibling, 0 replies; 167+ messages in thread
From: Kevin Ryde @ 2009-07-22 21:57 UTC (permalink / raw)
  To: emacs-devel; +Cc: ding

Eli Zaretskii <eliz@gnu.org> writes:
>
> necessary infrastructure in Emacs:

And of course locale-charset-to-coding-system.  I've had some joy with
that on mime-ish names, doing the job of mm-charset-to-coding-system.

In bits of my code I've called locale- when available (emacs 22 up),
then try the mm-.  The mm- one has more variables to setup synonyms and
aliasing, but locale- might cover much of that already (and not need the
`codepage-setup' stuff for msdos any more at all).




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

end of thread, other threads:[~2009-07-22 21:57 UTC | newest]

Thread overview: 167+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-01 19:47 Sending attachments Richard Stallman
2009-07-01 19:58 ` Alfred M. Szmidt
2009-07-05  0:06   ` Richard Stallman
2009-07-05 21:52     ` Stefan Monnier
2009-07-06  3:12       ` Eli Zaretskii
2009-07-11 15:38         ` Stefan Monnier
2009-07-06 15:04       ` Richard Stallman
2009-07-11 15:40         ` Stefan Monnier
2009-07-12 10:11           ` Richard Stallman
2009-07-13 12:14             ` Stefan Monnier
2009-07-14 10:44               ` Richard Stallman
2009-07-14 13:10                 ` Leo
2009-07-14 13:52                 ` Stephen J. Turnbull
2009-07-15 16:45                   ` Ted Zlatanov
2009-07-15 18:18                     ` Frank Schmitt
2009-07-16  4:42                       ` Stephen J. Turnbull
2009-07-16  5:19                         ` Jason Rumney
2009-07-16 14:30                           ` Ted Zlatanov
2009-07-15 18:27                     ` Stefan Monnier
2009-07-16 16:17                     ` Richard Stallman
2009-07-16 18:17                       ` Ted Zlatanov
2009-07-17 12:20                         ` Stephen J. Turnbull
2009-07-19  0:55                           ` Mike Kupfer
2009-07-16  1:10                   ` Richard Stallman
2009-07-16  5:30                     ` Stephen J. Turnbull
2009-07-19  4:37                       ` Richard Stallman
2009-07-16 14:45                     ` Ted Zlatanov
2009-07-17 13:30                       ` Richard Stallman
2009-07-17 18:05                         ` Ted Zlatanov
2009-07-18 17:11                           ` Richard Stallman
2009-07-18 19:15                             ` rfc2047.el dependencies on mm-util.el (was: Sending attachments) Reiner Steib
2009-07-19  4:36                               ` Richard Stallman
2009-07-19  5:30                                 ` rfc2047.el dependencies on mm-util.el Stefan Monnier
2009-07-19 23:21                                   ` Richard Stallman
2009-07-20 18:21                                     ` Stefan Monnier
2009-07-20 18:26                                       ` Bastien
2009-07-20 18:45                                         ` Chong Yidong
2009-07-21 14:41                                           ` Richard Stallman
2009-07-19 18:10                                 ` rfc2047.el dependencies on mm-util.el (was: Sending attachments) Eli Zaretskii
2009-07-19 23:22                                   ` Richard Stallman
2009-07-22 21:57                                   ` Kevin Ryde
2009-07-18 17:11                           ` Sending attachments Richard Stallman
2009-07-14 16:17                 ` Jonathan Rockway
2009-07-14 18:33                 ` Bastien
2009-07-14 18:48                 ` Stefan Monnier
2009-07-16  1:11                   ` Richard Stallman
2009-07-16  1:12                   ` Richard Stallman
2009-07-05 22:39     ` Alfred M. Szmidt
2009-07-06 15:05       ` Richard Stallman
2009-07-07  9:43         ` Alfred M. Szmidt
2009-07-01 23:34 ` Miles Bader
2009-07-02 19:21   ` Richard Stallman
2009-07-03  2:37     ` Miles Bader
2009-07-03  7:44       ` message-mode / mail-mode (was: Sending attachments) Teemu Likonen
2009-07-03  8:43         ` message-mode / mail-mode Miles Bader
2009-07-03  8:55           ` Miles Bader
2009-07-03  9:07           ` Teemu Likonen
2009-07-05 21:40           ` Stefan Monnier
2009-07-06  6:45             ` Reiner Steib
2009-07-11 10:04               ` Stefan Monnier
2009-07-02  1:01 ` Sending attachments Robert J. Chassell
2009-07-02 13:39   ` Miles Bader
2009-07-02 14:33     ` Jason Rumney
2009-07-02 16:40     ` Reiner Steib
2009-07-03 22:52       ` Richard Stallman
2009-07-04 14:39         ` Robert J. Chassell
2009-07-04 15:19         ` Andreas Schwab
2009-07-02 17:26     ` Chong Yidong
2009-07-03 13:47       ` Richard Stallman
2009-07-03 14:21         ` Alfred M. Szmidt
2009-07-05 21:41           ` Stefan Monnier
2009-07-06 15:05             ` Richard Stallman
2009-07-06 16:07               ` Chong Yidong
2009-07-07 10:05                 ` Richard Stallman
2009-07-07 12:19                   ` Andreas Schwab
2009-07-08  0:16                     ` Richard Stallman
2009-07-08  9:46                       ` Andreas Schwab
2009-07-08 18:34                         ` Richard Stallman
2009-07-08 20:36                           ` Reiner Steib
2009-07-09 11:53                             ` Richard Stallman
2009-07-08 11:41                       ` Jason Rumney
2009-07-08 13:41                         ` Miles Bader
2009-07-08 14:16                           ` Teemu Likonen
2009-07-08 14:27                             ` Miles Bader
2009-07-08 14:40                               ` Teemu Likonen
2009-07-08 15:09                               ` Jason Rumney
2009-07-09  2:47                                 ` Miles Bader
2009-07-09 11:54                               ` Richard Stallman
2009-07-09 20:43                                 ` Reiner Steib
2009-07-10  6:39                                   ` Richard Stallman
2009-07-10  9:02                                     ` Stephen J. Turnbull
2009-07-10 11:01                                       ` Eli Zaretskii
2009-07-10 11:55                                         ` Jason Rumney
2009-07-11 18:30                                           ` Richard Stallman
2009-07-10 12:42                                         ` Stephen J. Turnbull
2009-07-11 18:29                                       ` Richard Stallman
2009-07-10  9:17                                     ` Jason Rumney
2009-07-08 19:07                         ` Reiner Steib
2009-07-09 11:54                         ` Richard Stallman
2009-07-09 20:47                           ` Reiner Steib
2009-07-08 19:08                       ` Reiner Steib
2009-07-07 12:48                   ` Jason Rumney
2009-07-06 16:16               ` Glenn Morris
2009-07-07 10:05                 ` Richard Stallman
2009-07-03 17:37         ` Chong Yidong
2009-07-03 22:52           ` Richard Stallman
2009-07-04 15:11             ` Teemu Likonen
2009-07-04 15:54               ` Leo
2009-07-05 14:47             ` Chong Yidong
2009-07-06 20:13               ` Eli Zaretskii
2009-07-07  1:12                 ` Miles Bader
2009-07-07  3:22                   ` Eli Zaretskii
2009-07-07  4:54                     ` Miles Bader
2009-07-07 19:14                       ` Eli Zaretskii
2009-07-11 18:50                         ` Stefan Monnier
2009-07-11 20:25                           ` Eli Zaretskii
2009-07-07  9:43                   ` Alfred M. Szmidt
2009-07-07 10:11                     ` Richard Riley
2009-07-07 13:53                     ` Chong Yidong
2009-07-07 10:05               ` Richard Stallman
2009-07-07 13:49                 ` Chong Yidong
2009-07-08  0:16                   ` Richard Stallman
2009-07-10 13:29                     ` Chong Yidong
2009-07-11 19:02                     ` Stefan Monnier
2009-07-15 21:51             ` Reducing Gnus dependencies in message.el (was: Sending attachments) Reiner Steib
2009-07-03 14:21       ` Sending attachments Alfred M. Szmidt
2009-07-04 15:33         ` Chad Brown
2009-07-04 15:53           ` Eli Zaretskii
2009-07-04 17:08             ` Chad Brown
2009-07-05 10:18               ` Richard Stallman
2009-07-05  1:40             ` Daniel Pittman
2009-07-05  2:39             ` Miles Bader
2009-07-05  3:18               ` Eli Zaretskii
2009-07-05  3:44                 ` Miles Bader
2009-07-05 18:16                   ` Eli Zaretskii
2009-07-05 20:44                     ` Miles Bader
2009-07-06  3:15                       ` Eli Zaretskii
2009-07-06  3:50                         ` Miles Bader
2009-07-06  4:54                           ` Miles Bader
2009-07-06 20:06                             ` Eli Zaretskii
2009-07-06 22:35                               ` Miles Bader
2009-07-07  0:59                                 ` Kenichi Handa
2009-07-07  9:43                                   ` Alfred M. Szmidt
2009-07-08  0:16                                   ` Richard Stallman
2009-07-11 15:45                                     ` Stefan Monnier
2009-07-06  6:37                           ` Alfred M. Szmidt
2009-07-06  7:47                             ` Miles Bader
2009-07-06 20:08                               ` Eli Zaretskii
2009-07-06 14:13                             ` Chong Yidong
2009-07-06 20:15                               ` Eli Zaretskii
2009-07-07  5:57                             ` Giorgos Keramidas
2009-07-06 15:05                       ` Richard Stallman
2009-07-11 19:08                         ` Stefan Monnier
2009-07-11 19:41                           ` Alfred M. Szmidt
2009-07-12  3:05                             ` Leo
2009-07-12  3:10                               ` Lennart Borgman
2009-07-13 12:11                             ` Stefan Monnier
2009-07-15  9:35                               ` Alfred M. Szmidt
2009-07-15 11:44                                 ` Richard Riley
2009-07-15 14:22                                 ` Stefan Monnier
2009-07-05 22:56                     ` Chong Yidong
2009-07-06 20:10                       ` Eli Zaretskii
2009-07-05  8:01               ` Andreas Schwab
2009-07-05  8:30                 ` Miles Bader
2009-07-06 15:05               ` Richard Stallman
2009-07-05 20:05         ` Byung-Hee HWANG
2009-07-05 20:22           ` Alfred M. Szmidt

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