* lisp/gnus: Use lexical-binding in all the files
* lisp/gnus/gnus-group.el (features): Use `dlet`.
(gnus-tmp-level, gnus-tmp-marked, gnus-tmp-group): Declare vars.
(gnus-group-insert-group-line): Bind dynbound vars via `let` rather
than as formal args. Bind `number` as dynbound.
(gnus-visual, gnus-score-find-score-files-function)
(gnus-home-score-file, gnus-apply-kill-hook)
(gnus-summary-expunge-below): Declare vars.
(gnus-group-restart, gnus-group-list-plus): Fix `interactive` spec
since the arg is unused.
* lisp/gnus/mail-source.el (mail-source-bind, mail-source-bind-common):
Use `dlet` and suppress the warnings about the non-prefixed dynbound vars.
(mail-source-set-1): Remove unused var `auth-info`.
(mail-source-call-script): Remove unused var `background`.
(mail-source-fetch-pop, mail-source-check-pop): Bind pop3 vars with `dlet`.
* lisp/gnus/gnus-int.el (mail-source-plugged, gnus-inhibit-demon):
Declare vars.
(gnus-server-opened, gnus-status-message)
(gnus-open-server, gnus-close-server, gnus-request-list)
(gnus-finish-retrieve-group-infos, gnus-retrieve-group-data-early)
(gnus-request-list-newsgroups, gnus-request-newgroups)
(gnus-request-regenerate, gnus-request-compact, gnus-request-group)
(gnus-retrieve-groups, gnus-request-post, gnus-request-expunge-group)
(gnus-request-scan, gnus-request-update-info, gnus-request-marks)
(gnus-request-accept-article, gnus-request-create-group)
(gnus-asynchronous-p, gnus-remove-denial):
Bind `gnus-command-method` via `let` rather than as formal args.
* lisp/gnus/gnus-topic.el (gnus-topic-insert-topic-line):
Pass documented vars to eval for `gnus-topic-line-format-spec`.
* lisp/gnus/message.el (message-yank-original): Use `cl-progv` rather
than `eval` to bind the vars from `message-cite-style`.
* lisp/gnus/mml.el (mml-parse-1): Use `apply` instead of `eval`.
(gnus-newsgroup-name, gnus-displaying-mime, gnus-newsgroup-name)
(gnus-article-prepare-hook, gnus-newsgroup-charset)
(gnus-original-article-buffer, gnus-message-buffer)
(message-this-is-news, message-this-is-mail): Declare vars.
* lisp/gnus/deuglify.el (gnus-outlook-rearrange-article): Remove unused
var `cite-marks`.
* lisp/gnus/gnus-art.el (ansi-color-context-region): Declare var.
(gnus-mime-display-attachment-buttons-in-header): Move declaration
before first use.
(gnus-mime-display-alternative): Remove unused var `from`.
* lisp/gnus/gnus-bookmark.el (gnus-bookmark-bmenu-list): Remove unused
var `start` `end`.
* lisp/gnus/gnus-cache.el (gnus-article-decode-hook)
(nnml-generate-active-function): Declare var.
* lisp/gnus/gnus-cite.el (gnus-message-citation-mode): Remove unused
var `keywords`.
* lisp/gnus/gnus-cloud.el (gnus-cloud-encode-data): Remove unused var
`cipher`.
(gnus-cloud-ensure-cloud-group): Remove unused var `method`.
* lisp/gnus/gnus-delay.el (gnus-delay-article): Remove unused var `days`.
* lisp/gnus/gnus-html.el (gnus-html-wash-images): Remove unused vars
`tag`, `string`, and `images`.
(gnus-html-wash-tags): Remove unused vars `string` and `images`.
* lisp/gnus/gnus-msg.el (gnus-msg-mail): Remove unused var `group-name`.
(gnus-group-mail, gnus-group-news, gnus-summary-mail-other-window)
(gnus-summary-news-other-window):
Remove unused vars `group` and `buffer`.
(gnus-configure-posting-styles): Remove unused vars `style` and `attribute`.
* lisp/gnus/gnus-picon.el (gnus-picon-find-face): Remove unused vars
`database`, `directory`, and `instance`.
(gnus-picon-transform-newsgroups): Remove unused var `point`.
* lisp/gnus/gnus-range.el (gnus-range-difference): Remove unused var `safe`.
* lisp/gnus/gnus-score.el (gnus-score-load-file): Remove unused var
`score-fn`.
* lisp/gnus/gnus-sum.el (message-options-set-recipient): Declare var.
* lisp/gnus/gnus-undo.el (gnus-undo): Fix docstring lie.
* lisp/gnus/gnus-util.el (print-string-length)
(iswitchb-make-buflist-hook): Declare vars.
(gnus-emacs-version): Remove unused var `codename`.
(gnus-rename-file): Remove unused vars `old-name` and `new-name`.
* lisp/gnus/gnus-uu.el (gnus-uu-yenc-article): Remove unused var
`start-char`.
(gnus-asynchronous): Declare var.
* lisp/gnus/mm-partial.el (gnus-displaying-mime): Declare var.
(mm-inline-partial): Remove unused var `buffer`.
* lisp/gnus/mm-view.el (w3m-force-redisplay, w3m-safe-url-regexp)
(gnus-displaying-mime, gnus-original-article-buffer)
(gnus-article-prepare-hook): Declare vars.
* lisp/gnus/mml-smime.el (mml-smime-epg-encrypt): Remove unused var
`boundary`.
(mml-smime-epg-verify): Remove unused vars `plain` and `signature-file`.
* lisp/gnus/mml1991.el (pgg-text-mode): Declare var.
* lisp/gnus/mml2015.el (pgg-text-mode): Declare var.
(mml2015-pgg-decrypt): Remove unused var `result`.
(mml2015-epg-key-image-to-string): Remove unused var `error`.
(mml2015-epg-decrypt): Remove unused var `result`.
(mml2015-epg-verify): Remove unused vars `plain` and `signature-file`.
* lisp/gnus/nnbabyl.el (nnml-current-directory): Declare var.
* lisp/gnus/nndiary.el (nndiary-files): Move declaration before first use.
* lisp/gnus/nnfolder.el (nnfolder-request-accept-article):
Remove unused var `buf`.
* lisp/gnus/nnmail.el (nnmail-parse-active): Remove unused var `err`.
* lisp/gnus/nnmairix.el (nnmairix-request-group): Remove unused var `args`.
(nnmairix-request-create-group): Remove unused var `info`.
(nnmairix-request-list): Remove unused var `folder`.
(nnmairix-request-set-mark): Remove unused var `propto`.
(nnmairix-request-set-mark): Remove unused vars `number` and `method`.
(nnmairix-close-group): Remove unused var `method`.
(nnmairix-create-search-group-from-message): Remove unused var `cq`.
(nnmairix-create-server-and-default-group): Remove unused var `create`.
(nnmairix-purge-old-groups): Remove unused var `folder`.
(nnmairix-remove-tick-mark-original-article, nnmairix-get-valid-servers):
Remove unused var `cur`.
(nnmairix-replace-group-and-numbers): Remove unused var `header`.
(nnmairix-goto-original-article): Remove unused var `rval`.
(nnmairix-widget-create-query): Remove unused var `allwidgets`.
* lisp/gnus/nnmbox.el (nnml-current-directory): Declare var.
* lisp/gnus/nnmh.el (nnmh-toplev): Move declaration before first use.
(nnmh-request-list-1): Remove unused var `rdir`.
* lisp/gnus/nnml.el (nnml-generate-nov-file): Remove unused var `file`.
* lisp/gnus/nnrss.el (nnrss-request-article): Remove unused var `post`.
(nnrss-request-article): Remove unused var `fn`.
(nnrss-check-group): Remove unused var `rdf-ns`.
* lisp/gnus/nnweb.el (nnweb-request-article): Remove unused var `active`.
(nnweb-google-parse-1): Remove unused var `Score`.
* lisp/gnus/spam-stat.el (spam-stat-error-holder): Remove var.
(spam-stat-buffer-words-with-scores): Remove unused var `word`.
(spam-stat-score-buffer): Remove unused var `spam-stat-error-holder`.
(spam-stat-split-fancy): Use `err` instead of `spam-stat-error-holder`.
* lisp/gnus/spam-wash.el (spam-wash): Remove unused var `handle`.
* lisp/gnus/spam.el (spam-copy-or-move-routine): Remove unused vars
`article` and `mark`.
(spam-register-routine): Remove unused var `article`.
(spam-log-undo-registration): Remove unused var `found`.
(spam-ifile-register-with-ifile): Remove unused var `parameters`.
(spam-check-stat): Remove unused vars `category` and `return`.
(spam-parse-list): Remove unused var `found`.
(spam-filelist-register-routine): Remove unused var `from`.
2021-01-30 18:44:00 -05:00
|
|
|
;;; mml.el --- A package for parsing and validating MML documents -*- lexical-binding: t; -*-
|
2005-08-06 19:51:42 +00:00
|
|
|
|
2021-01-01 01:13:56 -08:00
|
|
|
;; Copyright (C) 1998-2021 Free Software Foundation, Inc.
|
2000-09-19 13:40:08 +00:00
|
|
|
|
|
|
|
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
|
|
|
|
;; This file is part of GNU Emacs.
|
|
|
|
|
2008-05-06 03:56:49 +00:00
|
|
|
;; GNU Emacs is free software: you can redistribute it and/or modify
|
2000-09-19 13:40:08 +00:00
|
|
|
;; it under the terms of the GNU General Public License as published by
|
2008-05-06 03:56:49 +00:00
|
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
|
|
;; (at your option) any later version.
|
2000-09-19 13:40:08 +00:00
|
|
|
|
|
|
|
;; GNU Emacs is distributed in the hope that it will be useful,
|
|
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
2008-05-06 03:56:49 +00:00
|
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
2000-09-19 13:40:08 +00:00
|
|
|
;; GNU General Public License for more details.
|
|
|
|
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
2017-09-13 15:52:52 -07:00
|
|
|
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
|
2000-09-19 13:40:08 +00:00
|
|
|
|
|
|
|
;;; Commentary:
|
|
|
|
|
|
|
|
;;; Code:
|
|
|
|
|
|
|
|
(require 'mm-util)
|
|
|
|
(require 'mm-bodies)
|
|
|
|
(require 'mm-encode)
|
|
|
|
(require 'mm-decode)
|
2004-09-04 13:13:48 +00:00
|
|
|
(require 'mml-sec)
|
gnus: replace cl with cl-lib
* lisp/gnus/gnus-agent.el, lisp/gnus/gnus-art.el:
* lisp/gnus/gnus-async.el, lisp/gnus/gnus-cache.el:
* lisp/gnus/gnus-demon.el, lisp/gnus/gnus-group.el:
* lisp/gnus/gnus-icalendar.el, lisp/gnus/gnus-logic.el:
* lisp/gnus/gnus-msg.el, lisp/gnus/gnus-picon.el:
* lisp/gnus/gnus-registry.el, lisp/gnus/gnus-salt.el:
* lisp/gnus/gnus-score.el, lisp/gnus/gnus-spec.el:
* lisp/gnus/gnus-srvr.el, lisp/gnus/gnus-start.el:
* lisp/gnus/gnus-sum.el, lisp/gnus/gnus-topic.el:
* lisp/gnus/gnus-util.el, lisp/gnus/gnus-uu.el, lisp/gnus/gnus-win.el:
* lisp/gnus/mail-source.el, lisp/gnus/mm-decode.el:
* lisp/gnus/mm-encode.el, lisp/gnus/mm-url.el, lisp/gnus/mm-view.el:
* lisp/gnus/mml-smime.el, lisp/gnus/mml.el, lisp/gnus/mml2015.el:
* lisp/gnus/nnbabyl.el, lisp/gnus/nndoc.el, lisp/gnus/nneething.el:
* lisp/gnus/nnheader.el, lisp/gnus/nnimap.el, lisp/gnus/nnmail.el:
* lisp/gnus/nnmaildir.el, lisp/gnus/nnoo.el, lisp/gnus/nnrss.el:
* lisp/gnus/nnspool.el, lisp/gnus/nntp.el, lisp/gnus/nnvirtual.el:
* lisp/gnus/nnweb.el, lisp/gnus/spam.el: Replace cl with cl-lib.
* lisp/gnus/canlock.el, lisp/gnus/gnus-bcklg.el:
* lisp/gnus/gnus-cite.el, lisp/gnus/gnus-cloud.el:
* lisp/gnus/gnus-draft.el, lisp/gnus/gnus-dup.el:
* lisp/gnus/gnus-fun.el, lisp/gnus/gnus-html.el:
* lisp/gnus/gnus-int.el, lisp/gnus/gnus-kill.el, lisp/gnus/gnus-ml.el:
* lisp/gnus/gnus-mlspl.el, lisp/gnus/gnus-range.el:
* lisp/gnus/gnus-undo.el, lisp/gnus/gnus-vm.el:
* lisp/gnus/mm-partial.el, lisp/gnus/mm-uu.el, lisp/gnus/mml1991.el:
* lisp/gnus/nnagent.el, lisp/gnus/nndiary.el, lisp/gnus/nndir.el:
* lisp/gnus/nndraft.el, lisp/gnus/nnfolder.el, lisp/gnus/nngateway.el:
* lisp/gnus/nnmairix.el, lisp/gnus/nnmbox.el, lisp/gnus/nnmh.el:
* lisp/gnus/nnml.el, lisp/gnus/score-mode.el, lisp/gnus/smiley.el:
No need for cl.
2018-03-23 16:13:09 -04:00
|
|
|
(eval-when-compile (require 'cl-lib))
|
2014-03-24 01:56:03 +00:00
|
|
|
(eval-when-compile (require 'url))
|
Change Gnus hash tables into real hash tables
Gnus has used obarrays as makeshift hash tables for groups: group
names are coerced to unibyte and interned in custom obarrays, and
their symbol-value set to whatever value needs to be stored. This
patch replaces those obarrays with actual hash tables.
* lisp/gnus/gnus-util.el (gnus-intern-safe, gnus-create-hash-size):
Remove functions.
(gnus-make-hashtable): Change to return a real hash table.
(gnus-text-property-search): Utility similar to `text-property-any',
but compares on `equal'. Needed because the 'gnus-group text
property is now a string.
* lisp/gnus/gnus.el (gnus-gethash, gnus-gethash-safe, gnus-sethash):
Remove macros.
(gnus-group-list): New variable holding all group names as an
ordered list. Used because `gnus-newsrc-hashtb' used to preserve
`gnus-newsrc-alist' ordering, but now doesn't.
* lisp/gnus/nnmaildir.el (nnmaildir--servers): Change from obarray to
alist.
(nnmaildir--up2-1): Remove function.
* lisp/thingatpt.el (thing-at-point-newsgroup-p): This was making use
of Gnus obarrays, replace with a cond that can handle many different
possibilities.
* lisp/gnus/gnus-bcklg.el (gnus-backlog-articles): Remove
gnus-backlog-hashtb, which wasn't doing anything. Just keep a list
of ident strings in gnus-backlog-articles.
(gnus-backlog-setup): Delete unnecessary function.
(gnus-backlog-enter-article, gnus-backlog-remove-oldest-article,
gnus-backlog-remove-article, gnus-backlog-request-article): Alter
calls accordingly.
* lisp/gnus/gnus-dup.el (gnus-duplicate-list-max-length): Rename from
`gnus-duplicate-list-length', for accuracy.
* lisp/gnus/gnus-start.el (gnus-active-to-gnus-format,
gnus-groups-to-gnus-format, gnus-newsrc-to-gnus-format): Read group
names as strings.
(gnus-gnus-to-quick-newsrc-format): Write `gnus-newsrc-alist' using
the ordering in `gnus-group-list'.
* lisp/gnus/gnus-agent.el:
* lisp/gnus/gnus-async.el:
* lisp/gnus/gnus-cache.el:
* lisp/gnus/gnus-group.el:
* lisp/gnus/gnus-score.el:
* lisp/gnus/gnus-sum.el:
* lisp/gnus/gnus-topic.el:
* lisp/gnus/message.el:
* lisp/gnus/mml.el:
* lisp/gnus/nnagent.el:
* lisp/gnus/nnbabyl.el:
* lisp/gnus/nnvirtual.el:
* lisp/gnus/nnweb.el: In all files, change obarrays to hash-tables,
and swap `gnus-sethash' for `puthash', `gnus-gethash' for `gethash',
`mapatoms' for `maphash', etc.
* test/lisp/gnus/gnus-test-headers.el (gnus-headers-make-dependency-table,
gnus-headers-loop-dependencies): New tests to make sure we're
building `gnus-newsgroup-dependencies' correctly.
2018-04-26 16:26:27 -07:00
|
|
|
(eval-when-compile (require 'gnus-util))
|
2000-09-19 13:40:08 +00:00
|
|
|
|
2008-06-11 03:13:28 +00:00
|
|
|
(autoload 'message-make-message-id "message")
|
Stop message.el from loading about 40 libraries it doesn't always need.
The general approach is to autoload rather than require, and to
require in the specific functions rather than the file. (Bug#5642)
* url/url.el: Move mailcap require earlier in the file.
* gnus/gmm-utils.el: Don't require wid-edit.
(widget-create-child-value, widget-convert, widget-default-get):
Autoload.
* gnus/gnus-util.el: Don't require time-date, netrc.
(message-fetch-field, gnus-group-name-decode): Declare rather than
autoloading.
(gnus-fetch-field): Require message.
(gnus-decode-newsgroups): Require gnus-group.
* gnus/ietf-drums.el: Don't require time-date.
* gnus/message.el: Don't require hashcash, canlock, ecomplete.
Do require mail-utils. Require nnheader only when compiling.
(smtpmail-default-smtp-server): Remove declaration.
(message-send-mail-function): Check smtpmail-default-smtp-server
is bound rather than requiring smtpmail.
(message-auto-save-directory, message-insert-signature): Use
expand-file-name rather than nnheader-concat.
(nnheader-insert-file-contents): Autoload.
(hashcash-wait-async): Declare.
(message-send-mail): Only call gnus-setup-posting-charset if
gnus-group-posting-charset-alist is bound. Require hashcash if needed.
(message-send-mail-with-sendmail): Require sendmail.
(canlock-password, canlock-password-for-verify): Declare.
(message-canlock-password): Require canlock.
(nnheader-get-report): Autoload.
(gnus-setup-posting-charset): Declare.
(message-send-news): Require gnus-msg.
(message-make-references, message-make-in-reply-to): Use mail-header-id
rather than the alias mail-header-message-id.
(ecomplete-add-item, ecomplete-save): Declare.
(message-put-addresses-in-ecomplete): Require ecomplete.
(ecomplete-display-matches): Autoload.
* gnus/mm-decode.el: Don't require mailcap, gnus-util.
(gnus-map-function, gnus-replace-in-string, gnus-read-shell-command)
(message-fetch-field, mailcap-parse-mailcaps, mailcap-mime-info):
Autoload.
(mailcap-mime-extensions): Declare.
* gnus/mm-encode.el: Don't require mailcap.
(mailcap-extension-to-mime): Autoload.
* gnus/mml-sec.el: Don't require password-cache.
* gnus/mml.el (gnus-setup-posting-charset): Declare rather than autoload.
(mailcap-parse-mimetypes, mailcap-mime-types): Declare.
(mml-minibuffer-read-type): Require mailcap.
(mml-preview): Require gnus-msg.
* gnus/mml1991.el: Require password-cache.
(password-cache-expiry): Remove declaration.
* gnus/mml2015.el: Require password-cache.
(password-cache-expiry): Remove declaration.
* gnus/nneething.el (mailcap): Require mailcap.
* gnus/nnheader.el: (declare-function): Add compatibility stub.
(message-remove-header): Declare rather than autoload.
(nnheader-replace-header): Require message.
* gnus/nnimap.el (declare-function): Add compatibility stub.
(netrc-parse, netrc-machine-user-or-password): Declare.
(nnimap-open-connection): Require netrc.
* gnus/nntp.el (declare-function): Add compatibility stub.
(netrc-parse, netrc-machine, netrc-get): Declare.
(nntp-send-authinfo): Require netrc.
* gnus/rfc2047.el: Don't require qp.
(quoted-printable-encode-region, quoted-printable-decode-string):
Autoload.
* gnus/sieve-mode.el: Don't require easymenu.
(easy-menu-add-item): Autoload it.
* gnus/spam-stat.el (time-to-number-of-days): Autoload it.
* password-cache.el (password-cache, password-cache-expiry):
Autoload.
2010-03-18 19:55:37 -07:00
|
|
|
(declare-function gnus-setup-posting-charset "gnus-msg" (group))
|
Merge changes made in Gnus trunk.
nndraft.el (nndraft-request-expire-articles): Use the group name instead if "nndraft".
gnus.texi (Using IMAP): Remove the @acronyms from the headings.
nnregistry.el: Added.
nnimap.el (nnimap-insert-partial-structure): Be way more permissive when interpreting the structures.
GNUS-NEWS: Minor error in GNUS-NEWS - password-cache.el.
nnimap.el (nnimap-request-accept-article): Add \r\n to the lines to make this work with Cyrus.
gnus-registry.el: Don't prompt on load, which makes it impossible to build Gnus.
gnus-gravatar.el: Add gnus-gravatar-properties.
gnus-agent.el, gnus-art.el, gnus-bookmark.el, gnus-dired.el, gnus-group.el,\
gnus-int.el, gnus-msg.el, gnus-registry.el, gnus-score.el, gnus-srvr.el,\
gnus-sum.el, gnus-topic.el, gnus-util.el, gnus.el, mm-decode.el, mm-util.el,\
mm-view.el, mml-smime.el, mml.el, nnmairix.el, nnrss.el, smime.el:\
Introduce gnus-completing-read.
gnus-util.el: Make completing-read function configurable.
gnus-util.el: Add requires and fix history for iswitchb.
webmail.el: Remove netscape/my-deja, since they no longer exist.
gnus.el (gnus-local-domain): Declare variable obsolete.
nnimap.el (nnimap-insert-partial-structure): Get the type from the correct slot, too.
pop3.el (pop3-send-streaming-command, pop3-stream-length): New variable.
nnimap.el (nnimap-open-connection): Revert the auto-network->starttls code.
nnimap.el (nnimap-request-set-mark): Erase the buffer before issuing commands.
nnimap.el (nnimap-split-rule): Mark as obsolete.
gnus-sum.el (gnus-valid-move-group-p): Make sure that `group' is a symbol.
nnimap.el (nnimap-split-incoming-mail): Allow `default' as nnimap-split-methods value.
nnimap.el (nnimap-request-article): Downcase the NILs so that they are nil.
nndoc.el (nndoc-retrieve-groups): New function.
gnus.texi: Fix Gravatar documentation.
2010-09-30 08:39:23 +00:00
|
|
|
(autoload 'gnus-completing-read "gnus-util")
|
2008-06-11 03:13:28 +00:00
|
|
|
(autoload 'message-fetch-field "message")
|
|
|
|
(autoload 'message-mark-active-p "message")
|
|
|
|
(autoload 'message-info "message")
|
|
|
|
(autoload 'fill-flowed-encode "flow-fill")
|
|
|
|
(autoload 'message-posting-charset "message")
|
|
|
|
(autoload 'dnd-get-local-file-name "dnd")
|
2000-09-19 13:40:08 +00:00
|
|
|
|
2007-12-19 02:54:16 +00:00
|
|
|
(autoload 'message-options-set "message")
|
|
|
|
(autoload 'message-narrow-to-head "message")
|
|
|
|
(autoload 'message-in-body-p "message")
|
|
|
|
(autoload 'message-mail-p "message")
|
|
|
|
|
2005-08-31 13:09:02 +00:00
|
|
|
(defvar gnus-article-mime-handles)
|
|
|
|
(defvar gnus-newsrc-hashtb)
|
|
|
|
(defvar message-deletable-headers)
|
|
|
|
(defvar message-options)
|
|
|
|
(defvar message-posting-charset)
|
|
|
|
(defvar message-required-mail-headers)
|
|
|
|
(defvar message-required-news-headers)
|
2006-04-26 21:58:05 +00:00
|
|
|
(defvar dnd-protocol-alist)
|
* smime.el (from):
* rfc2047.el (message-posting-charset):
* qp.el (mm-use-ultra-safe-encoding):
* pop3.el (parse-time-months):
* nnrss.el (mm-text-html-renderer, mm-text-html-washer-alist):
* nnml.el (files):
* nnheader.el (gnus-newsgroup-name, nnheader-file-coding-system)
(jka-compr-compression-info-list, ange-ftp-path-format)
(efs-path-regexp):
* nndiary.el (files):
* mml2015.el (mc-default-scheme, mc-schemes, pgg-default-user-id)
(pgg-errors-buffer, pgg-output-buffer, epg-user-id-alist)
(epg-digest-algorithm-alist, inhibit-redisplay)
(password-cache-expiry):
* mml1991.el (pgg-default-user-id, pgg-errors-buffer)
(pgg-output-buffer, password-cache-expiry):
* mml.el (mml-dnd-protocol-alist, ange-ftp-name-format)
(efs-path-regexp):
* mml-smime.el (epg-user-id-alist, epg-digest-algorithm-alist)
(inhibit-redisplay):
* mm-uu.el (file-name, start-point, end-point, entry)
(gnus-newsgroup-name, gnus-newsgroup-charset):
* mm-util.el (mm-mime-mule-charset-alist, latin-unity-coding-systems)
(latin-unity-ucs-list):
* mm-bodies.el (mm-uu-yenc-decode-function, mm-uu-decode-function)
(mm-uu-binhex-decode-function):
* message.el (gnus-message-group-art, gnus-list-identifiers, )
(rmail-enable-mime-composing, gnus-local-organization)
(gnus-post-method, gnus-select-method, gnus-active-hashtb)
(gnus-read-active-file, facemenu-add-face-function)
(facemenu-remove-face-function, gnus-article-decoded-p)
(tool-bar-mode):
* mail-source.el (display-time-mail-function):
* gnus-util.el (nnmail-pathname-coding-system)
(nnmail-active-file-coding-system, gnus-emphasize-whitespace-regexp)
(gnus-original-article-buffer, gnus-user-agent)
(rmail-default-rmail-file, mm-text-coding-system, tool-bar-mode)
(xemacs-codename, sxemacs-codename, emacs-program-version):
* gnus-sum.el (tool-bar-mode, gnus-tmp-header, number):
* gnus-start.el (gnus-agent-covered-methods)
(gnus-agent-file-loading-local, gnus-agent-file-loading-cache)
(gnus-current-headers, gnus-thread-indent-array, gnus-newsgroup-name)
(gnus-newsgroup-headers, gnus-group-list-mode)
(gnus-group-mark-positions, gnus-newsgroup-data)
(gnus-newsgroup-unreads, nnoo-state-alist)
(gnus-current-select-method, mail-sources)
(nnmail-scan-directory-mail-source-once, nnmail-split-history)
(nnmail-spool-file, gnus-cache-active-hashtb):
* gnus-mh.el (mh-lib-progs):
* gnus-ems.el (gnus-tmp-unread, gnus-tmp-replied)
(gnus-tmp-score-char, gnus-tmp-indentation, gnus-tmp-opening-bracket)
(gnus-tmp-lines, gnus-tmp-name, gnus-tmp-closing-bracket)
(gnus-tmp-subject-or-nil, gnus-check-before-posting, gnus-mouse-face)
(gnus-group-buffer):
* gnus-cite.el (font-lock-defaults-computed, font-lock-keywords)
(font-lock-set-defaults):
* gnus-art.el (tool-bar-map, w3m-minor-mode-map)
(gnus-face-properties-alist, charset, gnus-summary-article-menu)
(gnus-summary-post-menu, total-parts, type, condition, length):
* gnus-agent.el (gnus-agent-read-agentview):
* flow-fill.el (show-trailing-whitespace):
* gnus-group.el (tool-bar-mode, nnrss-group-alist): Remove unnecessary
eval-and-compile wrappers for byte compiler pacifiers.
* mm-view.el (mm-inline-image-xemacs): Only do something for XEmacs.
(mm-display-inline-fontify): Check for featurep 'xemacs not
extent-list.
* mm-decode.el (mm-display-external): Check for featurep 'xemacs not
itimer-list.
(mm-create-image-xemacs): Only do something for XEmacs.
(mm-image-fit-p): Check for featurep 'xemacs not glyph-width.
* mm-util.el (mm-find-buffer-file-coding-system): Add check for XEmacs.
* gnus-registry.el (gnus-adaptive-word-syntax-table):
* gnus-fun.el (gnus-face-properties-alist): Pacify byte compiler.
* textmodes/reftex-dcr.el (reftex-start-itimer-once): Add check
for XEmacs.
* calc/calc-menu.el (calc-mode-map): Pacify byte compiler.
* doc-view.el (doc-view-resolution): Add missing :group.
2007-11-16 16:50:35 +00:00
|
|
|
(defvar mml-dnd-protocol-alist)
|
2005-08-31 13:09:02 +00:00
|
|
|
|
2004-09-04 13:13:48 +00:00
|
|
|
(defcustom mml-content-type-parameters
|
|
|
|
'(name access-type expiration size permission format)
|
Remove obsolete leading * from defcustom, defface doc strings.
* lisp/cedet/ede/linux.el, lisp/cedet/ede/project-am.el:
* lisp/cedet/ede/simple.el, lisp/cedet/semantic/bovine/c.el:
* lisp/cedet/semantic/complete.el, lisp/cedet/semantic/db.el:
* lisp/cedet/semantic/decorate/include.el:
* lisp/cedet/semantic/decorate/mode.el, lisp/cedet/semantic/format.el:
* lisp/cedet/semantic/ia.el, lisp/cedet/semantic/idle.el:
* lisp/cedet/semantic/imenu.el, lisp/cedet/semantic/lex-spp.el:
* lisp/cedet/semantic/mru-bookmark.el, lisp/cedet/semantic/sb.el:
* lisp/cedet/srecode/fields.el, lisp/ecomplete.el:
* lisp/gnus/gnus-agent.el, lisp/gnus/gnus-art.el:
* lisp/gnus/gnus-async.el, lisp/gnus/gnus-cache.el:
* lisp/gnus/gnus-cite.el, lisp/gnus/gnus-delay.el:
* lisp/gnus/gnus-diary.el, lisp/gnus/gnus-dup.el:
* lisp/gnus/gnus-fun.el, lisp/gnus/gnus-group.el:
* lisp/gnus/gnus-kill.el, lisp/gnus/gnus-msg.el:
* lisp/gnus/gnus-picon.el, lisp/gnus/gnus-salt.el:
* lisp/gnus/gnus-score.el, lisp/gnus/gnus-start.el:
* lisp/gnus/gnus-sum.el, lisp/gnus/gnus-topic.el:
* lisp/gnus/gnus-util.el, lisp/gnus/gnus-uu.el, lisp/gnus/gnus-win.el:
* lisp/gnus/gnus.el, lisp/gnus/mail-source.el, lisp/gnus/message.el:
* lisp/gnus/mm-url.el, lisp/gnus/mm-uu.el, lisp/gnus/mml.el:
* lisp/gnus/nndiary.el, lisp/gnus/nnir.el, lisp/gnus/nnmail.el:
* lisp/gnus/smiley.el, lisp/gnus/smime.el, lisp/mail/mail-extr.el:
* lisp/mh-e/mh-e.el, lisp/net/mailcap.el, lisp/net/pop3.el:
* lisp/net/starttls.el, lisp/progmodes/cc-vars.el:
* lisp/progmodes/cperl-mode.el, test/manual/cedet/tests/test.el:
Remove obsolete leading * from defcustom, defface doc strings.
2016-06-09 20:13:12 -04:00
|
|
|
"A list of acceptable parameters in MML tag.
|
2004-09-04 13:13:48 +00:00
|
|
|
These parameters are generated in Content-Type header if exists."
|
2005-02-09 15:50:47 +00:00
|
|
|
:version "22.1"
|
2004-09-04 13:13:48 +00:00
|
|
|
:type '(repeat (symbol :tag "Parameter"))
|
|
|
|
:group 'message)
|
|
|
|
|
|
|
|
(defcustom mml-content-disposition-parameters
|
|
|
|
'(filename creation-date modification-date read-date)
|
Remove obsolete leading * from defcustom, defface doc strings.
* lisp/cedet/ede/linux.el, lisp/cedet/ede/project-am.el:
* lisp/cedet/ede/simple.el, lisp/cedet/semantic/bovine/c.el:
* lisp/cedet/semantic/complete.el, lisp/cedet/semantic/db.el:
* lisp/cedet/semantic/decorate/include.el:
* lisp/cedet/semantic/decorate/mode.el, lisp/cedet/semantic/format.el:
* lisp/cedet/semantic/ia.el, lisp/cedet/semantic/idle.el:
* lisp/cedet/semantic/imenu.el, lisp/cedet/semantic/lex-spp.el:
* lisp/cedet/semantic/mru-bookmark.el, lisp/cedet/semantic/sb.el:
* lisp/cedet/srecode/fields.el, lisp/ecomplete.el:
* lisp/gnus/gnus-agent.el, lisp/gnus/gnus-art.el:
* lisp/gnus/gnus-async.el, lisp/gnus/gnus-cache.el:
* lisp/gnus/gnus-cite.el, lisp/gnus/gnus-delay.el:
* lisp/gnus/gnus-diary.el, lisp/gnus/gnus-dup.el:
* lisp/gnus/gnus-fun.el, lisp/gnus/gnus-group.el:
* lisp/gnus/gnus-kill.el, lisp/gnus/gnus-msg.el:
* lisp/gnus/gnus-picon.el, lisp/gnus/gnus-salt.el:
* lisp/gnus/gnus-score.el, lisp/gnus/gnus-start.el:
* lisp/gnus/gnus-sum.el, lisp/gnus/gnus-topic.el:
* lisp/gnus/gnus-util.el, lisp/gnus/gnus-uu.el, lisp/gnus/gnus-win.el:
* lisp/gnus/gnus.el, lisp/gnus/mail-source.el, lisp/gnus/message.el:
* lisp/gnus/mm-url.el, lisp/gnus/mm-uu.el, lisp/gnus/mml.el:
* lisp/gnus/nndiary.el, lisp/gnus/nnir.el, lisp/gnus/nnmail.el:
* lisp/gnus/smiley.el, lisp/gnus/smime.el, lisp/mail/mail-extr.el:
* lisp/mh-e/mh-e.el, lisp/net/mailcap.el, lisp/net/pop3.el:
* lisp/net/starttls.el, lisp/progmodes/cc-vars.el:
* lisp/progmodes/cperl-mode.el, test/manual/cedet/tests/test.el:
Remove obsolete leading * from defcustom, defface doc strings.
2016-06-09 20:13:12 -04:00
|
|
|
"A list of acceptable parameters in MML tag.
|
2004-09-04 13:13:48 +00:00
|
|
|
These parameters are generated in Content-Disposition header if exists."
|
2005-02-09 15:50:47 +00:00
|
|
|
:version "22.1"
|
2004-09-04 13:13:48 +00:00
|
|
|
:type '(repeat (symbol :tag "Parameter"))
|
|
|
|
:group 'message)
|
|
|
|
|
2007-10-28 09:18:39 +00:00
|
|
|
(defcustom mml-content-disposition-alist
|
|
|
|
'((text (rtf . "attachment") (t . "inline"))
|
|
|
|
(t . "attachment"))
|
|
|
|
"Alist of MIME types or regexps matching file names and default dispositions.
|
|
|
|
Each element should be one of the following three forms:
|
|
|
|
|
|
|
|
(REGEXP . DISPOSITION)
|
|
|
|
(SUPERTYPE (SUBTYPE . DISPOSITION) (SUBTYPE . DISPOSITION)...)
|
|
|
|
(TYPE . DISPOSITION)
|
|
|
|
|
|
|
|
Where REGEXP is a string which matches the file name (if any) of an
|
|
|
|
attachment, SUPERTYPE, SUBTYPE and TYPE should be symbols which are a
|
|
|
|
MIME supertype (e.g., text), a MIME subtype (e.g., plain) and a MIME
|
|
|
|
type (e.g., text/plain) respectively, and DISPOSITION should be either
|
|
|
|
the string \"attachment\" or the string \"inline\". The value t for
|
|
|
|
SUPERTYPE, SUBTYPE or TYPE matches any of those types. The first
|
|
|
|
match found will be used."
|
2008-02-29 04:03:49 +00:00
|
|
|
:version "23.1" ;; No Gnus
|
2007-10-28 09:18:39 +00:00
|
|
|
:type (let ((dispositions '(radio :format "DISPOSITION: %v"
|
|
|
|
:value "attachment"
|
|
|
|
(const :format "%v " "attachment")
|
|
|
|
(const :format "%v\n" "inline"))))
|
|
|
|
`(repeat
|
|
|
|
:offset 0
|
|
|
|
(choice :format "%[Value Menu%]%v"
|
|
|
|
(cons :tag "(REGEXP . DISPOSITION)" :extra-offset 4
|
|
|
|
(regexp :tag "REGEXP" :value ".*")
|
|
|
|
,dispositions)
|
|
|
|
(cons :tag "(SUPERTYPE (SUBTYPE . DISPOSITION)...)"
|
|
|
|
:indent 0
|
|
|
|
(symbol :tag " SUPERTYPE" :value text)
|
|
|
|
(repeat :format "%v%i\n" :offset 0 :extra-offset 4
|
|
|
|
(cons :format "%v" :extra-offset 5
|
|
|
|
(symbol :tag "SUBTYPE" :value t)
|
|
|
|
,dispositions)))
|
|
|
|
(cons :tag "(TYPE . DISPOSITION)" :extra-offset 4
|
|
|
|
(symbol :tag "TYPE" :value t)
|
|
|
|
,dispositions))))
|
|
|
|
:group 'message)
|
|
|
|
|
2010-08-31 00:11:37 +00:00
|
|
|
(defcustom mml-insert-mime-headers-always t
|
2004-09-04 13:13:48 +00:00
|
|
|
"If non-nil, always put Content-Type: text/plain at top of empty parts.
|
|
|
|
It is necessary to work against a bug in certain clients."
|
2010-08-31 04:21:18 +00:00
|
|
|
:version "24.1"
|
2004-09-04 13:13:48 +00:00
|
|
|
:type 'boolean
|
|
|
|
:group 'message)
|
|
|
|
|
2010-10-16 01:55:08 +00:00
|
|
|
(defcustom mml-enable-flowed t
|
|
|
|
"If non-nil, enable format=flowed usage when encoding a message.
|
|
|
|
This is only performed when filling on text/plain with hard
|
|
|
|
newlines in the text."
|
|
|
|
:version "24.1"
|
|
|
|
:type 'boolean
|
|
|
|
:group 'message)
|
|
|
|
|
2004-09-04 13:13:48 +00:00
|
|
|
(defvar mml-tweak-type-alist nil
|
|
|
|
"A list of (TYPE . FUNCTION) for tweaking MML parts.
|
|
|
|
TYPE is a string containing a regexp to match the MIME type. FUNCTION
|
|
|
|
is a Lisp function which is called with the MML handle to tweak the
|
|
|
|
part. This variable is used only when no TWEAK parameter exists in
|
|
|
|
the MML handle.")
|
|
|
|
|
|
|
|
(defvar mml-tweak-function-alist nil
|
|
|
|
"A list of (NAME . FUNCTION) for tweaking MML parts.
|
|
|
|
NAME is a string containing the name of the TWEAK parameter in the MML
|
|
|
|
handle. FUNCTION is a Lisp function which is called with the MML
|
|
|
|
handle to tweak the part.")
|
|
|
|
|
|
|
|
(defvar mml-tweak-sexp-alist
|
|
|
|
'((mml-externalize-attachments . mml-tweak-externalize-attachments))
|
|
|
|
"A list of (SEXP . FUNCTION) for tweaking MML parts.
|
|
|
|
SEXP is an s-expression. If the evaluation of SEXP is non-nil, FUNCTION
|
|
|
|
is called. FUNCTION is a Lisp function which is called with the MML
|
|
|
|
handle to tweak the part.")
|
|
|
|
|
|
|
|
(defvar mml-externalize-attachments nil
|
Leading "*" in the doc of defvars is long obsolete.
* lisp/plstore.el (plstore-encrypt-to):
* lisp/cedet/semantic/lex-spp.el
(semantic-lex-spp-macro-max-length-to-save):
* lisp/cedet/semantic/symref.el (semantic-symref-tool):
* lisp/cedet/semantic/bovine/el.el
(semantic-elisp-store-documentation-in-tag):
* lisp/cedet/semantic/wisent/comp.el (wisent-verbose-flag)
(wisent-expected-conflicts):
* lisp/cedet/semantic/wisent/wisent.el (wisent-parse-verbose-flag):
* lisp/gnus/gnus-agent.el (gnus-category-menu-hook):
* lisp/gnus/gnus-group.el (gnus-group-listing-limit):
* lisp/gnus/gnus-srvr.el (gnus-server-menu-hook)
(gnus-browse-menu-hook):
* lisp/gnus/message.el (message-shoot-gnksa-feet):
* lisp/gnus/mm-decode.el (mm-path-name-rewrite-functions):
* lisp/gnus/mm-util.el (mm-extra-numeric-entities):
* lisp/gnus/mm-view.el (mm-w3m-standalone-supports-m17n-p):
* lisp/gnus/mml.el (mml-generate-multipart-alist):
* lisp/gnus/nndraft.el (nndraft-required-headers):
* lisp/gnus/nnheader.el (nnheader-max-head-length)
(nnheader-head-chop-length, nnheader-file-name-translation-alist)
(nnheader-directory-separator-character)
(nnheader-pathname-coding-system):
* lisp/gnus/nnmail.el (nnmail-pathname-coding-system)
(nnmail-active-file-coding-system):
* lisp/gnus/nnrss.el (nnrss-file-coding-system):
* lisp/gnus/nntp.el (nntp-record-commands):
* lisp/gnus/score-mode.el (gnus-score-edit-done-hook)
(gnus-score-mode-hook, gnus-score-menu-hook):
* lisp/mail/rfc2047.el (rfc2047-header-encoding-alist)
(rfc2047-allow-irregular-q-encoded-words)
(rfc2047-allow-incomplete-encoded-text):
* lisp/mh-e/mh-alias.el (mh-alias-system-aliases):
* lisp/mh-e/mh-e.el (mh-mail-header-separator, mh-x-mailer-string):
* lisp/mh-e/mh-scan.el (mh-scan-format-mh, mh-scan-format-nmh):
* lisp/net/pop3.el (pop3-password):
* lisp/play/animate.el (animate-n-steps):
* lisp/progmodes/cc-vars.el (c-old-style-variable-behavior):
Convert from defvar with leading * to defcustom.
; * lisp/cedet/semantic/lex.el: Comments.
* lisp/emulation/viper-init.el (viper-heading-end):
* lisp/gnus/mm-url.el (mm-url-html-entities):
* lisp/gnus/nnmaildir.el (nnmaildir-article-file-name):
* lisp/mh-e/mh-e.el (mh-invisible-header-fields-compiled):
* lisp/net/tramp-adb.el (tramp-adb-method): Remove leading * from doc.
* lisp/gnus/messcompat.el: Mark (pointless) file not for compilation.
(message-from-style, message-interactive, message-indentation-spaces)
(message-signature, message-signature-file):
Remove settings that match the defaults.
(message-setup-hook, message-mode-hook, message-default-headers)
(message-send-hook, message-send-mail-function):
Just use setq rather than redefining.
* lisp/gnus/nnrss.el (nnrss):
* lisp/mail/rfc2047.el (rfc2047):
* lisp/play/animate.el (animate): New custom groups.
2016-06-10 00:23:33 -04:00
|
|
|
"If non-nil, local-file attachments are generated as external parts.")
|
2004-09-04 13:13:48 +00:00
|
|
|
|
Leading "*" in the doc of defvars is long obsolete.
* lisp/plstore.el (plstore-encrypt-to):
* lisp/cedet/semantic/lex-spp.el
(semantic-lex-spp-macro-max-length-to-save):
* lisp/cedet/semantic/symref.el (semantic-symref-tool):
* lisp/cedet/semantic/bovine/el.el
(semantic-elisp-store-documentation-in-tag):
* lisp/cedet/semantic/wisent/comp.el (wisent-verbose-flag)
(wisent-expected-conflicts):
* lisp/cedet/semantic/wisent/wisent.el (wisent-parse-verbose-flag):
* lisp/gnus/gnus-agent.el (gnus-category-menu-hook):
* lisp/gnus/gnus-group.el (gnus-group-listing-limit):
* lisp/gnus/gnus-srvr.el (gnus-server-menu-hook)
(gnus-browse-menu-hook):
* lisp/gnus/message.el (message-shoot-gnksa-feet):
* lisp/gnus/mm-decode.el (mm-path-name-rewrite-functions):
* lisp/gnus/mm-util.el (mm-extra-numeric-entities):
* lisp/gnus/mm-view.el (mm-w3m-standalone-supports-m17n-p):
* lisp/gnus/mml.el (mml-generate-multipart-alist):
* lisp/gnus/nndraft.el (nndraft-required-headers):
* lisp/gnus/nnheader.el (nnheader-max-head-length)
(nnheader-head-chop-length, nnheader-file-name-translation-alist)
(nnheader-directory-separator-character)
(nnheader-pathname-coding-system):
* lisp/gnus/nnmail.el (nnmail-pathname-coding-system)
(nnmail-active-file-coding-system):
* lisp/gnus/nnrss.el (nnrss-file-coding-system):
* lisp/gnus/nntp.el (nntp-record-commands):
* lisp/gnus/score-mode.el (gnus-score-edit-done-hook)
(gnus-score-mode-hook, gnus-score-menu-hook):
* lisp/mail/rfc2047.el (rfc2047-header-encoding-alist)
(rfc2047-allow-irregular-q-encoded-words)
(rfc2047-allow-incomplete-encoded-text):
* lisp/mh-e/mh-alias.el (mh-alias-system-aliases):
* lisp/mh-e/mh-e.el (mh-mail-header-separator, mh-x-mailer-string):
* lisp/mh-e/mh-scan.el (mh-scan-format-mh, mh-scan-format-nmh):
* lisp/net/pop3.el (pop3-password):
* lisp/play/animate.el (animate-n-steps):
* lisp/progmodes/cc-vars.el (c-old-style-variable-behavior):
Convert from defvar with leading * to defcustom.
; * lisp/cedet/semantic/lex.el: Comments.
* lisp/emulation/viper-init.el (viper-heading-end):
* lisp/gnus/mm-url.el (mm-url-html-entities):
* lisp/gnus/nnmaildir.el (nnmaildir-article-file-name):
* lisp/mh-e/mh-e.el (mh-invisible-header-fields-compiled):
* lisp/net/tramp-adb.el (tramp-adb-method): Remove leading * from doc.
* lisp/gnus/messcompat.el: Mark (pointless) file not for compilation.
(message-from-style, message-interactive, message-indentation-spaces)
(message-signature, message-signature-file):
Remove settings that match the defaults.
(message-setup-hook, message-mode-hook, message-default-headers)
(message-send-hook, message-send-mail-function):
Just use setq rather than redefining.
* lisp/gnus/nnrss.el (nnrss):
* lisp/mail/rfc2047.el (rfc2047):
* lisp/play/animate.el (animate): New custom groups.
2016-06-10 00:23:33 -04:00
|
|
|
(defcustom mml-generate-multipart-alist nil
|
|
|
|
"Alist of multipart generation functions.
|
2000-09-19 13:40:08 +00:00
|
|
|
Each entry has the form (NAME . FUNCTION), where
|
2003-02-04 13:24:35 +00:00
|
|
|
NAME is a string containing the name of the part (without the
|
2000-09-19 13:40:08 +00:00
|
|
|
leading \"/multipart/\"),
|
|
|
|
FUNCTION is a Lisp function which is called to generate the part.
|
|
|
|
|
|
|
|
The Lisp function has to supply the appropriate MIME headers and the
|
Leading "*" in the doc of defvars is long obsolete.
* lisp/plstore.el (plstore-encrypt-to):
* lisp/cedet/semantic/lex-spp.el
(semantic-lex-spp-macro-max-length-to-save):
* lisp/cedet/semantic/symref.el (semantic-symref-tool):
* lisp/cedet/semantic/bovine/el.el
(semantic-elisp-store-documentation-in-tag):
* lisp/cedet/semantic/wisent/comp.el (wisent-verbose-flag)
(wisent-expected-conflicts):
* lisp/cedet/semantic/wisent/wisent.el (wisent-parse-verbose-flag):
* lisp/gnus/gnus-agent.el (gnus-category-menu-hook):
* lisp/gnus/gnus-group.el (gnus-group-listing-limit):
* lisp/gnus/gnus-srvr.el (gnus-server-menu-hook)
(gnus-browse-menu-hook):
* lisp/gnus/message.el (message-shoot-gnksa-feet):
* lisp/gnus/mm-decode.el (mm-path-name-rewrite-functions):
* lisp/gnus/mm-util.el (mm-extra-numeric-entities):
* lisp/gnus/mm-view.el (mm-w3m-standalone-supports-m17n-p):
* lisp/gnus/mml.el (mml-generate-multipart-alist):
* lisp/gnus/nndraft.el (nndraft-required-headers):
* lisp/gnus/nnheader.el (nnheader-max-head-length)
(nnheader-head-chop-length, nnheader-file-name-translation-alist)
(nnheader-directory-separator-character)
(nnheader-pathname-coding-system):
* lisp/gnus/nnmail.el (nnmail-pathname-coding-system)
(nnmail-active-file-coding-system):
* lisp/gnus/nnrss.el (nnrss-file-coding-system):
* lisp/gnus/nntp.el (nntp-record-commands):
* lisp/gnus/score-mode.el (gnus-score-edit-done-hook)
(gnus-score-mode-hook, gnus-score-menu-hook):
* lisp/mail/rfc2047.el (rfc2047-header-encoding-alist)
(rfc2047-allow-irregular-q-encoded-words)
(rfc2047-allow-incomplete-encoded-text):
* lisp/mh-e/mh-alias.el (mh-alias-system-aliases):
* lisp/mh-e/mh-e.el (mh-mail-header-separator, mh-x-mailer-string):
* lisp/mh-e/mh-scan.el (mh-scan-format-mh, mh-scan-format-nmh):
* lisp/net/pop3.el (pop3-password):
* lisp/play/animate.el (animate-n-steps):
* lisp/progmodes/cc-vars.el (c-old-style-variable-behavior):
Convert from defvar with leading * to defcustom.
; * lisp/cedet/semantic/lex.el: Comments.
* lisp/emulation/viper-init.el (viper-heading-end):
* lisp/gnus/mm-url.el (mm-url-html-entities):
* lisp/gnus/nnmaildir.el (nnmaildir-article-file-name):
* lisp/mh-e/mh-e.el (mh-invisible-header-fields-compiled):
* lisp/net/tramp-adb.el (tramp-adb-method): Remove leading * from doc.
* lisp/gnus/messcompat.el: Mark (pointless) file not for compilation.
(message-from-style, message-interactive, message-indentation-spaces)
(message-signature, message-signature-file):
Remove settings that match the defaults.
(message-setup-hook, message-mode-hook, message-default-headers)
(message-send-hook, message-send-mail-function):
Just use setq rather than redefining.
* lisp/gnus/nnrss.el (nnrss):
* lisp/mail/rfc2047.el (rfc2047):
* lisp/play/animate.el (animate): New custom groups.
2016-06-10 00:23:33 -04:00
|
|
|
contents of this part."
|
|
|
|
:group 'message
|
|
|
|
:type '(alist :key-type string :value-type function))
|
2000-09-19 13:40:08 +00:00
|
|
|
|
|
|
|
(defvar mml-syntax-table
|
|
|
|
(let ((table (copy-syntax-table emacs-lisp-mode-syntax-table)))
|
|
|
|
(modify-syntax-entry ?\\ "/" table)
|
|
|
|
(modify-syntax-entry ?< "(" table)
|
|
|
|
(modify-syntax-entry ?> ")" table)
|
|
|
|
(modify-syntax-entry ?@ "w" table)
|
|
|
|
(modify-syntax-entry ?/ "w" table)
|
|
|
|
(modify-syntax-entry ?= " " table)
|
|
|
|
(modify-syntax-entry ?* " " table)
|
|
|
|
(modify-syntax-entry ?\; " " table)
|
|
|
|
(modify-syntax-entry ?\' " " table)
|
|
|
|
table))
|
|
|
|
|
|
|
|
(defvar mml-boundary-function 'mml-make-boundary
|
|
|
|
"A function called to suggest a boundary.
|
|
|
|
The function may be called several times, and should try to make a new
|
|
|
|
suggestion each time. The function is called with one parameter,
|
|
|
|
which is a number that says how many times the function has been
|
|
|
|
called for this message.")
|
|
|
|
|
|
|
|
(defvar mml-confirmation-set nil
|
|
|
|
"A list of symbols, each of which disables some warning.
|
|
|
|
`unknown-encoding': always send messages contain characters with
|
|
|
|
unknown encoding; `use-ascii': always use ASCII for those characters
|
|
|
|
with unknown encoding; `multipart': always send messages with more than
|
|
|
|
one charsets.")
|
|
|
|
|
2005-07-31 00:12:23 +00:00
|
|
|
(defvar mml-generate-default-type "text/plain"
|
|
|
|
"Content type by which the Content-Type header can be omitted.
|
|
|
|
The Content-Type header will not be put in the MIME part if the type
|
|
|
|
equals the value and there's no parameter (e.g. charset, format, etc.)
|
|
|
|
and `mml-insert-mime-headers-always' is nil. The value will be bound
|
|
|
|
to \"message/rfc822\" when encoding an article to be forwarded as a MIME
|
|
|
|
part. This is for the internal use, you should never modify the value.")
|
2000-09-19 13:40:08 +00:00
|
|
|
|
|
|
|
(defvar mml-buffer-list nil)
|
|
|
|
|
2003-02-04 13:24:35 +00:00
|
|
|
(defun mml-generate-new-buffer (name)
|
2000-09-19 13:40:08 +00:00
|
|
|
(let ((buf (generate-new-buffer name)))
|
|
|
|
(push buf mml-buffer-list)
|
|
|
|
buf))
|
|
|
|
|
|
|
|
(defun mml-destroy-buffers ()
|
|
|
|
(let (kill-buffer-hook)
|
2021-01-30 00:35:24 -05:00
|
|
|
(mapc #'kill-buffer (prog1 mml-buffer-list
|
|
|
|
(setq mml-buffer-list nil)))))
|
2000-09-19 13:40:08 +00:00
|
|
|
|
|
|
|
(defun mml-parse ()
|
|
|
|
"Parse the current buffer as an MML document."
|
2004-09-04 13:13:48 +00:00
|
|
|
(save-excursion
|
|
|
|
(goto-char (point-min))
|
2007-10-28 09:18:39 +00:00
|
|
|
(with-syntax-table mml-syntax-table
|
|
|
|
(mml-parse-1))))
|
2000-09-19 13:40:08 +00:00
|
|
|
|
|
|
|
(defun mml-parse-1 ()
|
|
|
|
"Parse the current buffer as an MML document."
|
|
|
|
(let (struct tag point contents charsets warn use-ascii no-markup-p raw)
|
|
|
|
(while (and (not (eobp))
|
|
|
|
(not (looking-at "<#/multipart")))
|
|
|
|
(cond
|
2004-09-04 13:13:48 +00:00
|
|
|
((looking-at "<#secure")
|
|
|
|
;; The secure part is essentially a meta-meta tag, which
|
|
|
|
;; expands to either a part tag if there are no other parts in
|
|
|
|
;; the document or a multipart tag if there are other parts
|
|
|
|
;; included in the message
|
|
|
|
(let* (secure-mode
|
|
|
|
(taginfo (mml-read-tag))
|
2007-10-28 09:18:39 +00:00
|
|
|
(keyfile (cdr (assq 'keyfile taginfo)))
|
2010-07-21 14:56:18 +09:00
|
|
|
(certfiles (delq nil (mapcar (lambda (tag)
|
|
|
|
(if (eq (car-safe tag) 'certfile)
|
|
|
|
(cdr tag)))
|
|
|
|
taginfo)))
|
2004-09-04 13:13:48 +00:00
|
|
|
(recipients (cdr (assq 'recipients taginfo)))
|
|
|
|
(sender (cdr (assq 'sender taginfo)))
|
|
|
|
(location (cdr (assq 'tag-location taginfo)))
|
|
|
|
(mode (cdr (assq 'mode taginfo)))
|
|
|
|
(method (cdr (assq 'method taginfo)))
|
|
|
|
tags)
|
|
|
|
(save-excursion
|
* lisp/gnus: Misc simplifications found during conversion to lexical
* lisp/gnus/nnoo.el (noo-import-1, nnoo-define-skeleton-1): Use `dolist`.
(noo-map-functions, nnoo-define-basics): Directly emit the code rather than
going through an intermediate function; this also avoids the use of `eval`.
(noo-map-functions-1, nnoo-define-basics-1): Delete functions,
folded into their corresponding macro.
* lisp/gnus/gmm-utils.el (gmm-tool-bar-from-list): Demote `eval` to
`symbol-value`.
* lisp/gnus/gnus-art.el (gnus-button-handle-describe-key): Avoid `eval`
since `kbd` is a function nowadays.
(gnus-treat-part-number): Rename from `part-number`.
(gnus-treat-total-parts): Rename from `total-parts`.
(gnus-treat-article, gnus-treat-predicate): Adjust accordingly.
* lisp/gnus/gnus-cache.el (gnus-agent-load-alist): Use `declare-function`.
* lisp/gnus/gnus-group.el (gnus-cache-active-hashtb): Use `defvar`.
(gnus-group-iterate): Make it a normal function since lexical scoping
avoids the risk of name capture anyway.
(gnus-group-delete-articles): Actually use the `oldp` arg.
* lisp/gnus/gnus-html.el (gnus-html-wash-images): Fix debug message so
it's emitted after the `url` var it prints is actually initialized.
And avoid `setq` while we're at it.
* lisp/gnus/gnus-msg.el (gnus-group-mail, gnus-group-news)
(gnus-summary-mail-other-window, gnus-summary-news-other-window):
Merge `let`s using `let*`.
* lisp/gnus/gnus-spec.el (gnus-update-format-specifications):
Tighten the scope of `buffer`, and tighten a regexp.
(gnus-parse-simple-format): Reduce code duplication.
* lisp/gnus/gnus-start.el (gnus-child-mode): Don't `defvar` it since we
never use that variable and accordingly don't define it as a minor mode.
* lisp/gnus/gnus-util.el (gnus-byte-compile): Simplify so it obeys
`gnus-use-byte-compile` not just on the first call.
(iswitchb-minibuffer-setup): Declare.
* lisp/gnus/mail-source.el (mail-source-bind-1)
(mail-source-bind-common-1): Use `mapcar`.
(mail-source-set-common-1): Use `dolist`.
(display-time-event-handler): Declare.
* lisp/gnus/mml-smime.el (mml-smime-epg-verify): Reduce code duplication.
* lisp/gnus/mml.el (mml-parse-1): Reduce code duplication.
* lisp/gnus/mml2015.el (mml2015-epg-verify): Reduce code duplication.
* lisp/gnus/nnmail.el (nnmail-get-split-group): Tighten regexp.
(nnmail-split-it): Reduce code duplication.
* lisp/gnus/nnweb.el (nnweb-request-article): Avoid `setq`.
* lisp/gnus/spam.el (BBDB): Use the `noerror` arg of `require`, and
define all the functions for BBDB regardless if the require succeeded.
(spam-exists-in-BBDB-p): Don't inline, not worth it.
2021-01-30 16:45:25 -05:00
|
|
|
(setq secure-mode
|
|
|
|
(if (re-search-forward
|
|
|
|
"<#/?\\(multipart\\|part\\|external\\|mml\\)."
|
|
|
|
nil t)
|
|
|
|
"multipart"
|
|
|
|
"part")))
|
2004-09-04 13:13:48 +00:00
|
|
|
(save-excursion
|
|
|
|
(goto-char location)
|
|
|
|
(re-search-forward "<#secure[^\n]*>\n"))
|
|
|
|
(delete-region (match-beginning 0) (match-end 0))
|
* lisp/gnus: Misc simplifications found during conversion to lexical
* lisp/gnus/nnoo.el (noo-import-1, nnoo-define-skeleton-1): Use `dolist`.
(noo-map-functions, nnoo-define-basics): Directly emit the code rather than
going through an intermediate function; this also avoids the use of `eval`.
(noo-map-functions-1, nnoo-define-basics-1): Delete functions,
folded into their corresponding macro.
* lisp/gnus/gmm-utils.el (gmm-tool-bar-from-list): Demote `eval` to
`symbol-value`.
* lisp/gnus/gnus-art.el (gnus-button-handle-describe-key): Avoid `eval`
since `kbd` is a function nowadays.
(gnus-treat-part-number): Rename from `part-number`.
(gnus-treat-total-parts): Rename from `total-parts`.
(gnus-treat-article, gnus-treat-predicate): Adjust accordingly.
* lisp/gnus/gnus-cache.el (gnus-agent-load-alist): Use `declare-function`.
* lisp/gnus/gnus-group.el (gnus-cache-active-hashtb): Use `defvar`.
(gnus-group-iterate): Make it a normal function since lexical scoping
avoids the risk of name capture anyway.
(gnus-group-delete-articles): Actually use the `oldp` arg.
* lisp/gnus/gnus-html.el (gnus-html-wash-images): Fix debug message so
it's emitted after the `url` var it prints is actually initialized.
And avoid `setq` while we're at it.
* lisp/gnus/gnus-msg.el (gnus-group-mail, gnus-group-news)
(gnus-summary-mail-other-window, gnus-summary-news-other-window):
Merge `let`s using `let*`.
* lisp/gnus/gnus-spec.el (gnus-update-format-specifications):
Tighten the scope of `buffer`, and tighten a regexp.
(gnus-parse-simple-format): Reduce code duplication.
* lisp/gnus/gnus-start.el (gnus-child-mode): Don't `defvar` it since we
never use that variable and accordingly don't define it as a minor mode.
* lisp/gnus/gnus-util.el (gnus-byte-compile): Simplify so it obeys
`gnus-use-byte-compile` not just on the first call.
(iswitchb-minibuffer-setup): Declare.
* lisp/gnus/mail-source.el (mail-source-bind-1)
(mail-source-bind-common-1): Use `mapcar`.
(mail-source-set-common-1): Use `dolist`.
(display-time-event-handler): Declare.
* lisp/gnus/mml-smime.el (mml-smime-epg-verify): Reduce code duplication.
* lisp/gnus/mml.el (mml-parse-1): Reduce code duplication.
* lisp/gnus/mml2015.el (mml2015-epg-verify): Reduce code duplication.
* lisp/gnus/nnmail.el (nnmail-get-split-group): Tighten regexp.
(nnmail-split-it): Reduce code duplication.
* lisp/gnus/nnweb.el (nnweb-request-article): Avoid `setq`.
* lisp/gnus/spam.el (BBDB): Use the `noerror` arg of `require`, and
define all the functions for BBDB regardless if the require succeeded.
(spam-exists-in-BBDB-p): Don't inline, not worth it.
2021-01-30 16:45:25 -05:00
|
|
|
(setq tags (cond ((string= mode "sign")
|
|
|
|
(list "sign" method))
|
|
|
|
((string= mode "encrypt")
|
|
|
|
(list "encrypt" method))
|
|
|
|
((string= mode "signencrypt")
|
|
|
|
(list "sign" method "encrypt" method))
|
|
|
|
(t
|
|
|
|
(error "Unknown secure mode %s" mode))))
|
* lisp/gnus: Use lexical-binding in all the files
* lisp/gnus/gnus-group.el (features): Use `dlet`.
(gnus-tmp-level, gnus-tmp-marked, gnus-tmp-group): Declare vars.
(gnus-group-insert-group-line): Bind dynbound vars via `let` rather
than as formal args. Bind `number` as dynbound.
(gnus-visual, gnus-score-find-score-files-function)
(gnus-home-score-file, gnus-apply-kill-hook)
(gnus-summary-expunge-below): Declare vars.
(gnus-group-restart, gnus-group-list-plus): Fix `interactive` spec
since the arg is unused.
* lisp/gnus/mail-source.el (mail-source-bind, mail-source-bind-common):
Use `dlet` and suppress the warnings about the non-prefixed dynbound vars.
(mail-source-set-1): Remove unused var `auth-info`.
(mail-source-call-script): Remove unused var `background`.
(mail-source-fetch-pop, mail-source-check-pop): Bind pop3 vars with `dlet`.
* lisp/gnus/gnus-int.el (mail-source-plugged, gnus-inhibit-demon):
Declare vars.
(gnus-server-opened, gnus-status-message)
(gnus-open-server, gnus-close-server, gnus-request-list)
(gnus-finish-retrieve-group-infos, gnus-retrieve-group-data-early)
(gnus-request-list-newsgroups, gnus-request-newgroups)
(gnus-request-regenerate, gnus-request-compact, gnus-request-group)
(gnus-retrieve-groups, gnus-request-post, gnus-request-expunge-group)
(gnus-request-scan, gnus-request-update-info, gnus-request-marks)
(gnus-request-accept-article, gnus-request-create-group)
(gnus-asynchronous-p, gnus-remove-denial):
Bind `gnus-command-method` via `let` rather than as formal args.
* lisp/gnus/gnus-topic.el (gnus-topic-insert-topic-line):
Pass documented vars to eval for `gnus-topic-line-format-spec`.
* lisp/gnus/message.el (message-yank-original): Use `cl-progv` rather
than `eval` to bind the vars from `message-cite-style`.
* lisp/gnus/mml.el (mml-parse-1): Use `apply` instead of `eval`.
(gnus-newsgroup-name, gnus-displaying-mime, gnus-newsgroup-name)
(gnus-article-prepare-hook, gnus-newsgroup-charset)
(gnus-original-article-buffer, gnus-message-buffer)
(message-this-is-news, message-this-is-mail): Declare vars.
* lisp/gnus/deuglify.el (gnus-outlook-rearrange-article): Remove unused
var `cite-marks`.
* lisp/gnus/gnus-art.el (ansi-color-context-region): Declare var.
(gnus-mime-display-attachment-buttons-in-header): Move declaration
before first use.
(gnus-mime-display-alternative): Remove unused var `from`.
* lisp/gnus/gnus-bookmark.el (gnus-bookmark-bmenu-list): Remove unused
var `start` `end`.
* lisp/gnus/gnus-cache.el (gnus-article-decode-hook)
(nnml-generate-active-function): Declare var.
* lisp/gnus/gnus-cite.el (gnus-message-citation-mode): Remove unused
var `keywords`.
* lisp/gnus/gnus-cloud.el (gnus-cloud-encode-data): Remove unused var
`cipher`.
(gnus-cloud-ensure-cloud-group): Remove unused var `method`.
* lisp/gnus/gnus-delay.el (gnus-delay-article): Remove unused var `days`.
* lisp/gnus/gnus-html.el (gnus-html-wash-images): Remove unused vars
`tag`, `string`, and `images`.
(gnus-html-wash-tags): Remove unused vars `string` and `images`.
* lisp/gnus/gnus-msg.el (gnus-msg-mail): Remove unused var `group-name`.
(gnus-group-mail, gnus-group-news, gnus-summary-mail-other-window)
(gnus-summary-news-other-window):
Remove unused vars `group` and `buffer`.
(gnus-configure-posting-styles): Remove unused vars `style` and `attribute`.
* lisp/gnus/gnus-picon.el (gnus-picon-find-face): Remove unused vars
`database`, `directory`, and `instance`.
(gnus-picon-transform-newsgroups): Remove unused var `point`.
* lisp/gnus/gnus-range.el (gnus-range-difference): Remove unused var `safe`.
* lisp/gnus/gnus-score.el (gnus-score-load-file): Remove unused var
`score-fn`.
* lisp/gnus/gnus-sum.el (message-options-set-recipient): Declare var.
* lisp/gnus/gnus-undo.el (gnus-undo): Fix docstring lie.
* lisp/gnus/gnus-util.el (print-string-length)
(iswitchb-make-buflist-hook): Declare vars.
(gnus-emacs-version): Remove unused var `codename`.
(gnus-rename-file): Remove unused vars `old-name` and `new-name`.
* lisp/gnus/gnus-uu.el (gnus-uu-yenc-article): Remove unused var
`start-char`.
(gnus-asynchronous): Declare var.
* lisp/gnus/mm-partial.el (gnus-displaying-mime): Declare var.
(mm-inline-partial): Remove unused var `buffer`.
* lisp/gnus/mm-view.el (w3m-force-redisplay, w3m-safe-url-regexp)
(gnus-displaying-mime, gnus-original-article-buffer)
(gnus-article-prepare-hook): Declare vars.
* lisp/gnus/mml-smime.el (mml-smime-epg-encrypt): Remove unused var
`boundary`.
(mml-smime-epg-verify): Remove unused vars `plain` and `signature-file`.
* lisp/gnus/mml1991.el (pgg-text-mode): Declare var.
* lisp/gnus/mml2015.el (pgg-text-mode): Declare var.
(mml2015-pgg-decrypt): Remove unused var `result`.
(mml2015-epg-key-image-to-string): Remove unused var `error`.
(mml2015-epg-decrypt): Remove unused var `result`.
(mml2015-epg-verify): Remove unused vars `plain` and `signature-file`.
* lisp/gnus/nnbabyl.el (nnml-current-directory): Declare var.
* lisp/gnus/nndiary.el (nndiary-files): Move declaration before first use.
* lisp/gnus/nnfolder.el (nnfolder-request-accept-article):
Remove unused var `buf`.
* lisp/gnus/nnmail.el (nnmail-parse-active): Remove unused var `err`.
* lisp/gnus/nnmairix.el (nnmairix-request-group): Remove unused var `args`.
(nnmairix-request-create-group): Remove unused var `info`.
(nnmairix-request-list): Remove unused var `folder`.
(nnmairix-request-set-mark): Remove unused var `propto`.
(nnmairix-request-set-mark): Remove unused vars `number` and `method`.
(nnmairix-close-group): Remove unused var `method`.
(nnmairix-create-search-group-from-message): Remove unused var `cq`.
(nnmairix-create-server-and-default-group): Remove unused var `create`.
(nnmairix-purge-old-groups): Remove unused var `folder`.
(nnmairix-remove-tick-mark-original-article, nnmairix-get-valid-servers):
Remove unused var `cur`.
(nnmairix-replace-group-and-numbers): Remove unused var `header`.
(nnmairix-goto-original-article): Remove unused var `rval`.
(nnmairix-widget-create-query): Remove unused var `allwidgets`.
* lisp/gnus/nnmbox.el (nnml-current-directory): Declare var.
* lisp/gnus/nnmh.el (nnmh-toplev): Move declaration before first use.
(nnmh-request-list-1): Remove unused var `rdir`.
* lisp/gnus/nnml.el (nnml-generate-nov-file): Remove unused var `file`.
* lisp/gnus/nnrss.el (nnrss-request-article): Remove unused var `post`.
(nnrss-request-article): Remove unused var `fn`.
(nnrss-check-group): Remove unused var `rdf-ns`.
* lisp/gnus/nnweb.el (nnweb-request-article): Remove unused var `active`.
(nnweb-google-parse-1): Remove unused var `Score`.
* lisp/gnus/spam-stat.el (spam-stat-error-holder): Remove var.
(spam-stat-buffer-words-with-scores): Remove unused var `word`.
(spam-stat-score-buffer): Remove unused var `spam-stat-error-holder`.
(spam-stat-split-fancy): Use `err` instead of `spam-stat-error-holder`.
* lisp/gnus/spam-wash.el (spam-wash): Remove unused var `handle`.
* lisp/gnus/spam.el (spam-copy-or-move-routine): Remove unused vars
`article` and `mark`.
(spam-register-routine): Remove unused var `article`.
(spam-log-undo-registration): Remove unused var `found`.
(spam-ifile-register-with-ifile): Remove unused var `parameters`.
(spam-check-stat): Remove unused vars `category` and `return`.
(spam-parse-list): Remove unused var `found`.
(spam-filelist-register-routine): Remove unused var `from`.
2021-01-30 18:44:00 -05:00
|
|
|
(apply #'mml-insert-tag
|
|
|
|
secure-mode
|
|
|
|
`(,@tags
|
|
|
|
,(if keyfile "keyfile")
|
|
|
|
,keyfile
|
|
|
|
,@(apply #'append
|
|
|
|
(mapcar (lambda (certfile)
|
|
|
|
(list "certfile" certfile))
|
|
|
|
certfiles))
|
|
|
|
,(if recipients "recipients")
|
|
|
|
,recipients
|
|
|
|
,(if sender "sender")
|
|
|
|
,sender))
|
2004-09-04 13:13:48 +00:00
|
|
|
;; restart the parse
|
|
|
|
(goto-char location)))
|
2000-09-19 13:40:08 +00:00
|
|
|
((looking-at "<#multipart")
|
|
|
|
(push (nconc (mml-read-tag) (mml-parse-1)) struct))
|
|
|
|
((looking-at "<#external")
|
|
|
|
(push (nconc (mml-read-tag) (list (cons 'contents (mml-read-part))))
|
|
|
|
struct))
|
|
|
|
(t
|
|
|
|
(if (or (looking-at "<#part") (looking-at "<#mml"))
|
|
|
|
(setq tag (mml-read-tag)
|
|
|
|
no-markup-p nil
|
|
|
|
warn nil)
|
2020-04-16 20:24:26 -04:00
|
|
|
(setq tag (list 'part (cons 'type "text/plain"))
|
2000-09-19 13:40:08 +00:00
|
|
|
no-markup-p t
|
|
|
|
warn t))
|
|
|
|
(setq raw (cdr (assq 'raw tag))
|
|
|
|
point (point)
|
2000-09-20 11:46:48 +00:00
|
|
|
contents (mml-read-part (eq 'mml (car tag)))
|
2004-09-04 13:13:48 +00:00
|
|
|
charsets (cond
|
|
|
|
(raw nil)
|
|
|
|
((assq 'charset tag)
|
|
|
|
(list
|
|
|
|
(intern (downcase (cdr (assq 'charset tag))))))
|
|
|
|
(t
|
2008-02-24 15:23:45 +00:00
|
|
|
(mm-find-mime-charset-region point (point)
|
|
|
|
mm-hack-charsets))))
|
2020-08-05 12:21:35 +02:00
|
|
|
;; We have a part that already has a transfer encoding. Undo
|
|
|
|
;; that so that we don't double-encode later.
|
|
|
|
(when (and raw
|
2020-08-06 16:47:21 +02:00
|
|
|
(cdr (assq 'data-encoding tag)))
|
2020-08-05 12:21:35 +02:00
|
|
|
(with-temp-buffer
|
|
|
|
(set-buffer-multibyte nil)
|
|
|
|
(insert contents)
|
|
|
|
(mm-decode-content-transfer-encoding
|
2020-08-06 16:47:21 +02:00
|
|
|
(intern (cdr (assq 'data-encoding tag)))
|
2020-08-05 12:21:35 +02:00
|
|
|
(cdr (assq 'type tag)))
|
|
|
|
(setq contents (buffer-string))))
|
2000-09-19 13:40:08 +00:00
|
|
|
(when (and (not raw) (memq nil charsets))
|
|
|
|
(if (or (memq 'unknown-encoding mml-confirmation-set)
|
2004-09-04 13:13:48 +00:00
|
|
|
(message-options-get 'unknown-encoding)
|
|
|
|
(and (y-or-n-p "\
|
|
|
|
Message contains characters with unknown encoding. Really send? ")
|
|
|
|
(message-options-set 'unknown-encoding t)))
|
2003-02-04 13:24:35 +00:00
|
|
|
(if (setq use-ascii
|
2000-09-19 13:40:08 +00:00
|
|
|
(or (memq 'use-ascii mml-confirmation-set)
|
2004-09-04 13:13:48 +00:00
|
|
|
(message-options-get 'use-ascii)
|
|
|
|
(and (y-or-n-p "Use ASCII as charset? ")
|
|
|
|
(message-options-set 'use-ascii t))))
|
2000-09-19 13:40:08 +00:00
|
|
|
(setq charsets (delq nil charsets))
|
|
|
|
(setq warn nil))
|
|
|
|
(error "Edit your message to remove those characters")))
|
|
|
|
(if (or raw
|
|
|
|
(eq 'mml (car tag))
|
|
|
|
(< (length charsets) 2))
|
|
|
|
(if (or (not no-markup-p)
|
2020-08-05 12:21:35 +02:00
|
|
|
;; Don't create blank parts.
|
2000-09-19 13:40:08 +00:00
|
|
|
(string-match "[^ \t\r\n]" contents))
|
|
|
|
(push (nconc tag (list (cons 'contents contents)))
|
|
|
|
struct))
|
|
|
|
(let ((nstruct (mml-parse-singlepart-with-multiple-charsets
|
|
|
|
tag point (point) use-ascii)))
|
|
|
|
(when (and warn
|
|
|
|
(not (memq 'multipart mml-confirmation-set))
|
2004-09-04 13:13:48 +00:00
|
|
|
(not (message-options-get 'multipart))
|
|
|
|
(not (and (y-or-n-p (format "\
|
2001-01-08 19:25:35 +00:00
|
|
|
A message part needs to be split into %d charset parts. Really send? "
|
2004-09-04 13:13:48 +00:00
|
|
|
(length nstruct)))
|
|
|
|
(message-options-set 'multipart t))))
|
2000-09-19 13:40:08 +00:00
|
|
|
(error "Edit your message to use only one charset"))
|
|
|
|
(setq struct (nconc nstruct struct)))))))
|
|
|
|
(unless (eobp)
|
|
|
|
(forward-line 1))
|
|
|
|
(nreverse struct)))
|
|
|
|
|
2003-02-04 13:24:35 +00:00
|
|
|
(defun mml-parse-singlepart-with-multiple-charsets
|
2000-09-19 13:40:08 +00:00
|
|
|
(orig-tag beg end &optional use-ascii)
|
|
|
|
(save-excursion
|
|
|
|
(save-restriction
|
|
|
|
(narrow-to-region beg end)
|
|
|
|
(goto-char (point-min))
|
|
|
|
(let ((current (or (mm-mime-charset (mm-charset-after))
|
|
|
|
(and use-ascii 'us-ascii)))
|
|
|
|
charset struct space newline paragraph)
|
|
|
|
(while (not (eobp))
|
|
|
|
(setq charset (mm-mime-charset (mm-charset-after)))
|
|
|
|
(cond
|
|
|
|
;; The charset remains the same.
|
|
|
|
((eq charset 'us-ascii))
|
|
|
|
((or (and use-ascii (not charset))
|
|
|
|
(eq charset current))
|
|
|
|
(setq space nil
|
|
|
|
newline nil
|
|
|
|
paragraph nil))
|
|
|
|
;; The initial charset was ascii.
|
|
|
|
((eq current 'us-ascii)
|
|
|
|
(setq current charset
|
|
|
|
space nil
|
|
|
|
newline nil
|
|
|
|
paragraph nil))
|
|
|
|
;; We have a change in charsets.
|
|
|
|
(t
|
|
|
|
(push (append
|
|
|
|
orig-tag
|
|
|
|
(list (cons 'contents
|
|
|
|
(buffer-substring-no-properties
|
|
|
|
beg (or paragraph newline space (point))))))
|
|
|
|
struct)
|
|
|
|
(setq beg (or paragraph newline space (point))
|
|
|
|
current charset
|
|
|
|
space nil
|
|
|
|
newline nil
|
|
|
|
paragraph nil)))
|
|
|
|
;; Compute places where it might be nice to break the part.
|
|
|
|
(cond
|
|
|
|
((memq (following-char) '(? ?\t))
|
|
|
|
(setq space (1+ (point))))
|
|
|
|
((and (eq (following-char) ?\n)
|
|
|
|
(not (bobp))
|
|
|
|
(eq (char-after (1- (point))) ?\n))
|
|
|
|
(setq paragraph (point)))
|
|
|
|
((eq (following-char) ?\n)
|
|
|
|
(setq newline (1+ (point)))))
|
|
|
|
(forward-char 1))
|
|
|
|
;; Do the final part.
|
|
|
|
(unless (= beg (point))
|
|
|
|
(push (append orig-tag
|
|
|
|
(list (cons 'contents
|
|
|
|
(buffer-substring-no-properties
|
|
|
|
beg (point)))))
|
|
|
|
struct))
|
|
|
|
struct))))
|
|
|
|
|
|
|
|
(defun mml-read-tag ()
|
|
|
|
"Read a tag and return the contents."
|
2004-09-04 13:13:48 +00:00
|
|
|
(let ((orig-point (point))
|
|
|
|
contents name elem val)
|
2000-09-19 13:40:08 +00:00
|
|
|
(forward-char 2)
|
|
|
|
(setq name (buffer-substring-no-properties
|
|
|
|
(point) (progn (forward-sexp 1) (point))))
|
|
|
|
(skip-chars-forward " \t\n")
|
2004-09-04 13:13:48 +00:00
|
|
|
(while (not (looking-at ">[ \t]*\n?"))
|
2000-09-19 13:40:08 +00:00
|
|
|
(setq elem (buffer-substring-no-properties
|
|
|
|
(point) (progn (forward-sexp 1) (point))))
|
|
|
|
(skip-chars-forward "= \t\n")
|
|
|
|
(setq val (buffer-substring-no-properties
|
|
|
|
(point) (progn (forward-sexp 1) (point))))
|
2010-03-17 02:51:21 +00:00
|
|
|
(when (string-match "\\`\"" val)
|
|
|
|
(setq val (read val))) ;; inverse of prin1 in mml-insert-tag
|
2000-09-19 13:40:08 +00:00
|
|
|
(push (cons (intern elem) val) contents)
|
|
|
|
(skip-chars-forward " \t\n"))
|
2004-09-04 13:13:48 +00:00
|
|
|
(goto-char (match-end 0))
|
|
|
|
;; Don't skip the leading space.
|
|
|
|
;;(skip-chars-forward " \t\n")
|
|
|
|
;; Put the tag location into the returned contents
|
|
|
|
(setq contents (append (list (cons 'tag-location orig-point)) contents))
|
2000-09-19 13:40:08 +00:00
|
|
|
(cons (intern name) (nreverse contents))))
|
|
|
|
|
2016-05-29 17:59:33 +02:00
|
|
|
(defun mml-buffer-substring-no-properties-except-some (start end)
|
2004-09-04 13:13:48 +00:00
|
|
|
(let ((str (buffer-substring-no-properties start end))
|
2016-05-29 17:59:33 +02:00
|
|
|
(bufstart start)
|
|
|
|
tmp)
|
|
|
|
;; Copy over all hard newlines.
|
|
|
|
(while (setq tmp (text-property-any start end 'hard t))
|
|
|
|
(put-text-property (- tmp bufstart) (- tmp bufstart -1)
|
|
|
|
'hard t str)
|
|
|
|
(setq start (1+ tmp)))
|
|
|
|
;; Copy over all `display' properties (which are usually images).
|
|
|
|
(setq start bufstart)
|
|
|
|
(while (setq tmp (text-property-not-all start end 'display nil))
|
|
|
|
(put-text-property (- tmp bufstart) (- tmp bufstart -1)
|
|
|
|
'display (get-text-property tmp 'display)
|
|
|
|
str)
|
2004-09-04 13:13:48 +00:00
|
|
|
(setq start (1+ tmp)))
|
|
|
|
str))
|
|
|
|
|
2000-09-19 13:40:08 +00:00
|
|
|
(defun mml-read-part (&optional mml)
|
|
|
|
"Return the buffer up till the next part, multipart or closing part or multipart.
|
|
|
|
If MML is non-nil, return the buffer up till the correspondent mml tag."
|
|
|
|
(let ((beg (point)) (count 1))
|
2004-09-04 13:13:48 +00:00
|
|
|
;; If the tag ended at the end of the line, we go to the next line.
|
2000-09-19 13:40:08 +00:00
|
|
|
(when (looking-at "[ \t]*\n")
|
|
|
|
(forward-line 1))
|
|
|
|
(if mml
|
|
|
|
(progn
|
|
|
|
(while (and (> count 0) (not (eobp)))
|
|
|
|
(if (re-search-forward "<#\\(/\\)?mml." nil t)
|
|
|
|
(setq count (+ count (if (match-beginning 1) -1 1)))
|
|
|
|
(goto-char (point-max))))
|
2016-05-29 17:59:33 +02:00
|
|
|
(mml-buffer-substring-no-properties-except-some
|
2004-09-04 13:13:48 +00:00
|
|
|
beg (if (> count 0)
|
|
|
|
(point)
|
|
|
|
(match-beginning 0))))
|
2000-09-19 13:40:08 +00:00
|
|
|
(if (re-search-forward
|
|
|
|
"<#\\(/\\)?\\(multipart\\|part\\|external\\|mml\\)." nil t)
|
|
|
|
(prog1
|
2016-05-29 17:59:33 +02:00
|
|
|
(mml-buffer-substring-no-properties-except-some
|
2004-09-04 13:13:48 +00:00
|
|
|
beg (match-beginning 0))
|
2000-09-19 13:40:08 +00:00
|
|
|
(if (or (not (match-beginning 1))
|
|
|
|
(equal (match-string 2) "multipart"))
|
|
|
|
(goto-char (match-beginning 0))
|
|
|
|
(when (looking-at "[ \t]*\n")
|
|
|
|
(forward-line 1))))
|
2016-05-29 17:59:33 +02:00
|
|
|
(mml-buffer-substring-no-properties-except-some
|
2004-09-04 13:13:48 +00:00
|
|
|
beg (goto-char (point-max)))))))
|
2000-09-19 13:40:08 +00:00
|
|
|
|
|
|
|
(defvar mml-boundary nil)
|
|
|
|
(defvar mml-base-boundary "-=-=")
|
|
|
|
(defvar mml-multipart-number 0)
|
2011-09-22 04:43:36 +00:00
|
|
|
(defvar mml-inhibit-compute-boundary nil)
|
2000-09-19 13:40:08 +00:00
|
|
|
|
2014-03-23 23:13:36 +00:00
|
|
|
(declare-function libxml-parse-html-region "xml.c"
|
2015-04-30 20:06:15 -04:00
|
|
|
(start end &optional base-url discard-comments))
|
2014-03-23 23:13:36 +00:00
|
|
|
|
2019-09-21 01:41:50 +02:00
|
|
|
(defun mml-generate-mime (&optional multipart-type content-type)
|
Merge changes made in Gnus master ever since feature freeze
:::::::::::::::::
::: doc/misc/ :::
:::::::::::::::::
2012-06-11 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus.texi (POP before SMTP): POP-before-SMTP works with all sending
methods, so don't mention smtpmail here.
2012-05-04 Wolfgang Jenkner <wjenkner@inode.at>
* gnus.texi (Picons): Document gnus-picon-properties.
2012-06-10 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus.texi: Remove mention of compilation, as that's no longer
supported.
2012-03-14 Christopher Schmidt <christopher@ch.ristopher.com>
* gnus.texi (Archived Messages): Mention
gnus-gcc-pre-body-encode-hook and gnus-gcc-post-body-encode-hook.
2012-02-16 Lars Ingebrigtsen <larsi@gnus.org>
* gnus.texi (Various Summary Stuff):
Remove mention of `gnus-propagate-marks'.
2012-02-15 Lars Ingebrigtsen <larsi@gnus.org>
* gnus.texi: Remove mentions of nnml/nnfolder/nntp backend marks,
which no longer exist.
2012-02-08 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus.texi (Archived Messages):
Document gnus-gcc-self-resent-messages.
2012-02-06 Lars Ingebrigtsen <larsi@gnus.org>
* message.texi (Mail Variables):
Mention the optional user parameter for X-Message-SMTP-Method.
2012-02-02 Lars Ingebrigtsen <larsi@gnus.org>
* gnus.texi (Posting Styles): Mention X-Message-SMTP-Method.
* message.texi (Mail Variables): Document X-Message-SMTP-Method.
2012-01-31 Lars Ingebrigtsen <larsi@gnus.org>
* gnus.texi (Key Index): Change encoding to utf-8.
::::::::::::::::::
::: lisp/gnus/ :::
::::::::::::::::::
2012-06-26 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-decode.el: Add coding cookie for a soft hyphen that mm-shr uses.
2012-06-11 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus-art.el (gnus-article-read-summary-keys): Protect against the key
being bound to a lambda form.
2012-05-04 Wolfgang Jenkner <wjenkner@inode.at>
* gnus-picon.el (gnus-picon-properties): New defcustom.
(gnus-picon-create-glyph): Use it.
2012-06-10 Lars Magne Ingebrigtsen <larsi@gnus.org>
* shr.el: Add a iso-8859-1 cookie to make stuff work under other
locales.
* mm-decode.el (mm-display-part): Dissect archives when hitting `RET'
on a handle.
* gnus-sum.el (gnus-summary-limit-to-author): Use the current From
address as the default.
* nnfolder.el (nnfolder-save-buffer): Delete old versions silently.
It makes no sense to query the user about internal files.
* gnus-spec.el: Remove all the byte-compilation stuff, since
benchmarking shows that it doesn't help when entering large summary
buffers.
* gnus-util.el (gnus-byte-code): Remove.
* gnus-spec.el (gnus-update-format-specifications): Remove outdated
grouplens stuff.
2012-06-07 Stephen Eglen <S.J.Eglen@damtp.cam.ac.uk>
* message.el (message-buffers): Return all buffers derived from Message
to make `gnus-dired-attach' work with mu4e.
2012-05-28 Daiki Ueno <ueno@unixuser.org>
* mm-decode.el (mm-inhibit-auto-detect-attachment): New variable.
(mm-dissect-singlepart): Don't guess the MIME type of
application/octet-stream parts if mm-inhibit-auto-detect-attachment is
set.
(mm-dissect-multipart): Bind mm-inhibit-auto-detect-attachment if the
toplevel MIME type is multipart/encrypted.
2011-12-02 Wolfgang Jenkner <wjenkner@inode.at>
* gnus-agent.el (gnus-agent-save-active): Deal with the "groups" format.
In particular, add an optional argument and a docstring.
* gnus-start.el (gnus-groups-to-gnus-format): Use it.
* nntp.el (nntp-finish-retrieve-group-infos): Make `nntp-server-buffer'
current before calling `gnus-groups-to-gnus-format'.
Note that this was already the case for `gnus-active-to-gnus-format'.
2012-04-25 Katsumi Yamaoka <yamaoka@jpl.org>
* pop3.el (pop3-wait-for-messages): Fix retrieved data size calculation.
2012-04-12 Lars Magne Ingebrigtsen <larsi@gnus.org>
* mm-decode.el (mm-dissect-buffer): Doc fix.
* gnus-sum.el (gnus-handle-ephemeral-exit):
Avoid creating the group buffer if it doesn't exist.
* gnus-group.el (gnus-group-read-ephemeral-group): If no quit-config
is given, mark the group as ephemeral with the current window conf.
* gnus-sum.el (gnus-set-global-variables): Don't assume that the group
buffer exists, which it doesn't if we haven't started Gnus.
(gnus-summary-exit): Allow quitting when we don't have a group buffer.
2012-04-10 Lars Magne Ingebrigtsen <larsi@gnus.org>
* mml.el (mml-generate-mime):
Allow specifying what the top-level part type is.
* gnus-sum.el (gnus-auto-center-summary):
`scroll-margin' isn't defined on XEmacs.
2012-04-10 Philipp Haselwarter <philipp.haselwarter@gmx.de> (tiny change)
* gnus-sum.el (gnus-auto-center-summary):
Set default to respect `scroll-margin'.
2012-04-10 Elias Oltmanns <eo@nebensachen.de> (tiny change)
* gnus-cite.el (gnus-dissect-cited-text): A single line without
citation prefix within a block of cited text should be considered
part of that block *only* if it is a blank line.
2012-04-02 Katsumi Yamaoka <yamaoka@jpl.org>
* shr.el (shr-find-fill-point): Remove unused code; don't break a line
before kinsoku-bol characters nor within kinsoku-eol characters.
2012-03-27 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-sync.el (gnus-topic-alist, gnus-group-topic)
(gnus-topic-create-topic, gnus-topic-enter-dribble):
Silence compiler.
(gnus-sync-read): Use mapc instead of mapcar.
* mm-archive.el: Require mm-decode for some macros.
(gnus-recursive-directory-files, mailcap-extension-to-mime):
Silence the byte compiler.
(mm-archive-decoders): New function that returns the value of
the mm-archive-decoders variable.
* mm-decode.el:
Don't require mm-archive; autoload mm-archive functions instead.
(mm-dissect-singlepart): Use the function mm-archive-decoders.
* nnmail.el (mail-send-and-exit): Silence the byte compiler.
2012-03-12 Peter Munster <pmrb@free.fr>
* gnus-demon.el (gnus-demon-timers): Now a plist (function -> timer).
(gnus-demon-cancel): Ditto.
(gnus-demon-run-callback): When function cannot be called due to low
idleness, call it when idleness reaches the expected value, instead
of waiting another timer period.
(gnus-demon-init): Add `time' to arguments of call-back.
2012-03-22 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus.el: Register gnus-registry functions.
* gnus-registry.el (gnus-try-warping-via-registry):
Moved here and indent.
* gnus-int.el (gnus-warp-to-article):
Check whether the registry is enabled before warping.
2012-03-22 Dave Abrahams <dave@boostpro.com>
* gnus-sum.el (gnus-summary-insert-subject): Record information
in the registry about each article retrieved.
* gnus-int.el (gnus-select-group-with-message-id): New function.
(gnus-try-warping-via-registry): Ditto.
(gnus-warp-to-article): Fall back on the registry.
2012-03-22 Lars Magne Ingebrigtsen <larsi@gnus.org>
* nnimap.el (nnimap-fetch-partial-articles): Minor doc string fixup.
2012-03-22 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-msg.el (gnus-summary-resend-message-insert-gcc): Assume that
gnus-gcc-self-resent-messages may be a group parameter.
(gnus-summary-resend-message):
Don't encode encoded words in header when Gcc'ing resent message.
2012-03-19 Lars Magne Ingebrigtsen <larsi@gnus.org>
* shr.el (shr-insert): Treat non-breaking space just like normal
space. This seems to produce more pleasing results.
(shr-insert):
Only insert a blank line if we're starting from an image.
(shr-tag-br):
Allow <br> to end lines or to make a single blank line.
(shr-ensure-paragraph): Consider lines with white space to be blank.
2012-03-14 Christopher Schmidt <christopher@ch.ristopher.com>
* gnus-msg.el (gnus-inews-do-gcc): Add gnus-gcc-pre-body-encode-hook
and gnus-gcc-post-body-encode-hook.
2012-02-16 Lars Ingebrigtsen <larsi@gnus.org>
* mm-decode.el (mm-dissect-singlepart):
Guess what the type of application/octet-stream parts really is.
* gnus-sum.el (gnus-propagate-marks): Remove.
2012-02-15 Lars Ingebrigtsen <larsi@gnus.org>
* nntp.el (nntp-coding-system-for-read): Remove.
(nntp-coding-system-for-write): Ditto.
(nntp-open-connection): Just use `binary' directly.
2012-02-14 Teodor Zlatanov <tzz@lifelogs.com>
* registry.el (registry-usage-test, registry-persistence-test):
Move to tests/gnustest-registry.el.
(registry-make-testable-db, registry-match-test)
(registry-instantiation-test): Move to tests/gnustest-registry.el.
* gnus-registry.el (gnus-registry-misc-test)
(gnus-registry-usage-test): Move to tests/gnustest-registry.el.
* tests/gnustest-registry.el:
New file with the registry and gnus-registry ERT tests.
2012-02-13 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-msg.el (gnus-summary-resend-message):
Make gnus-summary-resend-message-insert-gcc be last item in
message-header-setup-hook.
2012-02-13 Lars Ingebrigtsen <larsi@gnus.org>
* nnfolder.el (nnfolder-marks-directory, nnfolder-marks-is-evil)
(nnfolder-marks, nnfolder-marks-file-suffix)
(nnfolder-marks-modtime): Remove.
(nnfolder-open-server): Don't use marks.
(nnfolder-request-delete-group): Ditto.
(nnfolder-request-rename-group): Ditto.
(nnfolder-request-set-mark, nnfolder-request-marks)
(nnfolder-group-marks-pathname, nnfolder-marks-changed-p)
(nnfolder-save-marks, nnfolder-open-marks): Remove.
* nnml.el (nnml-marks-is-evil, nnml-marks-file-name, nnml-marks)
(nnml-marks-modtime): Remove.
(nnml-request-delete-group): Don't use marks.
(nnml-request-rename-group): Ditto.
(nnml-request-set-mark, nnml-request-marks, nnml-marks-changed-p)
(nnml-save-marks, nnml-open-marks): Remove.
* nntp.el (nntp-marks-is-evil, nntp-marks-file-name, nntp-marks)
(nntp-marks-modtime, nntp-marks-directory, nntp-request-set-mark)
(nntp-request-marks, nntp-marks-directory, nntp-marks-changed-p)
(nntp-save-marks, nntp-open-marks, nntp-possibly-create-directory)
(nntp-server-to-method-cache): Remove.
* shr.el (shr-rescale-image): Fix wrong merge.
2012-02-15 Lars Ingebrigtsen <larsi@gnus.org>
* shr.el (shr-remove-trailing-whitespace):
Really delete the padding on too-wide lines.
2012-02-09 Lars Ingebrigtsen <larsi@gnus.org>
* mm-archive.el (mm-archive-dissect-and-inline): New function.
(mm-archive-dissect-and-inline): Fix up the undisplayer.
* mm-decode.el (mm-display-external): Output the text from
the command in the buffer after the command finished.
This makes text-based commands behave better.
2012-02-07 Lars Ingebrigtsen <larsi@gnus.org>
* message.el (smtpmail-smtp-user): Silence compiler warning.
2012-02-06 Lars Ingebrigtsen <larsi@gnus.org>
* message.el (message-multi-smtp-send-mail):
Also allow specifying the SMTP user name.
2012-02-06 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-sum.el (gnus-summary-article-map): Fix typo.
2012-02-02 Lars Ingebrigtsen <larsi@gnus.org>
* message.el (message-multi-smtp-send-mail): New function.
(message-multi-smtp-send-mail): Respect the X-Message-SMTP-Method
header to implement multi-SMTP functionality.
* gnus-agent.el (gnus-agent-send-mail-function): Removed.
(gnus-agentize): Don't set it.
(gnus-agent-send-mail): Don't use it.
* gnus-sum.el (gnus-summary-widget-backward):
New function and keystroke.
* shr.el (shr-put-image): Remove underlines from sliced images.
(shr-zoom-image): Compute the region to be replaced more correctly.
2012-02-02 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-msg.el (gnus-gcc-self-resent-messages): New user option.
(gnus-summary-resend-message-insert-gcc): New function.
(gnus-summary-resend-message): Modify message-header-setup-hook and
message-sent-hook to make it work for Gcc.
(gnus-inews-do-gcc): Update the number of unread articles of groups
that messages are Gcc'd to.
* message.el (message-resend): Run message-sent-hook to do Gcc.
2012-02-01 Lars Ingebrigtsen <larsi@gnus.org>
* gnus-registry.el (gnus-registry-fixup-registry):
Move the message to a higher level to silence compilation.
* gnus-art.el (gnus-shr-put-image): Take and pass on a `flags'
parameter to allow controlling the scaling.
* shr.el (shr-zoom-image): New command and keystroke.
(shr-put-image): Take a `size' flag to say how to scale the image.
* mm-archive.el (mm-dissect-archive): Use it to get all file names.
Use recursive deletion.
(mm-dissect-archive): Add support for zip files.
* gnus-util.el (gnus-recursive-directory-files): New function.
* mm-archive.el (mm-archive-list-files): Inline text and image parts.
(mm-archive-decoders): Add tgz support.
* mm-decode.el (mm-shr): Make sure that the HTML ends with a newline.
Otherwise inserting text into the Gnus buffer can look odd.
* gnus-art.el (gnus-mime-inline-part): Slight clean-up.
* mm-archive.el (mm-archive-decoders): Add support for tar.
* gnus.el (gnus-logo-color-alist): Change the colours for Ma Gnus.
* nnmail.el (nnmail-extra-headers): Add Cc to the default.
2012-01-31 Lars Ingebrigtsen <larsi@gnus.org>
* mm-decode.el (mm-dissect-singlepart): Check that the decoder exists.
* mm-archive.el: New file.
* mm-decode.el (mm-dissect-singlepart):
Use it to decode ms-tnef files.
* mm-util.el (mm-find-buffer-file-coding-system): Comment fix.
* message.el (message-goto-*): Make all the `message-goto-*' commands
push the mark before moving point. This makes it easier to go back
to where you came from after editing whatever you jumped to.
2012-01-07 Teodor Zlatanov <tzz@lifelogs.com>
* gnus-sync.el (gnus-sync-newsrc-groups): Quote normally.
(gnus-sync-lesync-pre-save-group-entry): Remove invalid invlists.
(gnus-sync-lesync-normalize-group-entry): Ignore a few more keys.
2011-11-09 Teodor Zlatanov <tzz@lifelogs.com>
* spam.el: Move BBDB autoloads.
(spam-exists-in-BBDB-p):
New function to do the BBDB search directly in BBDB 2 and 3.
(spam-check-BBDB): Use it.
(spam-enter-ham-BBDB): Use it.
2011-10-31 Peter Munster <pmrb@free.fr> (tiny change)
* gnus-group.el (gnus-group-get-new-news):
New parameter `one-level' for scanning exactly one level.
* gnus-start.el (gnus-get-unread-articles): Ditto.
2011-11-03 Teodor Zlatanov <tzz@lifelogs.com>
* gnus-sync.el: More commentary about setup.
2011-11-02 Teodor Zlatanov <tzz@lifelogs.com>
* gnus-sync.el: More commentary about `gnus-sync-read' issues.
2011-10-31 Teodor Zlatanov <tzz@lifelogs.com>
* gnus-sync.el: Improve docs about CouchDB admins.
2011-10-29 Teodor Zlatanov <tzz@lifelogs.com>
* gnus-sync.el (gnus-sync-lesync-setup): Fix salt when user setup is
not needed. Provide xmlplistread list function to produce XML plist
output for non-Gnus LeSync clients.
2011-10-27 Teodor Zlatanov <tzz@lifelogs.com>
* gnus-sync.el: Add LeSync synchronization backend and logic to read
and save against it. Group subscriptions, read marks, other marks,
subscription levels, topic names, and topic offsets (the group's
position within the topic) are saved. This is an experimental
backend and may change significantly. Load json.el from
the gnus-fallback-lib if it's not available otherwise.
(gnus-sync-save): Don't use `apply-partially' because of XEmacs.
2011-04-20 David Engster <dengste@eml.cc>
* tests/gnustest-nntp.el: New file for simple NNTP testing.
2012-06-26 22:52:31 +00:00
|
|
|
"Generate a MIME message based on the current MML document.
|
|
|
|
MULTIPART-TYPE defaults to \"mixed\", but can also
|
2019-09-21 01:41:50 +02:00
|
|
|
be \"related\" or \"alternate\".
|
|
|
|
|
|
|
|
If CONTENT-TYPE (and there's only one part), override the content
|
|
|
|
type detected."
|
2000-09-19 13:40:08 +00:00
|
|
|
(let ((cont (mml-parse))
|
2011-12-01 04:55:39 +00:00
|
|
|
(mml-multipart-number mml-multipart-number)
|
|
|
|
(options message-options))
|
2000-09-19 13:40:08 +00:00
|
|
|
(if (not cont)
|
|
|
|
nil
|
2019-09-21 01:41:50 +02:00
|
|
|
(when (and (consp (car cont))
|
|
|
|
(= (length cont) 1)
|
|
|
|
content-type)
|
|
|
|
(setcdr (assq 'type (cdr (car cont))) content-type))
|
2020-02-19 14:51:43 +01:00
|
|
|
(when (fboundp 'libxml-parse-html-region)
|
2021-01-30 00:35:24 -05:00
|
|
|
(setq cont (mapcar #'mml-expand-all-html-into-multipart-related cont)))
|
2011-12-01 04:55:39 +00:00
|
|
|
(prog1
|
2017-01-25 17:28:17 +01:00
|
|
|
(with-temp-buffer
|
|
|
|
(set-buffer-multibyte nil)
|
2011-12-01 04:55:39 +00:00
|
|
|
(setq message-options options)
|
2014-03-23 23:13:36 +00:00
|
|
|
(cond
|
|
|
|
((and (consp (car cont))
|
|
|
|
(= (length cont) 1))
|
|
|
|
(mml-generate-mime-1 (car cont)))
|
|
|
|
((eq (car cont) 'multipart)
|
|
|
|
(mml-generate-mime-1 cont))
|
|
|
|
(t
|
Merge changes made in Gnus master ever since feature freeze
:::::::::::::::::
::: doc/misc/ :::
:::::::::::::::::
2012-06-11 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus.texi (POP before SMTP): POP-before-SMTP works with all sending
methods, so don't mention smtpmail here.
2012-05-04 Wolfgang Jenkner <wjenkner@inode.at>
* gnus.texi (Picons): Document gnus-picon-properties.
2012-06-10 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus.texi: Remove mention of compilation, as that's no longer
supported.
2012-03-14 Christopher Schmidt <christopher@ch.ristopher.com>
* gnus.texi (Archived Messages): Mention
gnus-gcc-pre-body-encode-hook and gnus-gcc-post-body-encode-hook.
2012-02-16 Lars Ingebrigtsen <larsi@gnus.org>
* gnus.texi (Various Summary Stuff):
Remove mention of `gnus-propagate-marks'.
2012-02-15 Lars Ingebrigtsen <larsi@gnus.org>
* gnus.texi: Remove mentions of nnml/nnfolder/nntp backend marks,
which no longer exist.
2012-02-08 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus.texi (Archived Messages):
Document gnus-gcc-self-resent-messages.
2012-02-06 Lars Ingebrigtsen <larsi@gnus.org>
* message.texi (Mail Variables):
Mention the optional user parameter for X-Message-SMTP-Method.
2012-02-02 Lars Ingebrigtsen <larsi@gnus.org>
* gnus.texi (Posting Styles): Mention X-Message-SMTP-Method.
* message.texi (Mail Variables): Document X-Message-SMTP-Method.
2012-01-31 Lars Ingebrigtsen <larsi@gnus.org>
* gnus.texi (Key Index): Change encoding to utf-8.
::::::::::::::::::
::: lisp/gnus/ :::
::::::::::::::::::
2012-06-26 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-decode.el: Add coding cookie for a soft hyphen that mm-shr uses.
2012-06-11 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus-art.el (gnus-article-read-summary-keys): Protect against the key
being bound to a lambda form.
2012-05-04 Wolfgang Jenkner <wjenkner@inode.at>
* gnus-picon.el (gnus-picon-properties): New defcustom.
(gnus-picon-create-glyph): Use it.
2012-06-10 Lars Magne Ingebrigtsen <larsi@gnus.org>
* shr.el: Add a iso-8859-1 cookie to make stuff work under other
locales.
* mm-decode.el (mm-display-part): Dissect archives when hitting `RET'
on a handle.
* gnus-sum.el (gnus-summary-limit-to-author): Use the current From
address as the default.
* nnfolder.el (nnfolder-save-buffer): Delete old versions silently.
It makes no sense to query the user about internal files.
* gnus-spec.el: Remove all the byte-compilation stuff, since
benchmarking shows that it doesn't help when entering large summary
buffers.
* gnus-util.el (gnus-byte-code): Remove.
* gnus-spec.el (gnus-update-format-specifications): Remove outdated
grouplens stuff.
2012-06-07 Stephen Eglen <S.J.Eglen@damtp.cam.ac.uk>
* message.el (message-buffers): Return all buffers derived from Message
to make `gnus-dired-attach' work with mu4e.
2012-05-28 Daiki Ueno <ueno@unixuser.org>
* mm-decode.el (mm-inhibit-auto-detect-attachment): New variable.
(mm-dissect-singlepart): Don't guess the MIME type of
application/octet-stream parts if mm-inhibit-auto-detect-attachment is
set.
(mm-dissect-multipart): Bind mm-inhibit-auto-detect-attachment if the
toplevel MIME type is multipart/encrypted.
2011-12-02 Wolfgang Jenkner <wjenkner@inode.at>
* gnus-agent.el (gnus-agent-save-active): Deal with the "groups" format.
In particular, add an optional argument and a docstring.
* gnus-start.el (gnus-groups-to-gnus-format): Use it.
* nntp.el (nntp-finish-retrieve-group-infos): Make `nntp-server-buffer'
current before calling `gnus-groups-to-gnus-format'.
Note that this was already the case for `gnus-active-to-gnus-format'.
2012-04-25 Katsumi Yamaoka <yamaoka@jpl.org>
* pop3.el (pop3-wait-for-messages): Fix retrieved data size calculation.
2012-04-12 Lars Magne Ingebrigtsen <larsi@gnus.org>
* mm-decode.el (mm-dissect-buffer): Doc fix.
* gnus-sum.el (gnus-handle-ephemeral-exit):
Avoid creating the group buffer if it doesn't exist.
* gnus-group.el (gnus-group-read-ephemeral-group): If no quit-config
is given, mark the group as ephemeral with the current window conf.
* gnus-sum.el (gnus-set-global-variables): Don't assume that the group
buffer exists, which it doesn't if we haven't started Gnus.
(gnus-summary-exit): Allow quitting when we don't have a group buffer.
2012-04-10 Lars Magne Ingebrigtsen <larsi@gnus.org>
* mml.el (mml-generate-mime):
Allow specifying what the top-level part type is.
* gnus-sum.el (gnus-auto-center-summary):
`scroll-margin' isn't defined on XEmacs.
2012-04-10 Philipp Haselwarter <philipp.haselwarter@gmx.de> (tiny change)
* gnus-sum.el (gnus-auto-center-summary):
Set default to respect `scroll-margin'.
2012-04-10 Elias Oltmanns <eo@nebensachen.de> (tiny change)
* gnus-cite.el (gnus-dissect-cited-text): A single line without
citation prefix within a block of cited text should be considered
part of that block *only* if it is a blank line.
2012-04-02 Katsumi Yamaoka <yamaoka@jpl.org>
* shr.el (shr-find-fill-point): Remove unused code; don't break a line
before kinsoku-bol characters nor within kinsoku-eol characters.
2012-03-27 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-sync.el (gnus-topic-alist, gnus-group-topic)
(gnus-topic-create-topic, gnus-topic-enter-dribble):
Silence compiler.
(gnus-sync-read): Use mapc instead of mapcar.
* mm-archive.el: Require mm-decode for some macros.
(gnus-recursive-directory-files, mailcap-extension-to-mime):
Silence the byte compiler.
(mm-archive-decoders): New function that returns the value of
the mm-archive-decoders variable.
* mm-decode.el:
Don't require mm-archive; autoload mm-archive functions instead.
(mm-dissect-singlepart): Use the function mm-archive-decoders.
* nnmail.el (mail-send-and-exit): Silence the byte compiler.
2012-03-12 Peter Munster <pmrb@free.fr>
* gnus-demon.el (gnus-demon-timers): Now a plist (function -> timer).
(gnus-demon-cancel): Ditto.
(gnus-demon-run-callback): When function cannot be called due to low
idleness, call it when idleness reaches the expected value, instead
of waiting another timer period.
(gnus-demon-init): Add `time' to arguments of call-back.
2012-03-22 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus.el: Register gnus-registry functions.
* gnus-registry.el (gnus-try-warping-via-registry):
Moved here and indent.
* gnus-int.el (gnus-warp-to-article):
Check whether the registry is enabled before warping.
2012-03-22 Dave Abrahams <dave@boostpro.com>
* gnus-sum.el (gnus-summary-insert-subject): Record information
in the registry about each article retrieved.
* gnus-int.el (gnus-select-group-with-message-id): New function.
(gnus-try-warping-via-registry): Ditto.
(gnus-warp-to-article): Fall back on the registry.
2012-03-22 Lars Magne Ingebrigtsen <larsi@gnus.org>
* nnimap.el (nnimap-fetch-partial-articles): Minor doc string fixup.
2012-03-22 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-msg.el (gnus-summary-resend-message-insert-gcc): Assume that
gnus-gcc-self-resent-messages may be a group parameter.
(gnus-summary-resend-message):
Don't encode encoded words in header when Gcc'ing resent message.
2012-03-19 Lars Magne Ingebrigtsen <larsi@gnus.org>
* shr.el (shr-insert): Treat non-breaking space just like normal
space. This seems to produce more pleasing results.
(shr-insert):
Only insert a blank line if we're starting from an image.
(shr-tag-br):
Allow <br> to end lines or to make a single blank line.
(shr-ensure-paragraph): Consider lines with white space to be blank.
2012-03-14 Christopher Schmidt <christopher@ch.ristopher.com>
* gnus-msg.el (gnus-inews-do-gcc): Add gnus-gcc-pre-body-encode-hook
and gnus-gcc-post-body-encode-hook.
2012-02-16 Lars Ingebrigtsen <larsi@gnus.org>
* mm-decode.el (mm-dissect-singlepart):
Guess what the type of application/octet-stream parts really is.
* gnus-sum.el (gnus-propagate-marks): Remove.
2012-02-15 Lars Ingebrigtsen <larsi@gnus.org>
* nntp.el (nntp-coding-system-for-read): Remove.
(nntp-coding-system-for-write): Ditto.
(nntp-open-connection): Just use `binary' directly.
2012-02-14 Teodor Zlatanov <tzz@lifelogs.com>
* registry.el (registry-usage-test, registry-persistence-test):
Move to tests/gnustest-registry.el.
(registry-make-testable-db, registry-match-test)
(registry-instantiation-test): Move to tests/gnustest-registry.el.
* gnus-registry.el (gnus-registry-misc-test)
(gnus-registry-usage-test): Move to tests/gnustest-registry.el.
* tests/gnustest-registry.el:
New file with the registry and gnus-registry ERT tests.
2012-02-13 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-msg.el (gnus-summary-resend-message):
Make gnus-summary-resend-message-insert-gcc be last item in
message-header-setup-hook.
2012-02-13 Lars Ingebrigtsen <larsi@gnus.org>
* nnfolder.el (nnfolder-marks-directory, nnfolder-marks-is-evil)
(nnfolder-marks, nnfolder-marks-file-suffix)
(nnfolder-marks-modtime): Remove.
(nnfolder-open-server): Don't use marks.
(nnfolder-request-delete-group): Ditto.
(nnfolder-request-rename-group): Ditto.
(nnfolder-request-set-mark, nnfolder-request-marks)
(nnfolder-group-marks-pathname, nnfolder-marks-changed-p)
(nnfolder-save-marks, nnfolder-open-marks): Remove.
* nnml.el (nnml-marks-is-evil, nnml-marks-file-name, nnml-marks)
(nnml-marks-modtime): Remove.
(nnml-request-delete-group): Don't use marks.
(nnml-request-rename-group): Ditto.
(nnml-request-set-mark, nnml-request-marks, nnml-marks-changed-p)
(nnml-save-marks, nnml-open-marks): Remove.
* nntp.el (nntp-marks-is-evil, nntp-marks-file-name, nntp-marks)
(nntp-marks-modtime, nntp-marks-directory, nntp-request-set-mark)
(nntp-request-marks, nntp-marks-directory, nntp-marks-changed-p)
(nntp-save-marks, nntp-open-marks, nntp-possibly-create-directory)
(nntp-server-to-method-cache): Remove.
* shr.el (shr-rescale-image): Fix wrong merge.
2012-02-15 Lars Ingebrigtsen <larsi@gnus.org>
* shr.el (shr-remove-trailing-whitespace):
Really delete the padding on too-wide lines.
2012-02-09 Lars Ingebrigtsen <larsi@gnus.org>
* mm-archive.el (mm-archive-dissect-and-inline): New function.
(mm-archive-dissect-and-inline): Fix up the undisplayer.
* mm-decode.el (mm-display-external): Output the text from
the command in the buffer after the command finished.
This makes text-based commands behave better.
2012-02-07 Lars Ingebrigtsen <larsi@gnus.org>
* message.el (smtpmail-smtp-user): Silence compiler warning.
2012-02-06 Lars Ingebrigtsen <larsi@gnus.org>
* message.el (message-multi-smtp-send-mail):
Also allow specifying the SMTP user name.
2012-02-06 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-sum.el (gnus-summary-article-map): Fix typo.
2012-02-02 Lars Ingebrigtsen <larsi@gnus.org>
* message.el (message-multi-smtp-send-mail): New function.
(message-multi-smtp-send-mail): Respect the X-Message-SMTP-Method
header to implement multi-SMTP functionality.
* gnus-agent.el (gnus-agent-send-mail-function): Removed.
(gnus-agentize): Don't set it.
(gnus-agent-send-mail): Don't use it.
* gnus-sum.el (gnus-summary-widget-backward):
New function and keystroke.
* shr.el (shr-put-image): Remove underlines from sliced images.
(shr-zoom-image): Compute the region to be replaced more correctly.
2012-02-02 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-msg.el (gnus-gcc-self-resent-messages): New user option.
(gnus-summary-resend-message-insert-gcc): New function.
(gnus-summary-resend-message): Modify message-header-setup-hook and
message-sent-hook to make it work for Gcc.
(gnus-inews-do-gcc): Update the number of unread articles of groups
that messages are Gcc'd to.
* message.el (message-resend): Run message-sent-hook to do Gcc.
2012-02-01 Lars Ingebrigtsen <larsi@gnus.org>
* gnus-registry.el (gnus-registry-fixup-registry):
Move the message to a higher level to silence compilation.
* gnus-art.el (gnus-shr-put-image): Take and pass on a `flags'
parameter to allow controlling the scaling.
* shr.el (shr-zoom-image): New command and keystroke.
(shr-put-image): Take a `size' flag to say how to scale the image.
* mm-archive.el (mm-dissect-archive): Use it to get all file names.
Use recursive deletion.
(mm-dissect-archive): Add support for zip files.
* gnus-util.el (gnus-recursive-directory-files): New function.
* mm-archive.el (mm-archive-list-files): Inline text and image parts.
(mm-archive-decoders): Add tgz support.
* mm-decode.el (mm-shr): Make sure that the HTML ends with a newline.
Otherwise inserting text into the Gnus buffer can look odd.
* gnus-art.el (gnus-mime-inline-part): Slight clean-up.
* mm-archive.el (mm-archive-decoders): Add support for tar.
* gnus.el (gnus-logo-color-alist): Change the colours for Ma Gnus.
* nnmail.el (nnmail-extra-headers): Add Cc to the default.
2012-01-31 Lars Ingebrigtsen <larsi@gnus.org>
* mm-decode.el (mm-dissect-singlepart): Check that the decoder exists.
* mm-archive.el: New file.
* mm-decode.el (mm-dissect-singlepart):
Use it to decode ms-tnef files.
* mm-util.el (mm-find-buffer-file-coding-system): Comment fix.
* message.el (message-goto-*): Make all the `message-goto-*' commands
push the mark before moving point. This makes it easier to go back
to where you came from after editing whatever you jumped to.
2012-01-07 Teodor Zlatanov <tzz@lifelogs.com>
* gnus-sync.el (gnus-sync-newsrc-groups): Quote normally.
(gnus-sync-lesync-pre-save-group-entry): Remove invalid invlists.
(gnus-sync-lesync-normalize-group-entry): Ignore a few more keys.
2011-11-09 Teodor Zlatanov <tzz@lifelogs.com>
* spam.el: Move BBDB autoloads.
(spam-exists-in-BBDB-p):
New function to do the BBDB search directly in BBDB 2 and 3.
(spam-check-BBDB): Use it.
(spam-enter-ham-BBDB): Use it.
2011-10-31 Peter Munster <pmrb@free.fr> (tiny change)
* gnus-group.el (gnus-group-get-new-news):
New parameter `one-level' for scanning exactly one level.
* gnus-start.el (gnus-get-unread-articles): Ditto.
2011-11-03 Teodor Zlatanov <tzz@lifelogs.com>
* gnus-sync.el: More commentary about setup.
2011-11-02 Teodor Zlatanov <tzz@lifelogs.com>
* gnus-sync.el: More commentary about `gnus-sync-read' issues.
2011-10-31 Teodor Zlatanov <tzz@lifelogs.com>
* gnus-sync.el: Improve docs about CouchDB admins.
2011-10-29 Teodor Zlatanov <tzz@lifelogs.com>
* gnus-sync.el (gnus-sync-lesync-setup): Fix salt when user setup is
not needed. Provide xmlplistread list function to produce XML plist
output for non-Gnus LeSync clients.
2011-10-27 Teodor Zlatanov <tzz@lifelogs.com>
* gnus-sync.el: Add LeSync synchronization backend and logic to read
and save against it. Group subscriptions, read marks, other marks,
subscription levels, topic names, and topic offsets (the group's
position within the topic) are saved. This is an experimental
backend and may change significantly. Load json.el from
the gnus-fallback-lib if it's not available otherwise.
(gnus-sync-save): Don't use `apply-partially' because of XEmacs.
2011-04-20 David Engster <dengste@eml.cc>
* tests/gnustest-nntp.el: New file for simple NNTP testing.
2012-06-26 22:52:31 +00:00
|
|
|
(mml-generate-mime-1
|
|
|
|
(nconc (list 'multipart (cons 'type (or multipart-type "mixed")))
|
2014-03-23 23:13:36 +00:00
|
|
|
cont))))
|
2011-12-01 04:55:39 +00:00
|
|
|
(setq options message-options)
|
|
|
|
(buffer-string))
|
|
|
|
(setq message-options options)))))
|
2000-09-19 13:40:08 +00:00
|
|
|
|
2020-02-19 14:51:43 +01:00
|
|
|
(defun mml-expand-all-html-into-multipart-related (cont)
|
|
|
|
(cond ((and (eq (car cont) 'part)
|
|
|
|
(equal (cdr (assq 'type cont)) "text/html"))
|
|
|
|
(mml-expand-html-into-multipart-related cont))
|
|
|
|
((eq (car cont) 'multipart)
|
|
|
|
(let ((cur (cdr cont)))
|
|
|
|
(while (consp cur)
|
|
|
|
(setcar cur (mml-expand-all-html-into-multipart-related (car cur)))
|
|
|
|
(setf cur (cdr cur))))
|
|
|
|
cont)
|
|
|
|
(t cont)))
|
|
|
|
|
2014-03-23 23:13:36 +00:00
|
|
|
(defun mml-expand-html-into-multipart-related (cont)
|
|
|
|
(let ((new-parts nil)
|
|
|
|
(cid 1))
|
|
|
|
(mm-with-multibyte-buffer
|
|
|
|
(insert (cdr (assq 'contents cont)))
|
|
|
|
(goto-char (point-min))
|
|
|
|
(with-syntax-table mml-syntax-table
|
|
|
|
(while (re-search-forward "<img\\b" nil t)
|
|
|
|
(goto-char (match-beginning 0))
|
|
|
|
(let* ((start (point))
|
|
|
|
(img (nth 2
|
|
|
|
(nth 2
|
|
|
|
(libxml-parse-html-region
|
|
|
|
(point) (progn (forward-sexp) (point))))))
|
|
|
|
(end (point))
|
|
|
|
(parsed (url-generic-parse-url (cdr (assq 'src (cadr img))))))
|
|
|
|
(when (and (null (url-type parsed))
|
|
|
|
(url-filename parsed)
|
|
|
|
(file-exists-p (url-filename parsed)))
|
|
|
|
(goto-char start)
|
|
|
|
(when (search-forward (url-filename parsed) end t)
|
|
|
|
(let ((cid (format "fsf.%d" cid)))
|
|
|
|
(replace-match (concat "cid:" cid) t t)
|
2016-05-29 17:59:33 +02:00
|
|
|
(push (list cid (url-filename parsed)
|
|
|
|
(get-text-property start 'display))
|
|
|
|
new-parts))
|
2014-03-23 23:13:36 +00:00
|
|
|
(setq cid (1+ cid)))))))
|
|
|
|
;; We have local images that we want to include.
|
2020-03-14 12:44:55 +01:00
|
|
|
(when new-parts
|
2014-03-23 23:13:36 +00:00
|
|
|
(setcdr (assq 'contents cont) (buffer-string))
|
|
|
|
(setq cont
|
|
|
|
(nconc (list 'multipart (cons 'type "related"))
|
|
|
|
(list cont)))
|
|
|
|
(dolist (new-part (nreverse new-parts))
|
|
|
|
(setq cont
|
|
|
|
(nconc cont
|
|
|
|
(list `(part (type . "image/png")
|
2016-05-29 17:59:33 +02:00
|
|
|
,@(mml--possibly-alter-image
|
|
|
|
(nth 1 new-part)
|
|
|
|
(nth 2 new-part))
|
2014-03-23 23:13:36 +00:00
|
|
|
(id . ,(concat "<" (nth 0 new-part)
|
2020-03-14 12:44:55 +01:00
|
|
|
">"))))))))
|
|
|
|
cont)))
|
2014-03-23 23:13:36 +00:00
|
|
|
|
2018-02-27 18:43:23 -05:00
|
|
|
(autoload 'image-property "image")
|
|
|
|
|
|
|
|
;; FIXME presumably (built-in) ImageMagick could replace exiftool?
|
2016-05-29 17:59:33 +02:00
|
|
|
(defun mml--possibly-alter-image (file-name image)
|
|
|
|
(if (or (null image)
|
|
|
|
(not (consp image))
|
|
|
|
(not (eq (car image) 'image))
|
|
|
|
(not (image-property image :rotation))
|
|
|
|
(not (executable-find "exiftool")))
|
|
|
|
`((filename . ,file-name))
|
|
|
|
`((filename . ,file-name)
|
|
|
|
(buffer
|
|
|
|
.
|
|
|
|
,(with-current-buffer (mml-generate-new-buffer " *mml rotation*")
|
|
|
|
(set-buffer-multibyte nil)
|
|
|
|
(call-process "exiftool"
|
|
|
|
file-name
|
|
|
|
(list (current-buffer) nil)
|
|
|
|
nil
|
|
|
|
(format "-Orientation#=%d"
|
|
|
|
(cl-case (truncate
|
|
|
|
(image-property image :rotation))
|
|
|
|
(0 0)
|
|
|
|
(90 6)
|
|
|
|
(180 3)
|
|
|
|
(270 8)
|
|
|
|
(otherwise 0)))
|
|
|
|
"-o" "-"
|
|
|
|
"-")
|
|
|
|
(current-buffer))))))
|
|
|
|
|
2000-09-19 13:40:08 +00:00
|
|
|
(defun mml-generate-mime-1 (cont)
|
2004-09-04 13:13:48 +00:00
|
|
|
(let ((mm-use-ultra-safe-encoding
|
|
|
|
(or mm-use-ultra-safe-encoding (assq 'sign cont))))
|
|
|
|
(save-restriction
|
|
|
|
(narrow-to-region (point) (point))
|
|
|
|
(mml-tweak-part cont)
|
|
|
|
(cond
|
|
|
|
((or (eq (car cont) 'part) (eq (car cont) 'mml))
|
2005-07-31 00:12:23 +00:00
|
|
|
(let* ((raw (cdr (assq 'raw cont)))
|
|
|
|
(filename (cdr (assq 'filename cont)))
|
|
|
|
(type (or (cdr (assq 'type cont))
|
2005-08-02 07:21:08 +00:00
|
|
|
(if filename
|
2021-01-30 00:40:21 -05:00
|
|
|
(or (mm-default-file-type filename)
|
2005-08-02 07:21:08 +00:00
|
|
|
"application/octet-stream")
|
|
|
|
"text/plain")))
|
2007-10-28 09:18:39 +00:00
|
|
|
(charset (cdr (assq 'charset cont)))
|
|
|
|
(coding (mm-charset-to-coding-system charset))
|
|
|
|
encoding flowed coded)
|
|
|
|
(cond ((eq coding 'ascii)
|
|
|
|
(setq charset nil
|
|
|
|
coding nil))
|
|
|
|
(charset
|
2008-12-17 00:34:16 +00:00
|
|
|
;; The value of `charset' might be a bogus alias that
|
|
|
|
;; `mm-charset-synonym-alist' provides, like `utf8',
|
|
|
|
;; so we prefer the MIME charset that Emacs knows for
|
|
|
|
;; the coding system `coding'.
|
|
|
|
(setq charset (or (mm-coding-system-to-mime-charset coding)
|
|
|
|
(intern (downcase charset))))))
|
2004-09-04 13:13:48 +00:00
|
|
|
(if (and (not raw)
|
|
|
|
(member (car (split-string type "/")) '("text" "message")))
|
|
|
|
(progn
|
|
|
|
(with-temp-buffer
|
2017-05-31 23:21:27 +00:00
|
|
|
(cond
|
|
|
|
((cdr (assq 'buffer cont))
|
|
|
|
(insert-buffer-substring (cdr (assq 'buffer cont))))
|
|
|
|
((and filename
|
|
|
|
(not (equal (cdr (assq 'nofile cont)) "yes")))
|
|
|
|
(let ((coding-system-for-read coding))
|
|
|
|
(mm-insert-file-contents filename)))
|
|
|
|
((eq 'mml (car cont))
|
|
|
|
(insert (cdr (assq 'contents cont))))
|
|
|
|
(t
|
|
|
|
(save-restriction
|
|
|
|
(narrow-to-region (point) (point))
|
|
|
|
(insert (cdr (assq 'contents cont)))
|
|
|
|
;; Remove quotes from quoted tags.
|
|
|
|
(goto-char (point-min))
|
|
|
|
(while (re-search-forward
|
|
|
|
"<#!+/?\\(part\\|multipart\\|external\\|mml\\|secure\\)"
|
|
|
|
nil t)
|
|
|
|
(delete-region (+ (match-beginning 0) 2)
|
|
|
|
(+ (match-beginning 0) 3))))))
|
2004-09-04 13:13:48 +00:00
|
|
|
(cond
|
|
|
|
((eq (car cont) 'mml)
|
|
|
|
(let ((mml-boundary (mml-compute-boundary cont))
|
2005-07-31 00:12:23 +00:00
|
|
|
;; It is necessary for the case where this
|
|
|
|
;; function is called recursively since
|
|
|
|
;; `m-g-d-t' will be bound to "message/rfc822"
|
|
|
|
;; when encoding an article to be forwarded.
|
2004-09-04 13:13:48 +00:00
|
|
|
(mml-generate-default-type "text/plain"))
|
2010-05-06 03:27:20 +00:00
|
|
|
(mml-to-mime)
|
|
|
|
;; Update handle so mml-compute-boundary can
|
|
|
|
;; detect collisions with the nested parts.
|
2011-09-26 21:59:47 +00:00
|
|
|
(unless mml-inhibit-compute-boundary
|
|
|
|
(setcdr (assoc 'contents cont) (buffer-string))))
|
2004-09-04 13:13:48 +00:00
|
|
|
(let ((mm-7bit-chars (concat mm-7bit-chars "\x1b")))
|
|
|
|
;; ignore 0x1b, it is part of iso-2022-jp
|
|
|
|
(setq encoding (mm-body-7-or-8))))
|
|
|
|
((string= (car (split-string type "/")) "message")
|
|
|
|
(let ((mm-7bit-chars (concat mm-7bit-chars "\x1b")))
|
|
|
|
;; ignore 0x1b, it is part of iso-2022-jp
|
|
|
|
(setq encoding (mm-body-7-or-8))))
|
|
|
|
(t
|
|
|
|
;; Only perform format=flowed filling on text/plain
|
|
|
|
;; parts where there either isn't a format parameter
|
|
|
|
;; in the mml tag or it says "flowed" and there
|
|
|
|
;; actually are hard newlines in the text.
|
|
|
|
(let (use-hard-newlines)
|
2010-10-16 01:55:08 +00:00
|
|
|
(when (and mml-enable-flowed
|
2017-05-31 23:21:27 +00:00
|
|
|
(string= type "text/plain")
|
2004-09-27 07:44:44 +00:00
|
|
|
(not (string= (cdr (assq 'sign cont)) "pgp"))
|
2004-09-04 13:13:48 +00:00
|
|
|
(or (null (assq 'format cont))
|
|
|
|
(string= (cdr (assq 'format cont))
|
|
|
|
"flowed"))
|
|
|
|
(setq use-hard-newlines
|
|
|
|
(text-property-any
|
|
|
|
(point-min) (point-max) 'hard 't)))
|
|
|
|
(fill-flowed-encode)
|
|
|
|
;; Indicate that `mml-insert-mime-headers' should
|
|
|
|
;; insert a "; format=flowed" string unless the
|
|
|
|
;; user has already specified it.
|
|
|
|
(setq flowed (null (assq 'format cont)))))
|
2017-05-31 23:21:27 +00:00
|
|
|
;; Prefer `utf-8' for text/calendar parts.
|
|
|
|
(if (or charset
|
|
|
|
(not (string= type "text/calendar")))
|
|
|
|
(setq charset (mm-encode-body charset))
|
|
|
|
(let ((mm-coding-system-priorities
|
|
|
|
(cons 'utf-8 mm-coding-system-priorities)))
|
|
|
|
(setq charset (mm-encode-body))))
|
2004-09-04 13:13:48 +00:00
|
|
|
(setq encoding (mm-body-encoding
|
|
|
|
charset (cdr (assq 'encoding cont))))))
|
|
|
|
(setq coded (buffer-string)))
|
|
|
|
(mml-insert-mime-headers cont type charset encoding flowed)
|
|
|
|
(insert "\n")
|
|
|
|
(insert coded))
|
2017-01-25 17:28:17 +01:00
|
|
|
(with-temp-buffer
|
|
|
|
(set-buffer-multibyte nil)
|
2004-09-04 13:13:48 +00:00
|
|
|
(cond
|
|
|
|
((cdr (assq 'buffer cont))
|
2017-05-31 23:21:27 +00:00
|
|
|
;; multibyte string that inserted to a unibyte buffer
|
|
|
|
;; will be converted to the unibyte version safely.
|
|
|
|
(insert (with-current-buffer (cdr (assq 'buffer cont))
|
|
|
|
(buffer-string))))
|
2005-07-31 00:12:23 +00:00
|
|
|
((and filename
|
2004-09-04 13:13:48 +00:00
|
|
|
(not (equal (cdr (assq 'nofile cont)) "yes")))
|
|
|
|
(let ((coding-system-for-read mm-binary-coding-system))
|
2017-05-31 23:21:27 +00:00
|
|
|
(mm-insert-file-contents filename nil nil nil nil t))
|
|
|
|
(unless charset
|
|
|
|
(setq charset (mm-coding-system-to-mime-charset
|
|
|
|
(mm-find-buffer-file-coding-system
|
|
|
|
filename)))))
|
2004-09-04 13:13:48 +00:00
|
|
|
(t
|
2006-03-03 07:45:27 +00:00
|
|
|
(let ((contents (cdr (assq 'contents cont))))
|
2019-05-19 20:26:48 +02:00
|
|
|
(if (multibyte-string-p contents)
|
2006-03-03 07:45:27 +00:00
|
|
|
(progn
|
2017-05-31 23:21:27 +00:00
|
|
|
(set-buffer-multibyte t)
|
2006-03-03 07:45:27 +00:00
|
|
|
(insert contents)
|
2007-08-27 04:00:19 +00:00
|
|
|
(unless raw
|
2007-10-28 09:18:39 +00:00
|
|
|
(setq charset (mm-encode-body charset))))
|
2006-03-03 07:45:27 +00:00
|
|
|
(insert contents)))))
|
2009-09-09 09:28:43 +00:00
|
|
|
(if (setq encoding (cdr (assq 'encoding cont)))
|
|
|
|
(setq encoding (intern (downcase encoding))))
|
2017-05-31 23:21:27 +00:00
|
|
|
(setq encoding (mm-encode-buffer type encoding))
|
|
|
|
(setq coded (decode-coding-string (buffer-string) 'us-ascii)))
|
2004-09-04 13:13:48 +00:00
|
|
|
(mml-insert-mime-headers cont type charset encoding nil)
|
2007-08-27 04:00:19 +00:00
|
|
|
(insert "\n" coded))))
|
2004-09-04 13:13:48 +00:00
|
|
|
((eq (car cont) 'external)
|
|
|
|
(insert "Content-Type: message/external-body")
|
|
|
|
(let ((parameters (mml-parameter-string
|
|
|
|
cont '(expiration size permission)))
|
|
|
|
(name (cdr (assq 'name cont)))
|
|
|
|
(url (cdr (assq 'url cont))))
|
|
|
|
(when name
|
|
|
|
(setq name (mml-parse-file-name name))
|
|
|
|
(if (stringp name)
|
|
|
|
(mml-insert-parameter
|
|
|
|
(mail-header-encode-parameter "name" name)
|
|
|
|
"access-type=local-file")
|
2000-09-19 13:40:08 +00:00
|
|
|
(mml-insert-parameter
|
2004-09-04 13:13:48 +00:00
|
|
|
(mail-header-encode-parameter
|
|
|
|
"name" (file-name-nondirectory (nth 2 name)))
|
|
|
|
(mail-header-encode-parameter "site" (nth 1 name))
|
|
|
|
(mail-header-encode-parameter
|
|
|
|
"directory" (file-name-directory (nth 2 name))))
|
|
|
|
(mml-insert-parameter
|
|
|
|
(concat "access-type="
|
|
|
|
(if (member (nth 0 name) '("ftp@" "anonymous@"))
|
|
|
|
"anon-ftp"
|
|
|
|
"ftp")))))
|
|
|
|
(when url
|
2000-09-19 13:40:08 +00:00
|
|
|
(mml-insert-parameter
|
2004-09-04 13:13:48 +00:00
|
|
|
(mail-header-encode-parameter "url" url)
|
|
|
|
"access-type=url"))
|
|
|
|
(when parameters
|
|
|
|
(mml-insert-parameter-string
|
2005-07-31 00:12:23 +00:00
|
|
|
cont '(expiration size permission)))
|
|
|
|
(insert "\n\n")
|
|
|
|
(insert "Content-Type: "
|
|
|
|
(or (cdr (assq 'type cont))
|
2005-08-02 07:21:08 +00:00
|
|
|
(if name
|
2021-01-30 00:40:21 -05:00
|
|
|
(or (mm-default-file-type name)
|
2005-08-02 07:21:08 +00:00
|
|
|
"application/octet-stream")
|
|
|
|
"text/plain"))
|
2005-07-31 00:12:23 +00:00
|
|
|
"\n")
|
|
|
|
(insert "Content-ID: " (message-make-message-id) "\n")
|
|
|
|
(insert "Content-Transfer-Encoding: "
|
|
|
|
(or (cdr (assq 'encoding cont)) "binary"))
|
|
|
|
(insert "\n\n")
|
|
|
|
(insert (or (cdr (assq 'contents cont))))
|
|
|
|
(insert "\n")))
|
2004-09-04 13:13:48 +00:00
|
|
|
((eq (car cont) 'multipart)
|
|
|
|
(let* ((type (or (cdr (assq 'type cont)) "mixed"))
|
|
|
|
(mml-generate-default-type (if (equal type "digest")
|
|
|
|
"message/rfc822"
|
|
|
|
"text/plain"))
|
|
|
|
(handler (assoc type mml-generate-multipart-alist)))
|
|
|
|
(if handler
|
|
|
|
(funcall (cdr handler) cont)
|
|
|
|
;; No specific handler. Use default one.
|
|
|
|
(let ((mml-boundary (mml-compute-boundary cont)))
|
|
|
|
(insert (format "Content-Type: multipart/%s; boundary=\"%s\""
|
|
|
|
type mml-boundary)
|
|
|
|
(if (cdr (assq 'start cont))
|
|
|
|
(format "; start=\"%s\"\n" (cdr (assq 'start cont)))
|
|
|
|
"\n"))
|
|
|
|
(let ((cont cont) part)
|
|
|
|
(while (setq part (pop cont))
|
|
|
|
;; Skip `multipart' and attributes.
|
|
|
|
(when (and (consp part) (consp (cdr part)))
|
|
|
|
(insert "\n--" mml-boundary "\n")
|
2006-02-04 00:58:23 +00:00
|
|
|
(mml-generate-mime-1 part)
|
|
|
|
(goto-char (point-max)))))
|
2004-09-04 13:13:48 +00:00
|
|
|
(insert "\n--" mml-boundary "--\n")))))
|
|
|
|
(t
|
|
|
|
(error "Invalid element: %S" cont)))
|
|
|
|
;; handle sign & encrypt tags in a semi-smart way.
|
|
|
|
(let ((sign-item (assoc (cdr (assq 'sign cont)) mml-sign-alist))
|
|
|
|
(encrypt-item (assoc (cdr (assq 'encrypt cont))
|
|
|
|
mml-encrypt-alist))
|
|
|
|
sender recipients)
|
|
|
|
(when (or sign-item encrypt-item)
|
|
|
|
(when (setq sender (cdr (assq 'sender cont)))
|
|
|
|
(message-options-set 'mml-sender sender)
|
|
|
|
(message-options-set 'message-sender sender))
|
|
|
|
(if (setq recipients (cdr (assq 'recipients cont)))
|
|
|
|
(message-options-set 'message-recipients recipients))
|
2005-07-31 00:12:23 +00:00
|
|
|
(let ((style (mml-signencrypt-style
|
gnus: replace cl with cl-lib
* lisp/gnus/gnus-agent.el, lisp/gnus/gnus-art.el:
* lisp/gnus/gnus-async.el, lisp/gnus/gnus-cache.el:
* lisp/gnus/gnus-demon.el, lisp/gnus/gnus-group.el:
* lisp/gnus/gnus-icalendar.el, lisp/gnus/gnus-logic.el:
* lisp/gnus/gnus-msg.el, lisp/gnus/gnus-picon.el:
* lisp/gnus/gnus-registry.el, lisp/gnus/gnus-salt.el:
* lisp/gnus/gnus-score.el, lisp/gnus/gnus-spec.el:
* lisp/gnus/gnus-srvr.el, lisp/gnus/gnus-start.el:
* lisp/gnus/gnus-sum.el, lisp/gnus/gnus-topic.el:
* lisp/gnus/gnus-util.el, lisp/gnus/gnus-uu.el, lisp/gnus/gnus-win.el:
* lisp/gnus/mail-source.el, lisp/gnus/mm-decode.el:
* lisp/gnus/mm-encode.el, lisp/gnus/mm-url.el, lisp/gnus/mm-view.el:
* lisp/gnus/mml-smime.el, lisp/gnus/mml.el, lisp/gnus/mml2015.el:
* lisp/gnus/nnbabyl.el, lisp/gnus/nndoc.el, lisp/gnus/nneething.el:
* lisp/gnus/nnheader.el, lisp/gnus/nnimap.el, lisp/gnus/nnmail.el:
* lisp/gnus/nnmaildir.el, lisp/gnus/nnoo.el, lisp/gnus/nnrss.el:
* lisp/gnus/nnspool.el, lisp/gnus/nntp.el, lisp/gnus/nnvirtual.el:
* lisp/gnus/nnweb.el, lisp/gnus/spam.el: Replace cl with cl-lib.
* lisp/gnus/canlock.el, lisp/gnus/gnus-bcklg.el:
* lisp/gnus/gnus-cite.el, lisp/gnus/gnus-cloud.el:
* lisp/gnus/gnus-draft.el, lisp/gnus/gnus-dup.el:
* lisp/gnus/gnus-fun.el, lisp/gnus/gnus-html.el:
* lisp/gnus/gnus-int.el, lisp/gnus/gnus-kill.el, lisp/gnus/gnus-ml.el:
* lisp/gnus/gnus-mlspl.el, lisp/gnus/gnus-range.el:
* lisp/gnus/gnus-undo.el, lisp/gnus/gnus-vm.el:
* lisp/gnus/mm-partial.el, lisp/gnus/mm-uu.el, lisp/gnus/mml1991.el:
* lisp/gnus/nnagent.el, lisp/gnus/nndiary.el, lisp/gnus/nndir.el:
* lisp/gnus/nndraft.el, lisp/gnus/nnfolder.el, lisp/gnus/nngateway.el:
* lisp/gnus/nnmairix.el, lisp/gnus/nnmbox.el, lisp/gnus/nnmh.el:
* lisp/gnus/nnml.el, lisp/gnus/score-mode.el, lisp/gnus/smiley.el:
No need for cl.
2018-03-23 16:13:09 -04:00
|
|
|
(car (or sign-item encrypt-item)))))
|
2004-09-04 13:13:48 +00:00
|
|
|
;; check if: we're both signing & encrypting, both methods
|
|
|
|
;; are the same (why would they be different?!), and that
|
|
|
|
;; the signencrypt style allows for combined operation.
|
gnus: replace cl with cl-lib
* lisp/gnus/gnus-agent.el, lisp/gnus/gnus-art.el:
* lisp/gnus/gnus-async.el, lisp/gnus/gnus-cache.el:
* lisp/gnus/gnus-demon.el, lisp/gnus/gnus-group.el:
* lisp/gnus/gnus-icalendar.el, lisp/gnus/gnus-logic.el:
* lisp/gnus/gnus-msg.el, lisp/gnus/gnus-picon.el:
* lisp/gnus/gnus-registry.el, lisp/gnus/gnus-salt.el:
* lisp/gnus/gnus-score.el, lisp/gnus/gnus-spec.el:
* lisp/gnus/gnus-srvr.el, lisp/gnus/gnus-start.el:
* lisp/gnus/gnus-sum.el, lisp/gnus/gnus-topic.el:
* lisp/gnus/gnus-util.el, lisp/gnus/gnus-uu.el, lisp/gnus/gnus-win.el:
* lisp/gnus/mail-source.el, lisp/gnus/mm-decode.el:
* lisp/gnus/mm-encode.el, lisp/gnus/mm-url.el, lisp/gnus/mm-view.el:
* lisp/gnus/mml-smime.el, lisp/gnus/mml.el, lisp/gnus/mml2015.el:
* lisp/gnus/nnbabyl.el, lisp/gnus/nndoc.el, lisp/gnus/nneething.el:
* lisp/gnus/nnheader.el, lisp/gnus/nnimap.el, lisp/gnus/nnmail.el:
* lisp/gnus/nnmaildir.el, lisp/gnus/nnoo.el, lisp/gnus/nnrss.el:
* lisp/gnus/nnspool.el, lisp/gnus/nntp.el, lisp/gnus/nnvirtual.el:
* lisp/gnus/nnweb.el, lisp/gnus/spam.el: Replace cl with cl-lib.
* lisp/gnus/canlock.el, lisp/gnus/gnus-bcklg.el:
* lisp/gnus/gnus-cite.el, lisp/gnus/gnus-cloud.el:
* lisp/gnus/gnus-draft.el, lisp/gnus/gnus-dup.el:
* lisp/gnus/gnus-fun.el, lisp/gnus/gnus-html.el:
* lisp/gnus/gnus-int.el, lisp/gnus/gnus-kill.el, lisp/gnus/gnus-ml.el:
* lisp/gnus/gnus-mlspl.el, lisp/gnus/gnus-range.el:
* lisp/gnus/gnus-undo.el, lisp/gnus/gnus-vm.el:
* lisp/gnus/mm-partial.el, lisp/gnus/mm-uu.el, lisp/gnus/mml1991.el:
* lisp/gnus/nnagent.el, lisp/gnus/nndiary.el, lisp/gnus/nndir.el:
* lisp/gnus/nndraft.el, lisp/gnus/nnfolder.el, lisp/gnus/nngateway.el:
* lisp/gnus/nnmairix.el, lisp/gnus/nnmbox.el, lisp/gnus/nnmh.el:
* lisp/gnus/nnml.el, lisp/gnus/score-mode.el, lisp/gnus/smiley.el:
No need for cl.
2018-03-23 16:13:09 -04:00
|
|
|
(if (and sign-item encrypt-item (equal (car sign-item)
|
|
|
|
(car encrypt-item))
|
2004-09-04 13:13:48 +00:00
|
|
|
(equal style 'combined))
|
|
|
|
(funcall (nth 1 encrypt-item) cont t)
|
|
|
|
;; otherwise, revert to the old behavior.
|
|
|
|
(when sign-item
|
|
|
|
(funcall (nth 1 sign-item) cont))
|
|
|
|
(when encrypt-item
|
|
|
|
(funcall (nth 1 encrypt-item) cont)))))))))
|
2000-09-19 13:40:08 +00:00
|
|
|
|
|
|
|
(defun mml-compute-boundary (cont)
|
|
|
|
"Return a unique boundary that does not exist in CONT."
|
|
|
|
(let ((mml-boundary (funcall mml-boundary-function
|
gnus: replace cl with cl-lib
* lisp/gnus/gnus-agent.el, lisp/gnus/gnus-art.el:
* lisp/gnus/gnus-async.el, lisp/gnus/gnus-cache.el:
* lisp/gnus/gnus-demon.el, lisp/gnus/gnus-group.el:
* lisp/gnus/gnus-icalendar.el, lisp/gnus/gnus-logic.el:
* lisp/gnus/gnus-msg.el, lisp/gnus/gnus-picon.el:
* lisp/gnus/gnus-registry.el, lisp/gnus/gnus-salt.el:
* lisp/gnus/gnus-score.el, lisp/gnus/gnus-spec.el:
* lisp/gnus/gnus-srvr.el, lisp/gnus/gnus-start.el:
* lisp/gnus/gnus-sum.el, lisp/gnus/gnus-topic.el:
* lisp/gnus/gnus-util.el, lisp/gnus/gnus-uu.el, lisp/gnus/gnus-win.el:
* lisp/gnus/mail-source.el, lisp/gnus/mm-decode.el:
* lisp/gnus/mm-encode.el, lisp/gnus/mm-url.el, lisp/gnus/mm-view.el:
* lisp/gnus/mml-smime.el, lisp/gnus/mml.el, lisp/gnus/mml2015.el:
* lisp/gnus/nnbabyl.el, lisp/gnus/nndoc.el, lisp/gnus/nneething.el:
* lisp/gnus/nnheader.el, lisp/gnus/nnimap.el, lisp/gnus/nnmail.el:
* lisp/gnus/nnmaildir.el, lisp/gnus/nnoo.el, lisp/gnus/nnrss.el:
* lisp/gnus/nnspool.el, lisp/gnus/nntp.el, lisp/gnus/nnvirtual.el:
* lisp/gnus/nnweb.el, lisp/gnus/spam.el: Replace cl with cl-lib.
* lisp/gnus/canlock.el, lisp/gnus/gnus-bcklg.el:
* lisp/gnus/gnus-cite.el, lisp/gnus/gnus-cloud.el:
* lisp/gnus/gnus-draft.el, lisp/gnus/gnus-dup.el:
* lisp/gnus/gnus-fun.el, lisp/gnus/gnus-html.el:
* lisp/gnus/gnus-int.el, lisp/gnus/gnus-kill.el, lisp/gnus/gnus-ml.el:
* lisp/gnus/gnus-mlspl.el, lisp/gnus/gnus-range.el:
* lisp/gnus/gnus-undo.el, lisp/gnus/gnus-vm.el:
* lisp/gnus/mm-partial.el, lisp/gnus/mm-uu.el, lisp/gnus/mml1991.el:
* lisp/gnus/nnagent.el, lisp/gnus/nndiary.el, lisp/gnus/nndir.el:
* lisp/gnus/nndraft.el, lisp/gnus/nnfolder.el, lisp/gnus/nngateway.el:
* lisp/gnus/nnmairix.el, lisp/gnus/nnmbox.el, lisp/gnus/nnmh.el:
* lisp/gnus/nnml.el, lisp/gnus/score-mode.el, lisp/gnus/smiley.el:
No need for cl.
2018-03-23 16:13:09 -04:00
|
|
|
(cl-incf mml-multipart-number))))
|
2011-09-22 04:43:36 +00:00
|
|
|
(unless mml-inhibit-compute-boundary
|
|
|
|
;; This function tries again and again until it has found
|
|
|
|
;; a unique boundary.
|
|
|
|
(while (not (catch 'not-unique
|
|
|
|
(mml-compute-boundary-1 cont)))))
|
2000-09-19 13:40:08 +00:00
|
|
|
mml-boundary))
|
|
|
|
|
|
|
|
(defun mml-compute-boundary-1 (cont)
|
2011-09-22 04:43:36 +00:00
|
|
|
(cond
|
|
|
|
((member (car cont) '(part mml))
|
|
|
|
(mm-with-multibyte-buffer
|
|
|
|
(let ((mml-inhibit-compute-boundary t)
|
|
|
|
(mml-multipart-number 0)
|
|
|
|
mml-sign-alist mml-encrypt-alist)
|
|
|
|
(mml-generate-mime-1 cont))
|
|
|
|
(goto-char (point-min))
|
|
|
|
(when (re-search-forward (concat "^--" (regexp-quote mml-boundary))
|
|
|
|
nil t)
|
|
|
|
(setq mml-boundary (funcall mml-boundary-function
|
gnus: replace cl with cl-lib
* lisp/gnus/gnus-agent.el, lisp/gnus/gnus-art.el:
* lisp/gnus/gnus-async.el, lisp/gnus/gnus-cache.el:
* lisp/gnus/gnus-demon.el, lisp/gnus/gnus-group.el:
* lisp/gnus/gnus-icalendar.el, lisp/gnus/gnus-logic.el:
* lisp/gnus/gnus-msg.el, lisp/gnus/gnus-picon.el:
* lisp/gnus/gnus-registry.el, lisp/gnus/gnus-salt.el:
* lisp/gnus/gnus-score.el, lisp/gnus/gnus-spec.el:
* lisp/gnus/gnus-srvr.el, lisp/gnus/gnus-start.el:
* lisp/gnus/gnus-sum.el, lisp/gnus/gnus-topic.el:
* lisp/gnus/gnus-util.el, lisp/gnus/gnus-uu.el, lisp/gnus/gnus-win.el:
* lisp/gnus/mail-source.el, lisp/gnus/mm-decode.el:
* lisp/gnus/mm-encode.el, lisp/gnus/mm-url.el, lisp/gnus/mm-view.el:
* lisp/gnus/mml-smime.el, lisp/gnus/mml.el, lisp/gnus/mml2015.el:
* lisp/gnus/nnbabyl.el, lisp/gnus/nndoc.el, lisp/gnus/nneething.el:
* lisp/gnus/nnheader.el, lisp/gnus/nnimap.el, lisp/gnus/nnmail.el:
* lisp/gnus/nnmaildir.el, lisp/gnus/nnoo.el, lisp/gnus/nnrss.el:
* lisp/gnus/nnspool.el, lisp/gnus/nntp.el, lisp/gnus/nnvirtual.el:
* lisp/gnus/nnweb.el, lisp/gnus/spam.el: Replace cl with cl-lib.
* lisp/gnus/canlock.el, lisp/gnus/gnus-bcklg.el:
* lisp/gnus/gnus-cite.el, lisp/gnus/gnus-cloud.el:
* lisp/gnus/gnus-draft.el, lisp/gnus/gnus-dup.el:
* lisp/gnus/gnus-fun.el, lisp/gnus/gnus-html.el:
* lisp/gnus/gnus-int.el, lisp/gnus/gnus-kill.el, lisp/gnus/gnus-ml.el:
* lisp/gnus/gnus-mlspl.el, lisp/gnus/gnus-range.el:
* lisp/gnus/gnus-undo.el, lisp/gnus/gnus-vm.el:
* lisp/gnus/mm-partial.el, lisp/gnus/mm-uu.el, lisp/gnus/mml1991.el:
* lisp/gnus/nnagent.el, lisp/gnus/nndiary.el, lisp/gnus/nndir.el:
* lisp/gnus/nndraft.el, lisp/gnus/nnfolder.el, lisp/gnus/nngateway.el:
* lisp/gnus/nnmairix.el, lisp/gnus/nnmbox.el, lisp/gnus/nnmh.el:
* lisp/gnus/nnml.el, lisp/gnus/score-mode.el, lisp/gnus/smiley.el:
No need for cl.
2018-03-23 16:13:09 -04:00
|
|
|
(cl-incf mml-multipart-number)))
|
2011-09-22 04:43:36 +00:00
|
|
|
(throw 'not-unique nil))))
|
|
|
|
((eq (car cont) 'multipart)
|
2021-01-30 00:35:24 -05:00
|
|
|
(mapc #'mml-compute-boundary-1 (cddr cont))))
|
2011-09-22 04:43:36 +00:00
|
|
|
t)
|
2000-09-19 13:40:08 +00:00
|
|
|
|
|
|
|
(defun mml-make-boundary (number)
|
|
|
|
(concat (make-string (% number 60) ?=)
|
|
|
|
(if (> number 17)
|
|
|
|
(format "%x" number)
|
|
|
|
"")
|
|
|
|
mml-base-boundary))
|
|
|
|
|
2007-10-28 09:18:39 +00:00
|
|
|
(defun mml-content-disposition (type &optional filename)
|
|
|
|
"Return a default disposition name suitable to TYPE or FILENAME."
|
|
|
|
(let ((defs mml-content-disposition-alist)
|
|
|
|
disposition def types)
|
|
|
|
(while (and (not disposition) defs)
|
|
|
|
(setq def (pop defs))
|
|
|
|
(cond ((stringp (car def))
|
|
|
|
(when (and filename
|
|
|
|
(string-match (car def) filename))
|
|
|
|
(setq disposition (cdr def))))
|
|
|
|
((consp (cdr def))
|
|
|
|
(when (string= (car (setq types (split-string type "/")))
|
|
|
|
(car def))
|
|
|
|
(setq type (cadr types)
|
|
|
|
types (cdr def))
|
|
|
|
(while (and (not disposition) types)
|
|
|
|
(setq def (pop types))
|
|
|
|
(when (or (eq (car def) t) (string= type (car def)))
|
|
|
|
(setq disposition (cdr def))))))
|
|
|
|
(t
|
|
|
|
(when (or (eq (car def) t) (string= type (car def)))
|
|
|
|
(setq disposition (cdr def))))))
|
|
|
|
(or disposition "attachment")))
|
|
|
|
|
2004-09-04 13:13:48 +00:00
|
|
|
(defun mml-insert-mime-headers (cont type charset encoding flowed)
|
|
|
|
(let (parameters id disposition description)
|
2000-09-19 13:40:08 +00:00
|
|
|
(setq parameters
|
|
|
|
(mml-parameter-string
|
2004-09-04 13:13:48 +00:00
|
|
|
cont mml-content-type-parameters))
|
2000-09-19 13:40:08 +00:00
|
|
|
(when (or charset
|
|
|
|
parameters
|
2004-09-04 13:13:48 +00:00
|
|
|
flowed
|
|
|
|
(not (equal type mml-generate-default-type))
|
|
|
|
mml-insert-mime-headers-always)
|
2000-09-19 13:40:08 +00:00
|
|
|
(when (consp charset)
|
|
|
|
(error
|
2004-09-04 13:13:48 +00:00
|
|
|
"Can't encode a part with several charsets"))
|
2000-09-19 13:40:08 +00:00
|
|
|
(insert "Content-Type: " type)
|
|
|
|
(when charset
|
2006-02-08 04:35:58 +00:00
|
|
|
(mml-insert-parameter
|
|
|
|
(mail-header-encode-parameter "charset" (symbol-name charset))))
|
2004-09-04 13:13:48 +00:00
|
|
|
(when flowed
|
2006-02-08 04:35:58 +00:00
|
|
|
(mml-insert-parameter "format=flowed"))
|
2000-09-19 13:40:08 +00:00
|
|
|
(when parameters
|
|
|
|
(mml-insert-parameter-string
|
2004-09-04 13:13:48 +00:00
|
|
|
cont mml-content-type-parameters))
|
2000-09-19 13:40:08 +00:00
|
|
|
(insert "\n"))
|
2004-09-04 13:13:48 +00:00
|
|
|
(when (setq id (cdr (assq 'id cont)))
|
|
|
|
(insert "Content-ID: " id "\n"))
|
2000-09-19 13:40:08 +00:00
|
|
|
(setq parameters
|
|
|
|
(mml-parameter-string
|
2004-09-04 13:13:48 +00:00
|
|
|
cont mml-content-disposition-parameters))
|
2000-09-19 13:40:08 +00:00
|
|
|
(when (or (setq disposition (cdr (assq 'disposition cont)))
|
|
|
|
parameters)
|
2007-10-28 09:18:39 +00:00
|
|
|
(insert "Content-Disposition: "
|
|
|
|
(or disposition
|
|
|
|
(mml-content-disposition type (cdr (assq 'filename cont)))))
|
2000-09-19 13:40:08 +00:00
|
|
|
(when parameters
|
2019-05-13 16:16:10 -04:00
|
|
|
(let ((cont (copy-sequence cont)))
|
|
|
|
;; Set the file name to what's specified by the user.
|
|
|
|
(when-let ((recipient-filename (cdr (assq 'recipient-filename cont))))
|
|
|
|
(setcdr cont
|
|
|
|
(cons (cons 'filename recipient-filename)
|
|
|
|
(cdr cont))))
|
|
|
|
(mml-insert-parameter-string
|
|
|
|
cont mml-content-disposition-parameters)))
|
2000-09-19 13:40:08 +00:00
|
|
|
(insert "\n"))
|
|
|
|
(unless (eq encoding '7bit)
|
|
|
|
(insert (format "Content-Transfer-Encoding: %s\n" encoding)))
|
|
|
|
(when (setq description (cdr (assq 'description cont)))
|
2019-09-30 17:13:10 +02:00
|
|
|
(insert "Content-Description: "
|
|
|
|
;; The current buffer is unibyte, so do the description
|
|
|
|
;; encoding in a temporary buffer.
|
|
|
|
(with-temp-buffer
|
|
|
|
(insert description "\n")
|
|
|
|
(mail-encode-encoded-word-region (point-min) (point-max))
|
|
|
|
(buffer-string))))))
|
2000-09-19 13:40:08 +00:00
|
|
|
|
|
|
|
(defun mml-parameter-string (cont types)
|
|
|
|
(let ((string "")
|
|
|
|
value type)
|
|
|
|
(while (setq type (pop types))
|
|
|
|
(when (setq value (cdr (assq type cont)))
|
|
|
|
;; Strip directory component from the filename parameter.
|
|
|
|
(when (eq type 'filename)
|
|
|
|
(setq value (file-name-nondirectory value)))
|
|
|
|
(setq string (concat string "; "
|
|
|
|
(mail-header-encode-parameter
|
|
|
|
(symbol-name type) value)))))
|
|
|
|
(when (not (zerop (length string)))
|
|
|
|
string)))
|
|
|
|
|
|
|
|
(defun mml-insert-parameter-string (cont types)
|
|
|
|
(let (value type)
|
|
|
|
(while (setq type (pop types))
|
|
|
|
(when (setq value (cdr (assq type cont)))
|
|
|
|
;; Strip directory component from the filename parameter.
|
|
|
|
(when (eq type 'filename)
|
|
|
|
(setq value (file-name-nondirectory value)))
|
|
|
|
(mml-insert-parameter
|
|
|
|
(mail-header-encode-parameter
|
|
|
|
(symbol-name type) value))))))
|
|
|
|
|
* smime.el (from):
* rfc2047.el (message-posting-charset):
* qp.el (mm-use-ultra-safe-encoding):
* pop3.el (parse-time-months):
* nnrss.el (mm-text-html-renderer, mm-text-html-washer-alist):
* nnml.el (files):
* nnheader.el (gnus-newsgroup-name, nnheader-file-coding-system)
(jka-compr-compression-info-list, ange-ftp-path-format)
(efs-path-regexp):
* nndiary.el (files):
* mml2015.el (mc-default-scheme, mc-schemes, pgg-default-user-id)
(pgg-errors-buffer, pgg-output-buffer, epg-user-id-alist)
(epg-digest-algorithm-alist, inhibit-redisplay)
(password-cache-expiry):
* mml1991.el (pgg-default-user-id, pgg-errors-buffer)
(pgg-output-buffer, password-cache-expiry):
* mml.el (mml-dnd-protocol-alist, ange-ftp-name-format)
(efs-path-regexp):
* mml-smime.el (epg-user-id-alist, epg-digest-algorithm-alist)
(inhibit-redisplay):
* mm-uu.el (file-name, start-point, end-point, entry)
(gnus-newsgroup-name, gnus-newsgroup-charset):
* mm-util.el (mm-mime-mule-charset-alist, latin-unity-coding-systems)
(latin-unity-ucs-list):
* mm-bodies.el (mm-uu-yenc-decode-function, mm-uu-decode-function)
(mm-uu-binhex-decode-function):
* message.el (gnus-message-group-art, gnus-list-identifiers, )
(rmail-enable-mime-composing, gnus-local-organization)
(gnus-post-method, gnus-select-method, gnus-active-hashtb)
(gnus-read-active-file, facemenu-add-face-function)
(facemenu-remove-face-function, gnus-article-decoded-p)
(tool-bar-mode):
* mail-source.el (display-time-mail-function):
* gnus-util.el (nnmail-pathname-coding-system)
(nnmail-active-file-coding-system, gnus-emphasize-whitespace-regexp)
(gnus-original-article-buffer, gnus-user-agent)
(rmail-default-rmail-file, mm-text-coding-system, tool-bar-mode)
(xemacs-codename, sxemacs-codename, emacs-program-version):
* gnus-sum.el (tool-bar-mode, gnus-tmp-header, number):
* gnus-start.el (gnus-agent-covered-methods)
(gnus-agent-file-loading-local, gnus-agent-file-loading-cache)
(gnus-current-headers, gnus-thread-indent-array, gnus-newsgroup-name)
(gnus-newsgroup-headers, gnus-group-list-mode)
(gnus-group-mark-positions, gnus-newsgroup-data)
(gnus-newsgroup-unreads, nnoo-state-alist)
(gnus-current-select-method, mail-sources)
(nnmail-scan-directory-mail-source-once, nnmail-split-history)
(nnmail-spool-file, gnus-cache-active-hashtb):
* gnus-mh.el (mh-lib-progs):
* gnus-ems.el (gnus-tmp-unread, gnus-tmp-replied)
(gnus-tmp-score-char, gnus-tmp-indentation, gnus-tmp-opening-bracket)
(gnus-tmp-lines, gnus-tmp-name, gnus-tmp-closing-bracket)
(gnus-tmp-subject-or-nil, gnus-check-before-posting, gnus-mouse-face)
(gnus-group-buffer):
* gnus-cite.el (font-lock-defaults-computed, font-lock-keywords)
(font-lock-set-defaults):
* gnus-art.el (tool-bar-map, w3m-minor-mode-map)
(gnus-face-properties-alist, charset, gnus-summary-article-menu)
(gnus-summary-post-menu, total-parts, type, condition, length):
* gnus-agent.el (gnus-agent-read-agentview):
* flow-fill.el (show-trailing-whitespace):
* gnus-group.el (tool-bar-mode, nnrss-group-alist): Remove unnecessary
eval-and-compile wrappers for byte compiler pacifiers.
* mm-view.el (mm-inline-image-xemacs): Only do something for XEmacs.
(mm-display-inline-fontify): Check for featurep 'xemacs not
extent-list.
* mm-decode.el (mm-display-external): Check for featurep 'xemacs not
itimer-list.
(mm-create-image-xemacs): Only do something for XEmacs.
(mm-image-fit-p): Check for featurep 'xemacs not glyph-width.
* mm-util.el (mm-find-buffer-file-coding-system): Add check for XEmacs.
* gnus-registry.el (gnus-adaptive-word-syntax-table):
* gnus-fun.el (gnus-face-properties-alist): Pacify byte compiler.
* textmodes/reftex-dcr.el (reftex-start-itimer-once): Add check
for XEmacs.
* calc/calc-menu.el (calc-mode-map): Pacify byte compiler.
* doc-view.el (doc-view-resolution): Add missing :group.
2007-11-16 16:50:35 +00:00
|
|
|
(defvar ange-ftp-name-format)
|
|
|
|
(defvar efs-path-regexp)
|
|
|
|
|
2000-09-19 13:40:08 +00:00
|
|
|
(defun mml-parse-file-name (path)
|
|
|
|
(if (if (boundp 'efs-path-regexp)
|
|
|
|
(string-match efs-path-regexp path)
|
|
|
|
(if (boundp 'ange-ftp-name-format)
|
|
|
|
(string-match (car ange-ftp-name-format) path)))
|
|
|
|
(list (match-string 1 path) (match-string 2 path)
|
|
|
|
(substring path (1+ (match-end 2))))
|
|
|
|
path))
|
|
|
|
|
|
|
|
(defun mml-insert-buffer (buffer)
|
|
|
|
"Insert BUFFER at point and quote any MML markup."
|
|
|
|
(save-restriction
|
|
|
|
(narrow-to-region (point) (point))
|
|
|
|
(insert-buffer-substring buffer)
|
|
|
|
(mml-quote-region (point-min) (point-max))
|
|
|
|
(goto-char (point-max))))
|
|
|
|
|
|
|
|
;;;
|
|
|
|
;;; Transforming MIME to MML
|
|
|
|
;;;
|
|
|
|
|
2007-12-19 02:54:16 +00:00
|
|
|
;; message-narrow-to-head autoloads message.
|
|
|
|
(declare-function message-remove-header "message"
|
|
|
|
(header &optional is-regexp first reverse))
|
|
|
|
|
2004-09-04 13:13:48 +00:00
|
|
|
(defun mime-to-mml (&optional handles)
|
|
|
|
"Translate the current buffer (which should be a message) into MML.
|
|
|
|
If HANDLES is non-nil, use it instead reparsing the buffer."
|
2000-09-19 13:40:08 +00:00
|
|
|
;; First decode the head.
|
|
|
|
(save-restriction
|
|
|
|
(message-narrow-to-head)
|
2005-02-19 13:24:16 +00:00
|
|
|
(let ((rfc2047-quote-decoded-words-containing-tspecials t))
|
|
|
|
(mail-decode-encoded-word-region (point-min) (point-max))))
|
2004-09-04 13:13:48 +00:00
|
|
|
(unless handles
|
|
|
|
(setq handles (mm-dissect-buffer t)))
|
|
|
|
(goto-char (point-min))
|
2019-02-14 02:16:05 +00:00
|
|
|
(if (search-forward "\n\n" nil 'move)
|
|
|
|
(delete-region (point) (point-max))
|
|
|
|
;; No content in the part that is the sole part of this message.
|
|
|
|
(insert (if (bolp) "\n" "\n\n")))
|
2004-09-04 13:13:48 +00:00
|
|
|
(if (stringp (car handles))
|
|
|
|
(mml-insert-mime handles)
|
|
|
|
(mml-insert-mime handles t))
|
|
|
|
(mm-destroy-parts handles)
|
2000-09-19 13:40:08 +00:00
|
|
|
(save-restriction
|
|
|
|
(message-narrow-to-head)
|
|
|
|
;; Remove them, they are confusing.
|
|
|
|
(message-remove-header "Content-Type")
|
|
|
|
(message-remove-header "MIME-Version")
|
2004-09-04 13:13:48 +00:00
|
|
|
(message-remove-header "Content-Disposition")
|
2000-09-19 13:40:08 +00:00
|
|
|
(message-remove-header "Content-Transfer-Encoding")))
|
|
|
|
|
2007-12-19 02:54:16 +00:00
|
|
|
(autoload 'message-encode-message-body "message")
|
|
|
|
(declare-function message-narrow-to-headers-or-head "message" ())
|
|
|
|
|
2011-09-10 11:26:12 +03:00
|
|
|
;;;###autoload
|
2000-09-19 13:40:08 +00:00
|
|
|
(defun mml-to-mime ()
|
|
|
|
"Translate the current buffer from MML to MIME."
|
2008-01-24 07:47:38 +00:00
|
|
|
;; `message-encode-message-body' will insert an encoded Content-Description
|
|
|
|
;; header in the message header if the body contains a single part
|
|
|
|
;; that is specified by a user with a MML tag containing a description
|
|
|
|
;; token. So, we encode the message header first to prevent the encoded
|
|
|
|
;; Content-Description header from being encoded again.
|
2000-09-19 13:40:08 +00:00
|
|
|
(save-restriction
|
|
|
|
(message-narrow-to-headers-or-head)
|
2004-09-04 13:13:48 +00:00
|
|
|
;; Skip past any From_ headers.
|
|
|
|
(while (looking-at "From ")
|
|
|
|
(forward-line 1))
|
2019-05-07 08:18:49 -04:00
|
|
|
(mail-encode-encoded-word-buffer))
|
2008-01-24 07:47:38 +00:00
|
|
|
(message-encode-message-body))
|
2000-09-19 13:40:08 +00:00
|
|
|
|
|
|
|
(defun mml-insert-mime (handle &optional no-markup)
|
|
|
|
(let (textp buffer mmlp)
|
|
|
|
;; Determine type and stuff.
|
|
|
|
(unless (stringp (car handle))
|
|
|
|
(unless (setq textp (equal (mm-handle-media-supertype handle) "text"))
|
2010-05-02 20:41:45 -04:00
|
|
|
(with-current-buffer (setq buffer (mml-generate-new-buffer " *mml*"))
|
2009-03-03 02:32:23 +00:00
|
|
|
(if (eq (mail-content-type-get (mm-handle-type handle) 'charset)
|
|
|
|
'gnus-decoded)
|
|
|
|
;; A part that mm-uu dissected from a non-MIME message
|
|
|
|
;; because of `gnus-article-emulate-mime'.
|
|
|
|
(progn
|
|
|
|
(mm-enable-multibyte)
|
|
|
|
(insert-buffer-substring (mm-handle-buffer handle)))
|
|
|
|
(mm-insert-part handle 'no-cache)
|
|
|
|
(if (setq mmlp (equal (mm-handle-media-type handle)
|
|
|
|
"message/rfc822"))
|
|
|
|
(mime-to-mml))))))
|
2000-09-19 13:40:08 +00:00
|
|
|
(if mmlp
|
|
|
|
(mml-insert-mml-markup handle nil t t)
|
|
|
|
(unless (and no-markup
|
|
|
|
(equal (mm-handle-media-type handle) "text/plain"))
|
|
|
|
(mml-insert-mml-markup handle buffer textp)))
|
|
|
|
(cond
|
2003-02-04 13:24:35 +00:00
|
|
|
(mmlp
|
2004-09-04 13:13:48 +00:00
|
|
|
(insert-buffer-substring buffer)
|
2000-09-19 13:40:08 +00:00
|
|
|
(goto-char (point-max))
|
|
|
|
(insert "<#/mml>\n"))
|
|
|
|
((stringp (car handle))
|
2021-01-30 00:35:24 -05:00
|
|
|
(mapc #'mml-insert-mime (cdr handle))
|
2000-09-19 13:40:08 +00:00
|
|
|
(insert "<#/multipart>\n"))
|
|
|
|
(textp
|
2004-09-04 13:13:48 +00:00
|
|
|
(let ((charset (mail-content-type-get
|
|
|
|
(mm-handle-type handle) 'charset))
|
|
|
|
(start (point)))
|
|
|
|
(if (eq charset 'gnus-decoded)
|
|
|
|
(mm-insert-part handle)
|
|
|
|
(insert (mm-decode-string (mm-get-part handle) charset)))
|
|
|
|
(mml-quote-region start (point)))
|
2000-09-19 13:40:08 +00:00
|
|
|
(goto-char (point-max)))
|
|
|
|
(t
|
|
|
|
(insert "<#/part>\n")))))
|
|
|
|
|
|
|
|
(defun mml-insert-mml-markup (handle &optional buffer nofile mmlp)
|
|
|
|
"Take a MIME handle and insert an MML tag."
|
|
|
|
(if (stringp (car handle))
|
2004-09-04 13:13:48 +00:00
|
|
|
(progn
|
|
|
|
(insert "<#multipart type=" (mm-handle-media-subtype handle))
|
|
|
|
(let ((start (mm-handle-multipart-ctl-parameter handle 'start)))
|
|
|
|
(when start
|
|
|
|
(insert " start=\"" start "\"")))
|
|
|
|
(insert ">\n"))
|
2000-09-19 13:40:08 +00:00
|
|
|
(if mmlp
|
|
|
|
(insert "<#mml type=" (mm-handle-media-type handle))
|
|
|
|
(insert "<#part type=" (mm-handle-media-type handle)))
|
|
|
|
(dolist (elem (append (cdr (mm-handle-type handle))
|
|
|
|
(cdr (mm-handle-disposition handle))))
|
2004-09-04 13:13:48 +00:00
|
|
|
(unless (symbolp (cdr elem))
|
|
|
|
(insert " " (symbol-name (car elem)) "=\"" (cdr elem) "\"")))
|
|
|
|
(when (mm-handle-id handle)
|
|
|
|
(insert " id=\"" (mm-handle-id handle) "\""))
|
2000-09-19 13:40:08 +00:00
|
|
|
(when (mm-handle-disposition handle)
|
|
|
|
(insert " disposition=" (car (mm-handle-disposition handle))))
|
|
|
|
(when buffer
|
|
|
|
(insert " buffer=\"" (buffer-name buffer) "\""))
|
|
|
|
(when nofile
|
|
|
|
(insert " nofile=yes"))
|
|
|
|
(when (mm-handle-description handle)
|
|
|
|
(insert " description=\"" (mm-handle-description handle) "\""))
|
|
|
|
(insert ">\n")))
|
|
|
|
|
|
|
|
(defun mml-insert-parameter (&rest parameters)
|
|
|
|
"Insert PARAMETERS in a nice way."
|
2006-02-08 04:35:58 +00:00
|
|
|
(let (start end)
|
|
|
|
(dolist (param parameters)
|
|
|
|
(insert ";")
|
|
|
|
(setq start (point))
|
2000-09-19 13:40:08 +00:00
|
|
|
(insert " " param)
|
2006-02-08 04:35:58 +00:00
|
|
|
(setq end (point))
|
|
|
|
(goto-char start)
|
|
|
|
(end-of-line)
|
|
|
|
(if (> (current-column) 76)
|
|
|
|
(progn
|
|
|
|
(goto-char start)
|
|
|
|
(insert "\n")
|
|
|
|
(goto-char (1+ end)))
|
|
|
|
(goto-char end)))))
|
2000-09-19 13:40:08 +00:00
|
|
|
|
|
|
|
;;;
|
|
|
|
;;; Mode for inserting and editing MML forms
|
|
|
|
;;;
|
|
|
|
|
|
|
|
(defvar mml-mode-map
|
2004-09-04 13:13:48 +00:00
|
|
|
(let ((sign (make-sparse-keymap))
|
|
|
|
(encrypt (make-sparse-keymap))
|
|
|
|
(signpart (make-sparse-keymap))
|
|
|
|
(encryptpart (make-sparse-keymap))
|
|
|
|
(map (make-sparse-keymap))
|
2000-09-19 13:40:08 +00:00
|
|
|
(main (make-sparse-keymap)))
|
2006-04-26 21:58:05 +00:00
|
|
|
(define-key map "\C-s" 'mml-secure-message-sign)
|
|
|
|
(define-key map "\C-c" 'mml-secure-message-encrypt)
|
|
|
|
(define-key map "\C-e" 'mml-secure-message-sign-encrypt)
|
|
|
|
(define-key map "\C-p\C-s" 'mml-secure-sign)
|
|
|
|
(define-key map "\C-p\C-c" 'mml-secure-encrypt)
|
2004-09-04 13:13:48 +00:00
|
|
|
(define-key sign "p" 'mml-secure-message-sign-pgpmime)
|
|
|
|
(define-key sign "o" 'mml-secure-message-sign-pgp)
|
|
|
|
(define-key sign "s" 'mml-secure-message-sign-smime)
|
|
|
|
(define-key signpart "p" 'mml-secure-sign-pgpmime)
|
|
|
|
(define-key signpart "o" 'mml-secure-sign-pgp)
|
|
|
|
(define-key signpart "s" 'mml-secure-sign-smime)
|
|
|
|
(define-key encrypt "p" 'mml-secure-message-encrypt-pgpmime)
|
|
|
|
(define-key encrypt "o" 'mml-secure-message-encrypt-pgp)
|
|
|
|
(define-key encrypt "s" 'mml-secure-message-encrypt-smime)
|
|
|
|
(define-key encryptpart "p" 'mml-secure-encrypt-pgpmime)
|
|
|
|
(define-key encryptpart "o" 'mml-secure-encrypt-pgp)
|
|
|
|
(define-key encryptpart "s" 'mml-secure-encrypt-smime)
|
|
|
|
(define-key map "\C-n" 'mml-unsecure-message)
|
2000-09-19 13:40:08 +00:00
|
|
|
(define-key map "f" 'mml-attach-file)
|
|
|
|
(define-key map "b" 'mml-attach-buffer)
|
|
|
|
(define-key map "e" 'mml-attach-external)
|
|
|
|
(define-key map "q" 'mml-quote-region)
|
|
|
|
(define-key map "m" 'mml-insert-multipart)
|
|
|
|
(define-key map "p" 'mml-insert-part)
|
|
|
|
(define-key map "v" 'mml-validate)
|
|
|
|
(define-key map "P" 'mml-preview)
|
2004-09-04 13:13:48 +00:00
|
|
|
(define-key map "s" sign)
|
|
|
|
(define-key map "S" signpart)
|
|
|
|
(define-key map "c" encrypt)
|
|
|
|
(define-key map "C" encryptpart)
|
2000-09-19 13:40:08 +00:00
|
|
|
;;(define-key map "n" 'mml-narrow-to-part)
|
2004-09-04 13:13:48 +00:00
|
|
|
;; `M-m' conflicts with `back-to-indentation'.
|
|
|
|
;; (define-key main "\M-m" map)
|
|
|
|
(define-key main "\C-c\C-m" map)
|
2000-09-19 13:40:08 +00:00
|
|
|
main))
|
|
|
|
|
|
|
|
(easy-menu-define
|
2001-11-06 04:29:38 +00:00
|
|
|
mml-menu mml-mode-map ""
|
2018-11-05 01:22:15 +01:00
|
|
|
'("Attachments"
|
2016-02-12 15:02:32 +11:00
|
|
|
["Attach File..." mml-attach-file :help "Attach a file at point"]
|
2006-04-26 21:58:05 +00:00
|
|
|
["Attach Buffer..." mml-attach-buffer
|
2016-02-12 15:02:32 +11:00
|
|
|
:help "Attach a buffer to the outgoing message"]
|
2006-04-26 21:58:05 +00:00
|
|
|
["Attach External..." mml-attach-external
|
2016-02-12 15:02:32 +11:00
|
|
|
:help "Attach reference to an external file"]
|
2008-03-29 19:54:11 +00:00
|
|
|
;; FIXME: Is it possible to do this without using
|
|
|
|
;; `gnus-gcc-externalize-attachments'?
|
|
|
|
["Externalize Attachments"
|
|
|
|
(lambda ()
|
|
|
|
(interactive)
|
2016-02-12 15:02:32 +11:00
|
|
|
(setq gnus-gcc-externalize-attachments
|
|
|
|
(not gnus-gcc-externalize-attachments))
|
|
|
|
(message "gnus-gcc-externalize-attachments is `%s'."
|
|
|
|
gnus-gcc-externalize-attachments))
|
|
|
|
:visible (and (boundp 'gnus-gcc-externalize-attachments)
|
|
|
|
(memq gnus-gcc-externalize-attachments
|
|
|
|
'(all t nil)))
|
2008-03-29 19:54:11 +00:00
|
|
|
:style toggle
|
|
|
|
:selected gnus-gcc-externalize-attachments
|
2016-02-12 15:02:32 +11:00
|
|
|
:help "Save attachments as external parts in Gcc copies"]
|
2008-03-10 00:50:22 +00:00
|
|
|
"----"
|
2006-04-26 21:58:05 +00:00
|
|
|
;;
|
|
|
|
("Change Security Method"
|
|
|
|
["PGP/MIME"
|
|
|
|
(lambda () (interactive) (setq mml-secure-method "pgpmime"))
|
2016-02-12 15:02:32 +11:00
|
|
|
:help "Set Security Method to PGP/MIME"
|
2006-04-26 21:58:05 +00:00
|
|
|
:style radio
|
|
|
|
:selected (equal mml-secure-method "pgpmime") ]
|
|
|
|
["S/MIME"
|
|
|
|
(lambda () (interactive) (setq mml-secure-method "smime"))
|
2016-02-12 15:02:32 +11:00
|
|
|
:help "Set Security Method to S/MIME"
|
2006-04-26 21:58:05 +00:00
|
|
|
:style radio
|
|
|
|
:selected (equal mml-secure-method "smime") ]
|
|
|
|
["Inline PGP"
|
|
|
|
(lambda () (interactive) (setq mml-secure-method "pgp"))
|
2016-02-12 15:02:32 +11:00
|
|
|
:help "Set Security Method to inline PGP"
|
2006-04-26 21:58:05 +00:00
|
|
|
:style radio
|
|
|
|
:selected (equal mml-secure-method "pgp") ] )
|
|
|
|
;;
|
|
|
|
["Sign Message" mml-secure-message-sign t]
|
|
|
|
["Encrypt Message" mml-secure-message-encrypt t]
|
|
|
|
["Sign and Encrypt Message" mml-secure-message-sign-encrypt t]
|
|
|
|
["Encrypt/Sign off" mml-unsecure-message
|
2016-02-12 15:02:32 +11:00
|
|
|
:help "Don't Encrypt/Sign Message"]
|
2008-03-10 00:50:22 +00:00
|
|
|
;; Do we have separate encrypt and encrypt/sign commands for parts?
|
|
|
|
["Sign Part" mml-secure-sign t]
|
|
|
|
["Encrypt Part" mml-secure-encrypt t]
|
|
|
|
"----"
|
2006-04-26 21:58:05 +00:00
|
|
|
;; Maybe we could remove these, because people who write MML most probably
|
|
|
|
;; don't use the menu:
|
|
|
|
["Insert Part..." mml-insert-part
|
|
|
|
:active (message-in-body-p)]
|
|
|
|
["Insert Multipart..." mml-insert-multipart
|
|
|
|
:active (message-in-body-p)]
|
|
|
|
;;
|
2001-11-06 04:29:38 +00:00
|
|
|
;;["Narrow" mml-narrow-to-part t]
|
2006-04-26 21:58:05 +00:00
|
|
|
["Quote MML in region" mml-quote-region
|
|
|
|
:active (message-mark-active-p)
|
2016-02-12 15:02:32 +11:00
|
|
|
:help "Quote MML tags in region"]
|
2004-09-04 13:13:48 +00:00
|
|
|
["Validate MML" mml-validate t]
|
2006-01-25 06:47:24 +00:00
|
|
|
["Preview" mml-preview t]
|
|
|
|
"----"
|
|
|
|
["Emacs MIME manual" (lambda () (interactive) (message-info 4))
|
2016-02-12 15:02:32 +11:00
|
|
|
:help "Display the Emacs MIME manual"]
|
2008-03-29 19:54:11 +00:00
|
|
|
["PGG manual" (lambda () (interactive) (message-info mml2015-use))
|
2016-02-12 15:02:32 +11:00
|
|
|
:visible (and (boundp 'mml2015-use) (equal mml2015-use 'pgg))
|
|
|
|
:help "Display the PGG manual"]
|
2008-09-30 23:11:17 +00:00
|
|
|
["EasyPG manual" (lambda () (interactive) (require 'mml2015) (message-info mml2015-use))
|
2016-02-12 15:02:32 +11:00
|
|
|
:visible (and (boundp 'mml2015-use) (equal mml2015-use 'epg))
|
|
|
|
:help "Display the EasyPG manual"]))
|
2000-09-19 13:40:08 +00:00
|
|
|
|
2010-05-02 20:41:45 -04:00
|
|
|
(define-minor-mode mml-mode
|
2000-09-19 13:40:08 +00:00
|
|
|
"Minor mode for editing MML.
|
2004-09-04 13:13:48 +00:00
|
|
|
MML is the MIME Meta Language, a minor mode for composing MIME articles.
|
|
|
|
See Info node `(emacs-mime)Composing'.
|
2000-09-19 13:40:08 +00:00
|
|
|
|
|
|
|
\\{mml-mode-map}"
|
2010-05-02 20:41:45 -04:00
|
|
|
:lighter " MML" :keymap mml-mode-map
|
|
|
|
(when mml-mode
|
2006-04-26 21:58:05 +00:00
|
|
|
(when (boundp 'dnd-protocol-alist)
|
Prefer setq-local in gnus/*.el
* lisp/gnus/gnus-agent.el (gnus-agent-mode)
(gnus-agent-get-undownloaded-list, gnus-agent-open-history):
* lisp/gnus/gnus-art.el (gnus-article-setup-highlight-words)
(gnus-article-mode, gnus-article-setup-buffer, defsubst)
(gnus-article-describe-bindings, gnus-article-edit-mode):
* lisp/gnus/gnus-cus.el (gnus-custom-mode, gnus-group-customize)
(gnus-score-customize, gnus-agent-customize-category):
* lisp/gnus/gnus-group.el (gnus-group-make-tool-bar):
* lisp/gnus/gnus-msg.el (gnus-setup-message)
(gnus-summary-news-other-window, gnus-configure-posting-styles):
* lisp/gnus/gnus-salt.el (gnus-pick-mode, gnus-binary-mode):
* lisp/gnus/gnus-score.el (gnus-score-edit-current-scores)
(gnus-score-edit-file):
* lisp/gnus/gnus-srvr.el (gnus-server-mode):
* lisp/gnus/gnus-start.el (gnus-no-server-1)
(gnus-dribble-read-file, gnus-save-newsrc-file)
(gnus-gnus-to-newsrc-format):
* lisp/gnus/gnus-sum.el (gnus-summary-make-tool-bar)
(gnus-summary-mode, gnus-summary-setup-buffer)
(gnus-select-newsgroup, gnus-summary-edit-article)
(gnus-summary-setup-default-charset):
* lisp/gnus/gnus-topic.el (gnus-topic-mode):
* lisp/gnus/gnus-undo.el (gnus-undo-mode):
* lisp/gnus/gnus.el (gnus-simplify-mode-line):
* lisp/gnus/message.el (message-cite-reply-position)
(message-cite-style, message-mode, message-setup-fill-variables):
* lisp/gnus/mm-view.el (mm-display-inline-fontify):
* lisp/gnus/mml.el (mml-mode):
* lisp/gnus/nndiary.el (nndiary-open-nov):
* lisp/gnus/nnfolder.el (nnfolder-save-buffer)
(nnfolder-open-nov):
* lisp/gnus/nnheader.el (nnheader-init-server-buffer):
* lisp/gnus/nnimap.el (nnimap-make-process-buffer):
* lisp/gnus/nnml.el (nnml-get-nov-buffer): Prefer setq-local.
2020-12-07 16:27:50 +01:00
|
|
|
(setq-local dnd-protocol-alist
|
|
|
|
(append mml-dnd-protocol-alist dnd-protocol-alist)))))
|
2000-09-19 13:40:08 +00:00
|
|
|
|
|
|
|
;;;
|
|
|
|
;;; Helper functions for reading MIME stuff from the minibuffer and
|
|
|
|
;;; inserting stuff to the buffer.
|
|
|
|
;;;
|
|
|
|
|
2007-10-28 09:18:39 +00:00
|
|
|
(defcustom mml-default-directory mm-default-directory
|
|
|
|
"The default directory where mml will find files.
|
|
|
|
If not set, `default-directory' will be used."
|
|
|
|
:type '(choice directory (const :tag "Default" nil))
|
2008-02-29 04:03:49 +00:00
|
|
|
:version "23.1" ;; No Gnus
|
2007-10-28 09:18:39 +00:00
|
|
|
:group 'message)
|
|
|
|
|
2000-09-19 13:40:08 +00:00
|
|
|
(defun mml-minibuffer-read-file (prompt)
|
2004-09-04 13:13:48 +00:00
|
|
|
(let* ((completion-ignored-extensions nil)
|
2017-01-26 19:09:58 +01:00
|
|
|
(buffer-file-name nil)
|
2007-10-28 09:18:39 +00:00
|
|
|
(file (read-file-name prompt
|
|
|
|
(or mml-default-directory default-directory)
|
2017-01-26 19:09:58 +01:00
|
|
|
nil t)))
|
2004-09-04 13:13:48 +00:00
|
|
|
;; Prevent some common errors. This is inspired by similar code in
|
2000-09-19 13:40:08 +00:00
|
|
|
;; VM.
|
|
|
|
(when (file-directory-p file)
|
|
|
|
(error "%s is a directory, cannot attach" file))
|
|
|
|
(unless (file-exists-p file)
|
|
|
|
(error "No such file: %s" file))
|
|
|
|
(unless (file-readable-p file)
|
|
|
|
(error "Permission denied: %s" file))
|
|
|
|
file))
|
|
|
|
|
Stop message.el from loading about 40 libraries it doesn't always need.
The general approach is to autoload rather than require, and to
require in the specific functions rather than the file. (Bug#5642)
* url/url.el: Move mailcap require earlier in the file.
* gnus/gmm-utils.el: Don't require wid-edit.
(widget-create-child-value, widget-convert, widget-default-get):
Autoload.
* gnus/gnus-util.el: Don't require time-date, netrc.
(message-fetch-field, gnus-group-name-decode): Declare rather than
autoloading.
(gnus-fetch-field): Require message.
(gnus-decode-newsgroups): Require gnus-group.
* gnus/ietf-drums.el: Don't require time-date.
* gnus/message.el: Don't require hashcash, canlock, ecomplete.
Do require mail-utils. Require nnheader only when compiling.
(smtpmail-default-smtp-server): Remove declaration.
(message-send-mail-function): Check smtpmail-default-smtp-server
is bound rather than requiring smtpmail.
(message-auto-save-directory, message-insert-signature): Use
expand-file-name rather than nnheader-concat.
(nnheader-insert-file-contents): Autoload.
(hashcash-wait-async): Declare.
(message-send-mail): Only call gnus-setup-posting-charset if
gnus-group-posting-charset-alist is bound. Require hashcash if needed.
(message-send-mail-with-sendmail): Require sendmail.
(canlock-password, canlock-password-for-verify): Declare.
(message-canlock-password): Require canlock.
(nnheader-get-report): Autoload.
(gnus-setup-posting-charset): Declare.
(message-send-news): Require gnus-msg.
(message-make-references, message-make-in-reply-to): Use mail-header-id
rather than the alias mail-header-message-id.
(ecomplete-add-item, ecomplete-save): Declare.
(message-put-addresses-in-ecomplete): Require ecomplete.
(ecomplete-display-matches): Autoload.
* gnus/mm-decode.el: Don't require mailcap, gnus-util.
(gnus-map-function, gnus-replace-in-string, gnus-read-shell-command)
(message-fetch-field, mailcap-parse-mailcaps, mailcap-mime-info):
Autoload.
(mailcap-mime-extensions): Declare.
* gnus/mm-encode.el: Don't require mailcap.
(mailcap-extension-to-mime): Autoload.
* gnus/mml-sec.el: Don't require password-cache.
* gnus/mml.el (gnus-setup-posting-charset): Declare rather than autoload.
(mailcap-parse-mimetypes, mailcap-mime-types): Declare.
(mml-minibuffer-read-type): Require mailcap.
(mml-preview): Require gnus-msg.
* gnus/mml1991.el: Require password-cache.
(password-cache-expiry): Remove declaration.
* gnus/mml2015.el: Require password-cache.
(password-cache-expiry): Remove declaration.
* gnus/nneething.el (mailcap): Require mailcap.
* gnus/nnheader.el: (declare-function): Add compatibility stub.
(message-remove-header): Declare rather than autoload.
(nnheader-replace-header): Require message.
* gnus/nnimap.el (declare-function): Add compatibility stub.
(netrc-parse, netrc-machine-user-or-password): Declare.
(nnimap-open-connection): Require netrc.
* gnus/nntp.el (declare-function): Add compatibility stub.
(netrc-parse, netrc-machine, netrc-get): Declare.
(nntp-send-authinfo): Require netrc.
* gnus/rfc2047.el: Don't require qp.
(quoted-printable-encode-region, quoted-printable-decode-string):
Autoload.
* gnus/sieve-mode.el: Don't require easymenu.
(easy-menu-add-item): Autoload it.
* gnus/spam-stat.el (time-to-number-of-days): Autoload it.
* password-cache.el (password-cache, password-cache-expiry):
Autoload.
2010-03-18 19:55:37 -07:00
|
|
|
(declare-function mailcap-parse-mimetypes "mailcap" (&optional path force))
|
|
|
|
(declare-function mailcap-mime-types "mailcap" ())
|
|
|
|
|
2000-09-19 13:40:08 +00:00
|
|
|
(defun mml-minibuffer-read-type (name &optional default)
|
Stop message.el from loading about 40 libraries it doesn't always need.
The general approach is to autoload rather than require, and to
require in the specific functions rather than the file. (Bug#5642)
* url/url.el: Move mailcap require earlier in the file.
* gnus/gmm-utils.el: Don't require wid-edit.
(widget-create-child-value, widget-convert, widget-default-get):
Autoload.
* gnus/gnus-util.el: Don't require time-date, netrc.
(message-fetch-field, gnus-group-name-decode): Declare rather than
autoloading.
(gnus-fetch-field): Require message.
(gnus-decode-newsgroups): Require gnus-group.
* gnus/ietf-drums.el: Don't require time-date.
* gnus/message.el: Don't require hashcash, canlock, ecomplete.
Do require mail-utils. Require nnheader only when compiling.
(smtpmail-default-smtp-server): Remove declaration.
(message-send-mail-function): Check smtpmail-default-smtp-server
is bound rather than requiring smtpmail.
(message-auto-save-directory, message-insert-signature): Use
expand-file-name rather than nnheader-concat.
(nnheader-insert-file-contents): Autoload.
(hashcash-wait-async): Declare.
(message-send-mail): Only call gnus-setup-posting-charset if
gnus-group-posting-charset-alist is bound. Require hashcash if needed.
(message-send-mail-with-sendmail): Require sendmail.
(canlock-password, canlock-password-for-verify): Declare.
(message-canlock-password): Require canlock.
(nnheader-get-report): Autoload.
(gnus-setup-posting-charset): Declare.
(message-send-news): Require gnus-msg.
(message-make-references, message-make-in-reply-to): Use mail-header-id
rather than the alias mail-header-message-id.
(ecomplete-add-item, ecomplete-save): Declare.
(message-put-addresses-in-ecomplete): Require ecomplete.
(ecomplete-display-matches): Autoload.
* gnus/mm-decode.el: Don't require mailcap, gnus-util.
(gnus-map-function, gnus-replace-in-string, gnus-read-shell-command)
(message-fetch-field, mailcap-parse-mailcaps, mailcap-mime-info):
Autoload.
(mailcap-mime-extensions): Declare.
* gnus/mm-encode.el: Don't require mailcap.
(mailcap-extension-to-mime): Autoload.
* gnus/mml-sec.el: Don't require password-cache.
* gnus/mml.el (gnus-setup-posting-charset): Declare rather than autoload.
(mailcap-parse-mimetypes, mailcap-mime-types): Declare.
(mml-minibuffer-read-type): Require mailcap.
(mml-preview): Require gnus-msg.
* gnus/mml1991.el: Require password-cache.
(password-cache-expiry): Remove declaration.
* gnus/mml2015.el: Require password-cache.
(password-cache-expiry): Remove declaration.
* gnus/nneething.el (mailcap): Require mailcap.
* gnus/nnheader.el: (declare-function): Add compatibility stub.
(message-remove-header): Declare rather than autoload.
(nnheader-replace-header): Require message.
* gnus/nnimap.el (declare-function): Add compatibility stub.
(netrc-parse, netrc-machine-user-or-password): Declare.
(nnimap-open-connection): Require netrc.
* gnus/nntp.el (declare-function): Add compatibility stub.
(netrc-parse, netrc-machine, netrc-get): Declare.
(nntp-send-authinfo): Require netrc.
* gnus/rfc2047.el: Don't require qp.
(quoted-printable-encode-region, quoted-printable-decode-string):
Autoload.
* gnus/sieve-mode.el: Don't require easymenu.
(easy-menu-add-item): Autoload it.
* gnus/spam-stat.el (time-to-number-of-days): Autoload it.
* password-cache.el (password-cache, password-cache-expiry):
Autoload.
2010-03-18 19:55:37 -07:00
|
|
|
(require 'mailcap)
|
2000-09-19 13:40:08 +00:00
|
|
|
(mailcap-parse-mimetypes)
|
|
|
|
(let* ((default (or default
|
2021-01-30 00:40:21 -05:00
|
|
|
(mm-default-file-type name)
|
2000-09-19 13:40:08 +00:00
|
|
|
;; Perhaps here we should check what the file
|
|
|
|
;; looks like, and offer text/plain if it looks
|
|
|
|
;; like text/plain.
|
|
|
|
"application/octet-stream"))
|
Merge changes made in Gnus trunk.
nndraft.el (nndraft-request-expire-articles): Use the group name instead if "nndraft".
gnus.texi (Using IMAP): Remove the @acronyms from the headings.
nnregistry.el: Added.
nnimap.el (nnimap-insert-partial-structure): Be way more permissive when interpreting the structures.
GNUS-NEWS: Minor error in GNUS-NEWS - password-cache.el.
nnimap.el (nnimap-request-accept-article): Add \r\n to the lines to make this work with Cyrus.
gnus-registry.el: Don't prompt on load, which makes it impossible to build Gnus.
gnus-gravatar.el: Add gnus-gravatar-properties.
gnus-agent.el, gnus-art.el, gnus-bookmark.el, gnus-dired.el, gnus-group.el,\
gnus-int.el, gnus-msg.el, gnus-registry.el, gnus-score.el, gnus-srvr.el,\
gnus-sum.el, gnus-topic.el, gnus-util.el, gnus.el, mm-decode.el, mm-util.el,\
mm-view.el, mml-smime.el, mml.el, nnmairix.el, nnrss.el, smime.el:\
Introduce gnus-completing-read.
gnus-util.el: Make completing-read function configurable.
gnus-util.el: Add requires and fix history for iswitchb.
webmail.el: Remove netscape/my-deja, since they no longer exist.
gnus.el (gnus-local-domain): Declare variable obsolete.
nnimap.el (nnimap-insert-partial-structure): Get the type from the correct slot, too.
pop3.el (pop3-send-streaming-command, pop3-stream-length): New variable.
nnimap.el (nnimap-open-connection): Revert the auto-network->starttls code.
nnimap.el (nnimap-request-set-mark): Erase the buffer before issuing commands.
nnimap.el (nnimap-split-rule): Mark as obsolete.
gnus-sum.el (gnus-valid-move-group-p): Make sure that `group' is a symbol.
nnimap.el (nnimap-split-incoming-mail): Allow `default' as nnimap-split-methods value.
nnimap.el (nnimap-request-article): Downcase the NILs so that they are nil.
nndoc.el (nndoc-retrieve-groups): New function.
gnus.texi: Fix Gravatar documentation.
2010-09-30 08:39:23 +00:00
|
|
|
(string (gnus-completing-read
|
|
|
|
"Content type"
|
|
|
|
(mailcap-mime-types)
|
|
|
|
nil nil nil default)))
|
2000-09-19 13:40:08 +00:00
|
|
|
(if (not (equal string ""))
|
|
|
|
string
|
|
|
|
default)))
|
|
|
|
|
2013-04-04 02:35:55 +00:00
|
|
|
(defun mml-minibuffer-read-description (&optional default)
|
|
|
|
(let ((description (read-string "One line description: " default)))
|
2000-09-19 13:40:08 +00:00
|
|
|
(when (string-match "\\`[ \t]*\\'" description)
|
|
|
|
(setq description nil))
|
|
|
|
description))
|
|
|
|
|
2007-10-28 09:18:39 +00:00
|
|
|
(defun mml-minibuffer-read-disposition (type &optional default filename)
|
|
|
|
(unless default
|
|
|
|
(setq default (mml-content-disposition type filename)))
|
Merge changes made in Gnus trunk.
nndraft.el (nndraft-request-expire-articles): Use the group name instead if "nndraft".
gnus.texi (Using IMAP): Remove the @acronyms from the headings.
nnregistry.el: Added.
nnimap.el (nnimap-insert-partial-structure): Be way more permissive when interpreting the structures.
GNUS-NEWS: Minor error in GNUS-NEWS - password-cache.el.
nnimap.el (nnimap-request-accept-article): Add \r\n to the lines to make this work with Cyrus.
gnus-registry.el: Don't prompt on load, which makes it impossible to build Gnus.
gnus-gravatar.el: Add gnus-gravatar-properties.
gnus-agent.el, gnus-art.el, gnus-bookmark.el, gnus-dired.el, gnus-group.el,\
gnus-int.el, gnus-msg.el, gnus-registry.el, gnus-score.el, gnus-srvr.el,\
gnus-sum.el, gnus-topic.el, gnus-util.el, gnus.el, mm-decode.el, mm-util.el,\
mm-view.el, mml-smime.el, mml.el, nnmairix.el, nnrss.el, smime.el:\
Introduce gnus-completing-read.
gnus-util.el: Make completing-read function configurable.
gnus-util.el: Add requires and fix history for iswitchb.
webmail.el: Remove netscape/my-deja, since they no longer exist.
gnus.el (gnus-local-domain): Declare variable obsolete.
nnimap.el (nnimap-insert-partial-structure): Get the type from the correct slot, too.
pop3.el (pop3-send-streaming-command, pop3-stream-length): New variable.
nnimap.el (nnimap-open-connection): Revert the auto-network->starttls code.
nnimap.el (nnimap-request-set-mark): Erase the buffer before issuing commands.
nnimap.el (nnimap-split-rule): Mark as obsolete.
gnus-sum.el (gnus-valid-move-group-p): Make sure that `group' is a symbol.
nnimap.el (nnimap-split-incoming-mail): Allow `default' as nnimap-split-methods value.
nnimap.el (nnimap-request-article): Downcase the NILs so that they are nil.
nndoc.el (nndoc-retrieve-groups): New function.
gnus.texi: Fix Gravatar documentation.
2010-09-30 08:39:23 +00:00
|
|
|
(let ((disposition (gnus-completing-read
|
|
|
|
"Disposition"
|
|
|
|
'("attachment" "inline")
|
|
|
|
t nil nil default)))
|
2004-09-04 13:13:48 +00:00
|
|
|
(if (not (equal disposition ""))
|
|
|
|
disposition
|
|
|
|
default)))
|
|
|
|
|
2000-09-19 13:40:08 +00:00
|
|
|
(defun mml-quote-region (beg end)
|
|
|
|
"Quote the MML tags in the region."
|
2021-02-15 13:43:27 +01:00
|
|
|
(interactive "r" mml-mode)
|
2000-09-19 13:40:08 +00:00
|
|
|
(save-excursion
|
|
|
|
(save-restriction
|
|
|
|
;; Temporarily narrow the region to defend from changes
|
|
|
|
;; invalidating END.
|
|
|
|
(narrow-to-region beg end)
|
|
|
|
(goto-char (point-min))
|
|
|
|
;; Quote parts.
|
|
|
|
(while (re-search-forward
|
2011-10-26 09:25:34 +00:00
|
|
|
"<#!*/?\\(multipart\\|part\\|external\\|mml\\|secure\\)" nil t)
|
2000-09-19 13:40:08 +00:00
|
|
|
;; Insert ! after the #.
|
|
|
|
(goto-char (+ (match-beginning 0) 2))
|
|
|
|
(insert "!")))))
|
|
|
|
|
|
|
|
(defun mml-insert-tag (name &rest plist)
|
|
|
|
"Insert an MML tag described by NAME and PLIST."
|
|
|
|
(when (symbolp name)
|
|
|
|
(setq name (symbol-name name)))
|
|
|
|
(insert "<#" name)
|
|
|
|
(while plist
|
|
|
|
(let ((key (pop plist))
|
|
|
|
(value (pop plist)))
|
|
|
|
(when value
|
|
|
|
;; Quote VALUE if it contains suspicious characters.
|
2020-08-24 03:37:10 +02:00
|
|
|
(when (string-match "[][\"'\\~/*;()<>= \t\n[:multibyte:]]" value)
|
2004-09-04 13:13:48 +00:00
|
|
|
(setq value (with-output-to-string
|
|
|
|
(let (print-escape-nonascii)
|
|
|
|
(prin1 value)))))
|
2000-09-19 13:40:08 +00:00
|
|
|
(insert (format " %s=%s" key value)))))
|
|
|
|
(insert ">\n"))
|
|
|
|
|
|
|
|
(defun mml-insert-empty-tag (name &rest plist)
|
|
|
|
"Insert an empty MML tag described by NAME and PLIST."
|
|
|
|
(when (symbolp name)
|
|
|
|
(setq name (symbol-name name)))
|
|
|
|
(apply #'mml-insert-tag name plist)
|
|
|
|
(insert "<#/" name ">\n"))
|
|
|
|
|
|
|
|
;;; Attachment functions.
|
|
|
|
|
2006-04-26 21:58:05 +00:00
|
|
|
(defcustom mml-dnd-protocol-alist
|
|
|
|
'(("^file:///" . mml-dnd-attach-file)
|
|
|
|
("^file://" . dnd-open-file)
|
|
|
|
("^file:" . mml-dnd-attach-file))
|
|
|
|
"The functions to call when a drop in `mml-mode' is made.
|
|
|
|
See `dnd-protocol-alist' for more information. When nil, behave
|
|
|
|
as in other buffers."
|
|
|
|
:type '(choice (repeat (cons (regexp) (function)))
|
|
|
|
(const :tag "Behave as in other buffers" nil))
|
|
|
|
:version "22.1" ;; Gnus 5.10.9
|
|
|
|
:group 'message)
|
|
|
|
|
|
|
|
(defcustom mml-dnd-attach-options nil
|
|
|
|
"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."
|
|
|
|
:type '(choice
|
2008-03-10 00:50:22 +00:00
|
|
|
(const :tag "None" nil)
|
2006-04-26 21:58:05 +00:00
|
|
|
(const :tag "Query" t)
|
|
|
|
(list :value (type description disposition)
|
|
|
|
(set :inline t
|
|
|
|
(const type)
|
|
|
|
(const description)
|
|
|
|
(const disposition))))
|
|
|
|
:version "22.1" ;; Gnus 5.10.9
|
|
|
|
:group 'message)
|
|
|
|
|
2011-09-10 11:26:12 +03:00
|
|
|
;;;###autoload
|
2004-09-04 13:13:48 +00:00
|
|
|
(defun mml-attach-file (file &optional type description disposition)
|
2000-09-19 13:40:08 +00:00
|
|
|
"Attach a file to the outgoing MIME message.
|
|
|
|
The file is not inserted or encoded until you send the message with
|
2012-09-17 07:39:41 -04:00
|
|
|
`\\[message-send-and-exit]' or `\\[message-send]' in Message mode,
|
|
|
|
or `\\[mail-send-and-exit]' or `\\[mail-send]' in Mail mode.
|
2000-09-19 13:40:08 +00:00
|
|
|
|
2006-01-25 06:47:24 +00:00
|
|
|
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
|
2017-01-26 18:19:46 +01:00
|
|
|
body) or \"attachment\" (separate from the body).
|
|
|
|
|
|
|
|
If given a prefix interactively, no prompting will be done for
|
|
|
|
the TYPE, DESCRIPTION or DISPOSITION values. Instead defaults
|
|
|
|
will be computed and used."
|
2000-09-19 13:40:08 +00:00
|
|
|
(interactive
|
|
|
|
(let* ((file (mml-minibuffer-read-file "Attach file: "))
|
2017-01-26 18:19:46 +01:00
|
|
|
(type (if current-prefix-arg
|
2021-01-30 00:40:21 -05:00
|
|
|
(or (mm-default-file-type file)
|
2017-01-26 18:19:46 +01:00
|
|
|
"application/octet-stream")
|
|
|
|
(mml-minibuffer-read-type file)))
|
|
|
|
(description (if current-prefix-arg
|
|
|
|
nil
|
|
|
|
(mml-minibuffer-read-description)))
|
|
|
|
(disposition (if current-prefix-arg
|
|
|
|
(mml-content-disposition type file)
|
|
|
|
(mml-minibuffer-read-disposition type nil file))))
|
2004-09-04 13:13:48 +00:00
|
|
|
(list file type description disposition)))
|
2012-09-17 07:39:41 -04:00
|
|
|
;; If in the message header, attach at the end and leave point unchanged.
|
|
|
|
(let ((head (unless (message-in-body-p) (point))))
|
|
|
|
(if head (goto-char (point-max)))
|
2009-09-01 07:59:50 +00:00
|
|
|
(mml-insert-empty-tag 'part
|
|
|
|
'type type
|
|
|
|
;; icicles redefines read-file-name and returns a
|
|
|
|
;; string w/ text properties :-/
|
2016-02-12 14:39:30 +11:00
|
|
|
'filename (substring-no-properties file)
|
2009-09-01 07:59:50 +00:00
|
|
|
'disposition (or disposition "attachment")
|
|
|
|
'description description)
|
2012-09-17 07:39:41 -04:00
|
|
|
;; When using Mail mode, make sure it does the mime encoding
|
|
|
|
;; when you send the message.
|
|
|
|
(or (eq mail-user-agent 'message-user-agent)
|
|
|
|
(setq mail-encode-mml t))
|
2009-09-01 07:59:50 +00:00
|
|
|
(when head
|
2012-09-17 07:39:41 -04:00
|
|
|
(unless (pos-visible-in-window-p)
|
2009-09-01 07:59:50 +00:00
|
|
|
(message "The file \"%s\" has been attached at the end of the message"
|
2012-09-17 07:39:41 -04:00
|
|
|
(file-name-nondirectory file)))
|
|
|
|
(goto-char head))))
|
2006-04-26 21:58:05 +00:00
|
|
|
|
* lisp/gnus: Use lexical-binding in all the files
* lisp/gnus/gnus-group.el (features): Use `dlet`.
(gnus-tmp-level, gnus-tmp-marked, gnus-tmp-group): Declare vars.
(gnus-group-insert-group-line): Bind dynbound vars via `let` rather
than as formal args. Bind `number` as dynbound.
(gnus-visual, gnus-score-find-score-files-function)
(gnus-home-score-file, gnus-apply-kill-hook)
(gnus-summary-expunge-below): Declare vars.
(gnus-group-restart, gnus-group-list-plus): Fix `interactive` spec
since the arg is unused.
* lisp/gnus/mail-source.el (mail-source-bind, mail-source-bind-common):
Use `dlet` and suppress the warnings about the non-prefixed dynbound vars.
(mail-source-set-1): Remove unused var `auth-info`.
(mail-source-call-script): Remove unused var `background`.
(mail-source-fetch-pop, mail-source-check-pop): Bind pop3 vars with `dlet`.
* lisp/gnus/gnus-int.el (mail-source-plugged, gnus-inhibit-demon):
Declare vars.
(gnus-server-opened, gnus-status-message)
(gnus-open-server, gnus-close-server, gnus-request-list)
(gnus-finish-retrieve-group-infos, gnus-retrieve-group-data-early)
(gnus-request-list-newsgroups, gnus-request-newgroups)
(gnus-request-regenerate, gnus-request-compact, gnus-request-group)
(gnus-retrieve-groups, gnus-request-post, gnus-request-expunge-group)
(gnus-request-scan, gnus-request-update-info, gnus-request-marks)
(gnus-request-accept-article, gnus-request-create-group)
(gnus-asynchronous-p, gnus-remove-denial):
Bind `gnus-command-method` via `let` rather than as formal args.
* lisp/gnus/gnus-topic.el (gnus-topic-insert-topic-line):
Pass documented vars to eval for `gnus-topic-line-format-spec`.
* lisp/gnus/message.el (message-yank-original): Use `cl-progv` rather
than `eval` to bind the vars from `message-cite-style`.
* lisp/gnus/mml.el (mml-parse-1): Use `apply` instead of `eval`.
(gnus-newsgroup-name, gnus-displaying-mime, gnus-newsgroup-name)
(gnus-article-prepare-hook, gnus-newsgroup-charset)
(gnus-original-article-buffer, gnus-message-buffer)
(message-this-is-news, message-this-is-mail): Declare vars.
* lisp/gnus/deuglify.el (gnus-outlook-rearrange-article): Remove unused
var `cite-marks`.
* lisp/gnus/gnus-art.el (ansi-color-context-region): Declare var.
(gnus-mime-display-attachment-buttons-in-header): Move declaration
before first use.
(gnus-mime-display-alternative): Remove unused var `from`.
* lisp/gnus/gnus-bookmark.el (gnus-bookmark-bmenu-list): Remove unused
var `start` `end`.
* lisp/gnus/gnus-cache.el (gnus-article-decode-hook)
(nnml-generate-active-function): Declare var.
* lisp/gnus/gnus-cite.el (gnus-message-citation-mode): Remove unused
var `keywords`.
* lisp/gnus/gnus-cloud.el (gnus-cloud-encode-data): Remove unused var
`cipher`.
(gnus-cloud-ensure-cloud-group): Remove unused var `method`.
* lisp/gnus/gnus-delay.el (gnus-delay-article): Remove unused var `days`.
* lisp/gnus/gnus-html.el (gnus-html-wash-images): Remove unused vars
`tag`, `string`, and `images`.
(gnus-html-wash-tags): Remove unused vars `string` and `images`.
* lisp/gnus/gnus-msg.el (gnus-msg-mail): Remove unused var `group-name`.
(gnus-group-mail, gnus-group-news, gnus-summary-mail-other-window)
(gnus-summary-news-other-window):
Remove unused vars `group` and `buffer`.
(gnus-configure-posting-styles): Remove unused vars `style` and `attribute`.
* lisp/gnus/gnus-picon.el (gnus-picon-find-face): Remove unused vars
`database`, `directory`, and `instance`.
(gnus-picon-transform-newsgroups): Remove unused var `point`.
* lisp/gnus/gnus-range.el (gnus-range-difference): Remove unused var `safe`.
* lisp/gnus/gnus-score.el (gnus-score-load-file): Remove unused var
`score-fn`.
* lisp/gnus/gnus-sum.el (message-options-set-recipient): Declare var.
* lisp/gnus/gnus-undo.el (gnus-undo): Fix docstring lie.
* lisp/gnus/gnus-util.el (print-string-length)
(iswitchb-make-buflist-hook): Declare vars.
(gnus-emacs-version): Remove unused var `codename`.
(gnus-rename-file): Remove unused vars `old-name` and `new-name`.
* lisp/gnus/gnus-uu.el (gnus-uu-yenc-article): Remove unused var
`start-char`.
(gnus-asynchronous): Declare var.
* lisp/gnus/mm-partial.el (gnus-displaying-mime): Declare var.
(mm-inline-partial): Remove unused var `buffer`.
* lisp/gnus/mm-view.el (w3m-force-redisplay, w3m-safe-url-regexp)
(gnus-displaying-mime, gnus-original-article-buffer)
(gnus-article-prepare-hook): Declare vars.
* lisp/gnus/mml-smime.el (mml-smime-epg-encrypt): Remove unused var
`boundary`.
(mml-smime-epg-verify): Remove unused vars `plain` and `signature-file`.
* lisp/gnus/mml1991.el (pgg-text-mode): Declare var.
* lisp/gnus/mml2015.el (pgg-text-mode): Declare var.
(mml2015-pgg-decrypt): Remove unused var `result`.
(mml2015-epg-key-image-to-string): Remove unused var `error`.
(mml2015-epg-decrypt): Remove unused var `result`.
(mml2015-epg-verify): Remove unused vars `plain` and `signature-file`.
* lisp/gnus/nnbabyl.el (nnml-current-directory): Declare var.
* lisp/gnus/nndiary.el (nndiary-files): Move declaration before first use.
* lisp/gnus/nnfolder.el (nnfolder-request-accept-article):
Remove unused var `buf`.
* lisp/gnus/nnmail.el (nnmail-parse-active): Remove unused var `err`.
* lisp/gnus/nnmairix.el (nnmairix-request-group): Remove unused var `args`.
(nnmairix-request-create-group): Remove unused var `info`.
(nnmairix-request-list): Remove unused var `folder`.
(nnmairix-request-set-mark): Remove unused var `propto`.
(nnmairix-request-set-mark): Remove unused vars `number` and `method`.
(nnmairix-close-group): Remove unused var `method`.
(nnmairix-create-search-group-from-message): Remove unused var `cq`.
(nnmairix-create-server-and-default-group): Remove unused var `create`.
(nnmairix-purge-old-groups): Remove unused var `folder`.
(nnmairix-remove-tick-mark-original-article, nnmairix-get-valid-servers):
Remove unused var `cur`.
(nnmairix-replace-group-and-numbers): Remove unused var `header`.
(nnmairix-goto-original-article): Remove unused var `rval`.
(nnmairix-widget-create-query): Remove unused var `allwidgets`.
* lisp/gnus/nnmbox.el (nnml-current-directory): Declare var.
* lisp/gnus/nnmh.el (nnmh-toplev): Move declaration before first use.
(nnmh-request-list-1): Remove unused var `rdir`.
* lisp/gnus/nnml.el (nnml-generate-nov-file): Remove unused var `file`.
* lisp/gnus/nnrss.el (nnrss-request-article): Remove unused var `post`.
(nnrss-request-article): Remove unused var `fn`.
(nnrss-check-group): Remove unused var `rdf-ns`.
* lisp/gnus/nnweb.el (nnweb-request-article): Remove unused var `active`.
(nnweb-google-parse-1): Remove unused var `Score`.
* lisp/gnus/spam-stat.el (spam-stat-error-holder): Remove var.
(spam-stat-buffer-words-with-scores): Remove unused var `word`.
(spam-stat-score-buffer): Remove unused var `spam-stat-error-holder`.
(spam-stat-split-fancy): Use `err` instead of `spam-stat-error-holder`.
* lisp/gnus/spam-wash.el (spam-wash): Remove unused var `handle`.
* lisp/gnus/spam.el (spam-copy-or-move-routine): Remove unused vars
`article` and `mark`.
(spam-register-routine): Remove unused var `article`.
(spam-log-undo-registration): Remove unused var `found`.
(spam-ifile-register-with-ifile): Remove unused var `parameters`.
(spam-check-stat): Remove unused vars `category` and `return`.
(spam-parse-list): Remove unused var `found`.
(spam-filelist-register-routine): Remove unused var `from`.
2021-01-30 18:44:00 -05:00
|
|
|
(defun mml-dnd-attach-file (uri _action)
|
2006-04-26 21:58:05 +00:00
|
|
|
"Attach a drag and drop file.
|
|
|
|
|
|
|
|
Ask for type, description or disposition according to
|
|
|
|
`mml-dnd-attach-options'."
|
|
|
|
(let ((file (dnd-get-local-file-name uri t)))
|
|
|
|
(when (and file (file-regular-p file))
|
|
|
|
(let ((mml-dnd-attach-options mml-dnd-attach-options)
|
|
|
|
type description disposition)
|
|
|
|
(setq mml-dnd-attach-options
|
|
|
|
(when (and (eq mml-dnd-attach-options t)
|
|
|
|
(not
|
|
|
|
(y-or-n-p
|
|
|
|
"Use default type, disposition and description? ")))
|
|
|
|
'(type description disposition)))
|
|
|
|
(when (or (memq 'type mml-dnd-attach-options)
|
|
|
|
(memq 'disposition mml-dnd-attach-options))
|
|
|
|
(setq type (mml-minibuffer-read-type file)))
|
|
|
|
(when (memq 'description mml-dnd-attach-options)
|
|
|
|
(setq description (mml-minibuffer-read-description)))
|
|
|
|
(when (memq 'disposition mml-dnd-attach-options)
|
2007-10-28 09:18:39 +00:00
|
|
|
(setq disposition (mml-minibuffer-read-disposition type nil file)))
|
2006-04-26 21:58:05 +00:00
|
|
|
(mml-attach-file file type description disposition)))))
|
2000-09-19 13:40:08 +00:00
|
|
|
|
2008-05-18 22:43:12 +00:00
|
|
|
(defun mml-attach-buffer (buffer &optional type description disposition)
|
2000-09-19 13:40:08 +00:00
|
|
|
"Attach a buffer to the outgoing MIME message.
|
2008-05-18 22:43:12 +00:00
|
|
|
BUFFER is the name of the buffer to attach. See
|
|
|
|
`mml-attach-file' for details of operation."
|
2000-09-19 13:40:08 +00:00
|
|
|
(interactive
|
|
|
|
(let* ((buffer (read-buffer "Attach buffer: "))
|
|
|
|
(type (mml-minibuffer-read-type buffer "text/plain"))
|
2008-05-18 22:43:12 +00:00
|
|
|
(description (mml-minibuffer-read-description))
|
|
|
|
(disposition (mml-minibuffer-read-disposition type nil)))
|
|
|
|
(list buffer type description disposition)))
|
2012-09-17 07:39:41 -04:00
|
|
|
;; If in the message header, attach at the end and leave point unchanged.
|
|
|
|
(let ((head (unless (message-in-body-p) (point))))
|
|
|
|
(if head (goto-char (point-max)))
|
2009-09-01 07:59:50 +00:00
|
|
|
(mml-insert-empty-tag 'part 'type type 'buffer buffer
|
|
|
|
'disposition disposition
|
|
|
|
'description description)
|
2012-09-17 07:39:41 -04:00
|
|
|
;; When using Mail mode, make sure it does the mime encoding
|
|
|
|
;; when you send the message.
|
|
|
|
(or (eq mail-user-agent 'message-user-agent)
|
|
|
|
(setq mail-encode-mml t))
|
2009-09-01 07:59:50 +00:00
|
|
|
(when head
|
2012-09-17 07:39:41 -04:00
|
|
|
(unless (pos-visible-in-window-p)
|
2009-09-01 07:59:50 +00:00
|
|
|
(message
|
|
|
|
"The buffer \"%s\" has been attached at the end of the message"
|
2012-09-17 07:39:41 -04:00
|
|
|
buffer))
|
|
|
|
(goto-char head))))
|
2000-09-19 13:40:08 +00:00
|
|
|
|
|
|
|
(defun mml-attach-external (file &optional type description)
|
|
|
|
"Attach an external file into the buffer.
|
|
|
|
FILE is an ange-ftp/efs specification of the part location.
|
|
|
|
TYPE is the MIME type to use."
|
|
|
|
(interactive
|
|
|
|
(let* ((file (mml-minibuffer-read-file "Attach external file: "))
|
|
|
|
(type (mml-minibuffer-read-type file))
|
|
|
|
(description (mml-minibuffer-read-description)))
|
|
|
|
(list file type description)))
|
2012-09-17 07:39:41 -04:00
|
|
|
;; If in the message header, attach at the end and leave point unchanged.
|
|
|
|
(let ((head (unless (message-in-body-p) (point))))
|
|
|
|
(if head (goto-char (point-max)))
|
2009-09-01 07:59:50 +00:00
|
|
|
(mml-insert-empty-tag 'external 'type type 'name file
|
|
|
|
'disposition "attachment" 'description description)
|
2012-09-17 07:39:41 -04:00
|
|
|
;; When using Mail mode, make sure it does the mime encoding
|
|
|
|
;; when you send the message.
|
|
|
|
(or (eq mail-user-agent 'message-user-agent)
|
|
|
|
(setq mail-encode-mml t))
|
2009-09-01 07:59:50 +00:00
|
|
|
(when head
|
2012-09-17 07:39:41 -04:00
|
|
|
(unless (pos-visible-in-window-p)
|
2009-09-01 07:59:50 +00:00
|
|
|
(message "The file \"%s\" has been attached at the end of the message"
|
2012-09-17 07:39:41 -04:00
|
|
|
(file-name-nondirectory file)))
|
|
|
|
(goto-char head))))
|
2000-09-19 13:40:08 +00:00
|
|
|
|
|
|
|
(defun mml-insert-multipart (&optional type)
|
2009-09-10 00:12:07 +00:00
|
|
|
(interactive (if (message-in-body-p)
|
Merge changes made in Gnus trunk.
nndraft.el (nndraft-request-expire-articles): Use the group name instead if "nndraft".
gnus.texi (Using IMAP): Remove the @acronyms from the headings.
nnregistry.el: Added.
nnimap.el (nnimap-insert-partial-structure): Be way more permissive when interpreting the structures.
GNUS-NEWS: Minor error in GNUS-NEWS - password-cache.el.
nnimap.el (nnimap-request-accept-article): Add \r\n to the lines to make this work with Cyrus.
gnus-registry.el: Don't prompt on load, which makes it impossible to build Gnus.
gnus-gravatar.el: Add gnus-gravatar-properties.
gnus-agent.el, gnus-art.el, gnus-bookmark.el, gnus-dired.el, gnus-group.el,\
gnus-int.el, gnus-msg.el, gnus-registry.el, gnus-score.el, gnus-srvr.el,\
gnus-sum.el, gnus-topic.el, gnus-util.el, gnus.el, mm-decode.el, mm-util.el,\
mm-view.el, mml-smime.el, mml.el, nnmairix.el, nnrss.el, smime.el:\
Introduce gnus-completing-read.
gnus-util.el: Make completing-read function configurable.
gnus-util.el: Add requires and fix history for iswitchb.
webmail.el: Remove netscape/my-deja, since they no longer exist.
gnus.el (gnus-local-domain): Declare variable obsolete.
nnimap.el (nnimap-insert-partial-structure): Get the type from the correct slot, too.
pop3.el (pop3-send-streaming-command, pop3-stream-length): New variable.
nnimap.el (nnimap-open-connection): Revert the auto-network->starttls code.
nnimap.el (nnimap-request-set-mark): Erase the buffer before issuing commands.
nnimap.el (nnimap-split-rule): Mark as obsolete.
gnus-sum.el (gnus-valid-move-group-p): Make sure that `group' is a symbol.
nnimap.el (nnimap-split-incoming-mail): Allow `default' as nnimap-split-methods value.
nnimap.el (nnimap-request-article): Downcase the NILs so that they are nil.
nndoc.el (nndoc-retrieve-groups): New function.
gnus.texi: Fix Gravatar documentation.
2010-09-30 08:39:23 +00:00
|
|
|
(list (gnus-completing-read "Multipart type"
|
|
|
|
'("mixed" "alternative"
|
|
|
|
"digest" "parallel"
|
|
|
|
"signed" "encrypted")
|
|
|
|
nil "mixed"))
|
2009-09-10 00:12:07 +00:00
|
|
|
(error "Use this command in the message body")))
|
2000-09-19 13:40:08 +00:00
|
|
|
(or type
|
|
|
|
(setq type "mixed"))
|
|
|
|
(mml-insert-empty-tag "multipart" 'type type)
|
2012-09-17 07:39:41 -04:00
|
|
|
;; When using Mail mode, make sure it does the mime encoding
|
|
|
|
;; when you send the message.
|
|
|
|
(or (eq mail-user-agent 'message-user-agent)
|
|
|
|
(setq mail-encode-mml t))
|
2000-09-19 13:40:08 +00:00
|
|
|
(forward-line -1))
|
|
|
|
|
|
|
|
(defun mml-insert-part (&optional type)
|
2009-09-10 00:12:07 +00:00
|
|
|
(interactive (if (message-in-body-p)
|
|
|
|
(list (mml-minibuffer-read-type ""))
|
|
|
|
(error "Use this command in the message body")))
|
2012-09-17 07:39:41 -04:00
|
|
|
;; When using Mail mode, make sure it does the mime encoding
|
|
|
|
;; when you send the message.
|
|
|
|
(or (eq mail-user-agent 'message-user-agent)
|
|
|
|
(setq mail-encode-mml t))
|
2013-01-30 10:43:40 +00:00
|
|
|
(mml-insert-tag 'part 'type type 'disposition "inline")
|
|
|
|
(save-excursion
|
|
|
|
(mml-insert-tag '/part)))
|
2000-09-19 13:40:08 +00:00
|
|
|
|
2007-12-19 02:54:16 +00:00
|
|
|
(declare-function message-subscribed-p "message" ())
|
|
|
|
(declare-function message-make-mail-followup-to "message"
|
|
|
|
(&optional only-show-subscribed))
|
|
|
|
(declare-function message-position-on-field "message" (header &rest afters))
|
|
|
|
|
2004-09-04 13:13:48 +00:00
|
|
|
(defun mml-preview-insert-mail-followup-to ()
|
|
|
|
"Insert a Mail-Followup-To header before previewing an article.
|
|
|
|
Should be adopted if code in `message-send-mail' is changed."
|
|
|
|
(when (and (message-mail-p)
|
|
|
|
(message-subscribed-p)
|
|
|
|
(not (mail-fetch-field "mail-followup-to"))
|
|
|
|
(message-make-mail-followup-to))
|
|
|
|
(message-position-on-field "Mail-Followup-To" "X-Draft-From")
|
|
|
|
(insert (message-make-mail-followup-to))))
|
|
|
|
|
2007-10-28 09:18:39 +00:00
|
|
|
(defvar mml-preview-buffer nil)
|
|
|
|
|
2007-12-11 05:28:59 +00:00
|
|
|
(autoload 'widget-button-press "wid-edit" nil t)
|
|
|
|
(declare-function widget-event-point "wid-edit" (event))
|
|
|
|
;; If gnus-buffer-configuration is bound this is loaded.
|
|
|
|
(declare-function gnus-configure-windows "gnus-win" (setting &optional force))
|
2007-12-19 02:54:16 +00:00
|
|
|
;; Called after message-mail-p, which autoloads message.
|
|
|
|
(declare-function message-news-p "message" ())
|
|
|
|
(declare-function message-options-set-recipient "message" ())
|
|
|
|
(declare-function message-generate-headers "message" (headers))
|
|
|
|
(declare-function message-sort-headers "message" ())
|
2007-12-11 05:28:59 +00:00
|
|
|
|
* lisp/gnus: Use lexical-binding in all the files
* lisp/gnus/gnus-group.el (features): Use `dlet`.
(gnus-tmp-level, gnus-tmp-marked, gnus-tmp-group): Declare vars.
(gnus-group-insert-group-line): Bind dynbound vars via `let` rather
than as formal args. Bind `number` as dynbound.
(gnus-visual, gnus-score-find-score-files-function)
(gnus-home-score-file, gnus-apply-kill-hook)
(gnus-summary-expunge-below): Declare vars.
(gnus-group-restart, gnus-group-list-plus): Fix `interactive` spec
since the arg is unused.
* lisp/gnus/mail-source.el (mail-source-bind, mail-source-bind-common):
Use `dlet` and suppress the warnings about the non-prefixed dynbound vars.
(mail-source-set-1): Remove unused var `auth-info`.
(mail-source-call-script): Remove unused var `background`.
(mail-source-fetch-pop, mail-source-check-pop): Bind pop3 vars with `dlet`.
* lisp/gnus/gnus-int.el (mail-source-plugged, gnus-inhibit-demon):
Declare vars.
(gnus-server-opened, gnus-status-message)
(gnus-open-server, gnus-close-server, gnus-request-list)
(gnus-finish-retrieve-group-infos, gnus-retrieve-group-data-early)
(gnus-request-list-newsgroups, gnus-request-newgroups)
(gnus-request-regenerate, gnus-request-compact, gnus-request-group)
(gnus-retrieve-groups, gnus-request-post, gnus-request-expunge-group)
(gnus-request-scan, gnus-request-update-info, gnus-request-marks)
(gnus-request-accept-article, gnus-request-create-group)
(gnus-asynchronous-p, gnus-remove-denial):
Bind `gnus-command-method` via `let` rather than as formal args.
* lisp/gnus/gnus-topic.el (gnus-topic-insert-topic-line):
Pass documented vars to eval for `gnus-topic-line-format-spec`.
* lisp/gnus/message.el (message-yank-original): Use `cl-progv` rather
than `eval` to bind the vars from `message-cite-style`.
* lisp/gnus/mml.el (mml-parse-1): Use `apply` instead of `eval`.
(gnus-newsgroup-name, gnus-displaying-mime, gnus-newsgroup-name)
(gnus-article-prepare-hook, gnus-newsgroup-charset)
(gnus-original-article-buffer, gnus-message-buffer)
(message-this-is-news, message-this-is-mail): Declare vars.
* lisp/gnus/deuglify.el (gnus-outlook-rearrange-article): Remove unused
var `cite-marks`.
* lisp/gnus/gnus-art.el (ansi-color-context-region): Declare var.
(gnus-mime-display-attachment-buttons-in-header): Move declaration
before first use.
(gnus-mime-display-alternative): Remove unused var `from`.
* lisp/gnus/gnus-bookmark.el (gnus-bookmark-bmenu-list): Remove unused
var `start` `end`.
* lisp/gnus/gnus-cache.el (gnus-article-decode-hook)
(nnml-generate-active-function): Declare var.
* lisp/gnus/gnus-cite.el (gnus-message-citation-mode): Remove unused
var `keywords`.
* lisp/gnus/gnus-cloud.el (gnus-cloud-encode-data): Remove unused var
`cipher`.
(gnus-cloud-ensure-cloud-group): Remove unused var `method`.
* lisp/gnus/gnus-delay.el (gnus-delay-article): Remove unused var `days`.
* lisp/gnus/gnus-html.el (gnus-html-wash-images): Remove unused vars
`tag`, `string`, and `images`.
(gnus-html-wash-tags): Remove unused vars `string` and `images`.
* lisp/gnus/gnus-msg.el (gnus-msg-mail): Remove unused var `group-name`.
(gnus-group-mail, gnus-group-news, gnus-summary-mail-other-window)
(gnus-summary-news-other-window):
Remove unused vars `group` and `buffer`.
(gnus-configure-posting-styles): Remove unused vars `style` and `attribute`.
* lisp/gnus/gnus-picon.el (gnus-picon-find-face): Remove unused vars
`database`, `directory`, and `instance`.
(gnus-picon-transform-newsgroups): Remove unused var `point`.
* lisp/gnus/gnus-range.el (gnus-range-difference): Remove unused var `safe`.
* lisp/gnus/gnus-score.el (gnus-score-load-file): Remove unused var
`score-fn`.
* lisp/gnus/gnus-sum.el (message-options-set-recipient): Declare var.
* lisp/gnus/gnus-undo.el (gnus-undo): Fix docstring lie.
* lisp/gnus/gnus-util.el (print-string-length)
(iswitchb-make-buflist-hook): Declare vars.
(gnus-emacs-version): Remove unused var `codename`.
(gnus-rename-file): Remove unused vars `old-name` and `new-name`.
* lisp/gnus/gnus-uu.el (gnus-uu-yenc-article): Remove unused var
`start-char`.
(gnus-asynchronous): Declare var.
* lisp/gnus/mm-partial.el (gnus-displaying-mime): Declare var.
(mm-inline-partial): Remove unused var `buffer`.
* lisp/gnus/mm-view.el (w3m-force-redisplay, w3m-safe-url-regexp)
(gnus-displaying-mime, gnus-original-article-buffer)
(gnus-article-prepare-hook): Declare vars.
* lisp/gnus/mml-smime.el (mml-smime-epg-encrypt): Remove unused var
`boundary`.
(mml-smime-epg-verify): Remove unused vars `plain` and `signature-file`.
* lisp/gnus/mml1991.el (pgg-text-mode): Declare var.
* lisp/gnus/mml2015.el (pgg-text-mode): Declare var.
(mml2015-pgg-decrypt): Remove unused var `result`.
(mml2015-epg-key-image-to-string): Remove unused var `error`.
(mml2015-epg-decrypt): Remove unused var `result`.
(mml2015-epg-verify): Remove unused vars `plain` and `signature-file`.
* lisp/gnus/nnbabyl.el (nnml-current-directory): Declare var.
* lisp/gnus/nndiary.el (nndiary-files): Move declaration before first use.
* lisp/gnus/nnfolder.el (nnfolder-request-accept-article):
Remove unused var `buf`.
* lisp/gnus/nnmail.el (nnmail-parse-active): Remove unused var `err`.
* lisp/gnus/nnmairix.el (nnmairix-request-group): Remove unused var `args`.
(nnmairix-request-create-group): Remove unused var `info`.
(nnmairix-request-list): Remove unused var `folder`.
(nnmairix-request-set-mark): Remove unused var `propto`.
(nnmairix-request-set-mark): Remove unused vars `number` and `method`.
(nnmairix-close-group): Remove unused var `method`.
(nnmairix-create-search-group-from-message): Remove unused var `cq`.
(nnmairix-create-server-and-default-group): Remove unused var `create`.
(nnmairix-purge-old-groups): Remove unused var `folder`.
(nnmairix-remove-tick-mark-original-article, nnmairix-get-valid-servers):
Remove unused var `cur`.
(nnmairix-replace-group-and-numbers): Remove unused var `header`.
(nnmairix-goto-original-article): Remove unused var `rval`.
(nnmairix-widget-create-query): Remove unused var `allwidgets`.
* lisp/gnus/nnmbox.el (nnml-current-directory): Declare var.
* lisp/gnus/nnmh.el (nnmh-toplev): Move declaration before first use.
(nnmh-request-list-1): Remove unused var `rdir`.
* lisp/gnus/nnml.el (nnml-generate-nov-file): Remove unused var `file`.
* lisp/gnus/nnrss.el (nnrss-request-article): Remove unused var `post`.
(nnrss-request-article): Remove unused var `fn`.
(nnrss-check-group): Remove unused var `rdf-ns`.
* lisp/gnus/nnweb.el (nnweb-request-article): Remove unused var `active`.
(nnweb-google-parse-1): Remove unused var `Score`.
* lisp/gnus/spam-stat.el (spam-stat-error-holder): Remove var.
(spam-stat-buffer-words-with-scores): Remove unused var `word`.
(spam-stat-score-buffer): Remove unused var `spam-stat-error-holder`.
(spam-stat-split-fancy): Use `err` instead of `spam-stat-error-holder`.
* lisp/gnus/spam-wash.el (spam-wash): Remove unused var `handle`.
* lisp/gnus/spam.el (spam-copy-or-move-routine): Remove unused vars
`article` and `mark`.
(spam-register-routine): Remove unused var `article`.
(spam-log-undo-registration): Remove unused var `found`.
(spam-ifile-register-with-ifile): Remove unused var `parameters`.
(spam-check-stat): Remove unused vars `category` and `return`.
(spam-parse-list): Remove unused var `found`.
(spam-filelist-register-routine): Remove unused var `from`.
2021-01-30 18:44:00 -05:00
|
|
|
(defvar gnus-newsgroup-name)
|
|
|
|
(defvar gnus-displaying-mime)
|
|
|
|
(defvar gnus-newsgroup-name)
|
|
|
|
(defvar gnus-article-prepare-hook)
|
|
|
|
(defvar gnus-newsgroup-charset)
|
|
|
|
(defvar gnus-original-article-buffer)
|
|
|
|
(defvar gnus-message-buffer)
|
|
|
|
(defvar message-this-is-news)
|
|
|
|
(defvar message-this-is-mail)
|
|
|
|
|
2000-09-19 13:40:08 +00:00
|
|
|
(defun mml-preview (&optional raw)
|
|
|
|
"Display current buffer with Gnus, in a new buffer.
|
2007-10-28 09:18:39 +00:00
|
|
|
If RAW, display a raw encoded MIME message.
|
|
|
|
|
2011-11-26 20:43:11 -08:00
|
|
|
The window layout for the preview buffer is controlled by the variables
|
2007-10-28 09:18:39 +00:00
|
|
|
`special-display-buffer-names', `special-display-regexps', or
|
|
|
|
`gnus-buffer-configuration' (the first match made will be used),
|
|
|
|
or the `pop-to-buffer' function."
|
2000-09-19 13:40:08 +00:00
|
|
|
(interactive "P")
|
2007-10-28 09:18:39 +00:00
|
|
|
(setq mml-preview-buffer (generate-new-buffer
|
|
|
|
(concat (if raw "*Raw MIME preview of "
|
* lisp/gnus: Misc simplifications found during conversion to lexical
* lisp/gnus/nnoo.el (noo-import-1, nnoo-define-skeleton-1): Use `dolist`.
(noo-map-functions, nnoo-define-basics): Directly emit the code rather than
going through an intermediate function; this also avoids the use of `eval`.
(noo-map-functions-1, nnoo-define-basics-1): Delete functions,
folded into their corresponding macro.
* lisp/gnus/gmm-utils.el (gmm-tool-bar-from-list): Demote `eval` to
`symbol-value`.
* lisp/gnus/gnus-art.el (gnus-button-handle-describe-key): Avoid `eval`
since `kbd` is a function nowadays.
(gnus-treat-part-number): Rename from `part-number`.
(gnus-treat-total-parts): Rename from `total-parts`.
(gnus-treat-article, gnus-treat-predicate): Adjust accordingly.
* lisp/gnus/gnus-cache.el (gnus-agent-load-alist): Use `declare-function`.
* lisp/gnus/gnus-group.el (gnus-cache-active-hashtb): Use `defvar`.
(gnus-group-iterate): Make it a normal function since lexical scoping
avoids the risk of name capture anyway.
(gnus-group-delete-articles): Actually use the `oldp` arg.
* lisp/gnus/gnus-html.el (gnus-html-wash-images): Fix debug message so
it's emitted after the `url` var it prints is actually initialized.
And avoid `setq` while we're at it.
* lisp/gnus/gnus-msg.el (gnus-group-mail, gnus-group-news)
(gnus-summary-mail-other-window, gnus-summary-news-other-window):
Merge `let`s using `let*`.
* lisp/gnus/gnus-spec.el (gnus-update-format-specifications):
Tighten the scope of `buffer`, and tighten a regexp.
(gnus-parse-simple-format): Reduce code duplication.
* lisp/gnus/gnus-start.el (gnus-child-mode): Don't `defvar` it since we
never use that variable and accordingly don't define it as a minor mode.
* lisp/gnus/gnus-util.el (gnus-byte-compile): Simplify so it obeys
`gnus-use-byte-compile` not just on the first call.
(iswitchb-minibuffer-setup): Declare.
* lisp/gnus/mail-source.el (mail-source-bind-1)
(mail-source-bind-common-1): Use `mapcar`.
(mail-source-set-common-1): Use `dolist`.
(display-time-event-handler): Declare.
* lisp/gnus/mml-smime.el (mml-smime-epg-verify): Reduce code duplication.
* lisp/gnus/mml.el (mml-parse-1): Reduce code duplication.
* lisp/gnus/mml2015.el (mml2015-epg-verify): Reduce code duplication.
* lisp/gnus/nnmail.el (nnmail-get-split-group): Tighten regexp.
(nnmail-split-it): Reduce code duplication.
* lisp/gnus/nnweb.el (nnweb-request-article): Avoid `setq`.
* lisp/gnus/spam.el (BBDB): Use the `noerror` arg of `require`, and
define all the functions for BBDB regardless if the require succeeded.
(spam-exists-in-BBDB-p): Don't inline, not worth it.
2021-01-30 16:45:25 -05:00
|
|
|
"*MIME preview of ")
|
|
|
|
(buffer-name))))
|
Stop message.el from loading about 40 libraries it doesn't always need.
The general approach is to autoload rather than require, and to
require in the specific functions rather than the file. (Bug#5642)
* url/url.el: Move mailcap require earlier in the file.
* gnus/gmm-utils.el: Don't require wid-edit.
(widget-create-child-value, widget-convert, widget-default-get):
Autoload.
* gnus/gnus-util.el: Don't require time-date, netrc.
(message-fetch-field, gnus-group-name-decode): Declare rather than
autoloading.
(gnus-fetch-field): Require message.
(gnus-decode-newsgroups): Require gnus-group.
* gnus/ietf-drums.el: Don't require time-date.
* gnus/message.el: Don't require hashcash, canlock, ecomplete.
Do require mail-utils. Require nnheader only when compiling.
(smtpmail-default-smtp-server): Remove declaration.
(message-send-mail-function): Check smtpmail-default-smtp-server
is bound rather than requiring smtpmail.
(message-auto-save-directory, message-insert-signature): Use
expand-file-name rather than nnheader-concat.
(nnheader-insert-file-contents): Autoload.
(hashcash-wait-async): Declare.
(message-send-mail): Only call gnus-setup-posting-charset if
gnus-group-posting-charset-alist is bound. Require hashcash if needed.
(message-send-mail-with-sendmail): Require sendmail.
(canlock-password, canlock-password-for-verify): Declare.
(message-canlock-password): Require canlock.
(nnheader-get-report): Autoload.
(gnus-setup-posting-charset): Declare.
(message-send-news): Require gnus-msg.
(message-make-references, message-make-in-reply-to): Use mail-header-id
rather than the alias mail-header-message-id.
(ecomplete-add-item, ecomplete-save): Declare.
(message-put-addresses-in-ecomplete): Require ecomplete.
(ecomplete-display-matches): Autoload.
* gnus/mm-decode.el: Don't require mailcap, gnus-util.
(gnus-map-function, gnus-replace-in-string, gnus-read-shell-command)
(message-fetch-field, mailcap-parse-mailcaps, mailcap-mime-info):
Autoload.
(mailcap-mime-extensions): Declare.
* gnus/mm-encode.el: Don't require mailcap.
(mailcap-extension-to-mime): Autoload.
* gnus/mml-sec.el: Don't require password-cache.
* gnus/mml.el (gnus-setup-posting-charset): Declare rather than autoload.
(mailcap-parse-mimetypes, mailcap-mime-types): Declare.
(mml-minibuffer-read-type): Require mailcap.
(mml-preview): Require gnus-msg.
* gnus/mml1991.el: Require password-cache.
(password-cache-expiry): Remove declaration.
* gnus/mml2015.el: Require password-cache.
(password-cache-expiry): Remove declaration.
* gnus/nneething.el (mailcap): Require mailcap.
* gnus/nnheader.el: (declare-function): Add compatibility stub.
(message-remove-header): Declare rather than autoload.
(nnheader-replace-header): Require message.
* gnus/nnimap.el (declare-function): Add compatibility stub.
(netrc-parse, netrc-machine-user-or-password): Declare.
(nnimap-open-connection): Require netrc.
* gnus/nntp.el (declare-function): Add compatibility stub.
(netrc-parse, netrc-machine, netrc-get): Declare.
(nntp-send-authinfo): Require netrc.
* gnus/rfc2047.el: Don't require qp.
(quoted-printable-encode-region, quoted-printable-decode-string):
Autoload.
* gnus/sieve-mode.el: Don't require easymenu.
(easy-menu-add-item): Autoload it.
* gnus/spam-stat.el (time-to-number-of-days): Autoload it.
* password-cache.el (password-cache, password-cache-expiry):
Autoload.
2010-03-18 19:55:37 -07:00
|
|
|
(require 'gnus-msg) ; for gnus-setup-posting-charset
|
2004-09-04 13:13:48 +00:00
|
|
|
(save-excursion
|
|
|
|
(let* ((buf (current-buffer))
|
2010-10-22 04:15:14 +00:00
|
|
|
(article-editing (eq major-mode 'gnus-article-edit-mode))
|
2004-09-04 13:13:48 +00:00
|
|
|
(message-options message-options)
|
|
|
|
(message-this-is-mail (message-mail-p))
|
|
|
|
(message-this-is-news (message-news-p))
|
|
|
|
(message-posting-charset (or (gnus-setup-posting-charset
|
|
|
|
(save-restriction
|
|
|
|
(message-narrow-to-headers-or-head)
|
|
|
|
(message-fetch-field "Newsgroups")))
|
|
|
|
message-posting-charset)))
|
|
|
|
(message-options-set-recipient)
|
|
|
|
(when (boundp 'gnus-buffers)
|
2007-10-28 09:18:39 +00:00
|
|
|
(push mml-preview-buffer gnus-buffers))
|
|
|
|
(save-restriction
|
|
|
|
(widen)
|
|
|
|
(set-buffer mml-preview-buffer)
|
|
|
|
(erase-buffer)
|
|
|
|
(insert-buffer-substring buf))
|
2004-09-04 13:13:48 +00:00
|
|
|
(mml-preview-insert-mail-followup-to)
|
|
|
|
(let ((message-deletable-headers (if (message-news-p)
|
|
|
|
nil
|
2010-10-22 04:15:14 +00:00
|
|
|
message-deletable-headers))
|
|
|
|
(mail-header-separator (if article-editing
|
|
|
|
""
|
|
|
|
mail-header-separator)))
|
2004-09-04 13:13:48 +00:00
|
|
|
(message-generate-headers
|
|
|
|
(copy-sequence (if (message-news-p)
|
|
|
|
message-required-news-headers
|
2010-10-22 04:15:14 +00:00
|
|
|
message-required-mail-headers)))
|
2010-10-22 04:30:27 +00:00
|
|
|
(unless article-editing
|
|
|
|
(if (re-search-forward
|
|
|
|
(concat "^" (regexp-quote mail-header-separator) "\n") nil t)
|
|
|
|
(replace-match "\n"))
|
|
|
|
(setq mail-header-separator ""))
|
2007-10-28 09:18:39 +00:00
|
|
|
(message-sort-headers)
|
2004-09-04 13:13:48 +00:00
|
|
|
(mml-to-mime))
|
|
|
|
(if raw
|
2016-02-14 14:42:26 +11:00
|
|
|
(let ((s (buffer-string)))
|
|
|
|
;; Insert the content into unibyte buffer.
|
|
|
|
(erase-buffer)
|
|
|
|
(mm-disable-multibyte)
|
|
|
|
(insert s))
|
2004-09-04 13:13:48 +00:00
|
|
|
(let ((gnus-newsgroup-charset (car message-posting-charset))
|
2010-11-25 05:09:25 +00:00
|
|
|
gnus-article-prepare-hook gnus-original-article-buffer
|
|
|
|
gnus-displaying-mime)
|
2004-09-04 13:13:48 +00:00
|
|
|
(run-hooks 'gnus-article-decode-hook)
|
|
|
|
(let ((gnus-newsgroup-name "dummy")
|
|
|
|
(gnus-newsrc-hashtb (or gnus-newsrc-hashtb
|
|
|
|
(gnus-make-hashtable 5))))
|
|
|
|
(gnus-article-prepare-display))))
|
|
|
|
;; Disable article-mode-map.
|
|
|
|
(use-local-map nil)
|
|
|
|
(add-hook 'kill-buffer-hook
|
|
|
|
(lambda ()
|
* lisp/gnus: Misc simplifications found during conversion to lexical
* lisp/gnus/nnoo.el (noo-import-1, nnoo-define-skeleton-1): Use `dolist`.
(noo-map-functions, nnoo-define-basics): Directly emit the code rather than
going through an intermediate function; this also avoids the use of `eval`.
(noo-map-functions-1, nnoo-define-basics-1): Delete functions,
folded into their corresponding macro.
* lisp/gnus/gmm-utils.el (gmm-tool-bar-from-list): Demote `eval` to
`symbol-value`.
* lisp/gnus/gnus-art.el (gnus-button-handle-describe-key): Avoid `eval`
since `kbd` is a function nowadays.
(gnus-treat-part-number): Rename from `part-number`.
(gnus-treat-total-parts): Rename from `total-parts`.
(gnus-treat-article, gnus-treat-predicate): Adjust accordingly.
* lisp/gnus/gnus-cache.el (gnus-agent-load-alist): Use `declare-function`.
* lisp/gnus/gnus-group.el (gnus-cache-active-hashtb): Use `defvar`.
(gnus-group-iterate): Make it a normal function since lexical scoping
avoids the risk of name capture anyway.
(gnus-group-delete-articles): Actually use the `oldp` arg.
* lisp/gnus/gnus-html.el (gnus-html-wash-images): Fix debug message so
it's emitted after the `url` var it prints is actually initialized.
And avoid `setq` while we're at it.
* lisp/gnus/gnus-msg.el (gnus-group-mail, gnus-group-news)
(gnus-summary-mail-other-window, gnus-summary-news-other-window):
Merge `let`s using `let*`.
* lisp/gnus/gnus-spec.el (gnus-update-format-specifications):
Tighten the scope of `buffer`, and tighten a regexp.
(gnus-parse-simple-format): Reduce code duplication.
* lisp/gnus/gnus-start.el (gnus-child-mode): Don't `defvar` it since we
never use that variable and accordingly don't define it as a minor mode.
* lisp/gnus/gnus-util.el (gnus-byte-compile): Simplify so it obeys
`gnus-use-byte-compile` not just on the first call.
(iswitchb-minibuffer-setup): Declare.
* lisp/gnus/mail-source.el (mail-source-bind-1)
(mail-source-bind-common-1): Use `mapcar`.
(mail-source-set-common-1): Use `dolist`.
(display-time-event-handler): Declare.
* lisp/gnus/mml-smime.el (mml-smime-epg-verify): Reduce code duplication.
* lisp/gnus/mml.el (mml-parse-1): Reduce code duplication.
* lisp/gnus/mml2015.el (mml2015-epg-verify): Reduce code duplication.
* lisp/gnus/nnmail.el (nnmail-get-split-group): Tighten regexp.
(nnmail-split-it): Reduce code duplication.
* lisp/gnus/nnweb.el (nnweb-request-article): Avoid `setq`.
* lisp/gnus/spam.el (BBDB): Use the `noerror` arg of `require`, and
define all the functions for BBDB regardless if the require succeeded.
(spam-exists-in-BBDB-p): Don't inline, not worth it.
2021-01-30 16:45:25 -05:00
|
|
|
(mm-destroy-parts gnus-article-mime-handles))
|
|
|
|
nil t)
|
2004-09-04 13:13:48 +00:00
|
|
|
(setq buffer-read-only t)
|
|
|
|
(local-set-key "q" (lambda () (interactive) (kill-buffer nil)))
|
|
|
|
(local-set-key "=" (lambda () (interactive) (delete-other-windows)))
|
|
|
|
(local-set-key "\r"
|
|
|
|
(lambda ()
|
|
|
|
(interactive)
|
|
|
|
(widget-button-press (point))))
|
2016-02-10 14:42:03 +11:00
|
|
|
(local-set-key [mouse-2]
|
2004-09-04 13:13:48 +00:00
|
|
|
(lambda (event)
|
|
|
|
(interactive "@e")
|
|
|
|
(widget-button-press (widget-event-point event) event)))
|
2007-10-28 09:18:39 +00:00
|
|
|
;; FIXME: Buffer is in article mode, but most tool bar commands won't
|
|
|
|
;; work. Maybe only keep the following icons: search, print, quit
|
|
|
|
(goto-char (point-min))))
|
2016-02-12 14:39:30 +11:00
|
|
|
(if (and (not (special-display-p (buffer-name mml-preview-buffer)))
|
2007-10-28 09:18:39 +00:00
|
|
|
(boundp 'gnus-buffer-configuration)
|
|
|
|
(assq 'mml-preview gnus-buffer-configuration))
|
|
|
|
(let ((gnus-message-buffer (current-buffer)))
|
|
|
|
(gnus-configure-windows 'mml-preview))
|
|
|
|
(pop-to-buffer mml-preview-buffer)))
|
2000-09-19 13:40:08 +00:00
|
|
|
|
|
|
|
(defun mml-validate ()
|
|
|
|
"Validate the current MML document."
|
|
|
|
(interactive)
|
|
|
|
(mml-parse))
|
|
|
|
|
2004-09-04 13:13:48 +00:00
|
|
|
(defun mml-tweak-part (cont)
|
|
|
|
"Tweak a MML part."
|
|
|
|
(let ((tweak (cdr (assq 'tweak cont)))
|
|
|
|
func)
|
|
|
|
(cond
|
|
|
|
(tweak
|
|
|
|
(setq func
|
|
|
|
(or (cdr (assoc tweak mml-tweak-function-alist))
|
|
|
|
(intern tweak))))
|
|
|
|
(mml-tweak-type-alist
|
|
|
|
(let ((alist mml-tweak-type-alist)
|
|
|
|
(type (or (cdr (assq 'type cont)) "text/plain")))
|
|
|
|
(while alist
|
|
|
|
(if (string-match (caar alist) type)
|
|
|
|
(setq func (cdar alist)
|
|
|
|
alist nil)
|
|
|
|
(setq alist (cdr alist)))))))
|
|
|
|
(if func
|
|
|
|
(funcall func cont)
|
|
|
|
cont)
|
|
|
|
(let ((alist mml-tweak-sexp-alist))
|
|
|
|
(while alist
|
* lisp/gnus: Use lexical-binding in all the files
* lisp/gnus/gnus-group.el (features): Use `dlet`.
(gnus-tmp-level, gnus-tmp-marked, gnus-tmp-group): Declare vars.
(gnus-group-insert-group-line): Bind dynbound vars via `let` rather
than as formal args. Bind `number` as dynbound.
(gnus-visual, gnus-score-find-score-files-function)
(gnus-home-score-file, gnus-apply-kill-hook)
(gnus-summary-expunge-below): Declare vars.
(gnus-group-restart, gnus-group-list-plus): Fix `interactive` spec
since the arg is unused.
* lisp/gnus/mail-source.el (mail-source-bind, mail-source-bind-common):
Use `dlet` and suppress the warnings about the non-prefixed dynbound vars.
(mail-source-set-1): Remove unused var `auth-info`.
(mail-source-call-script): Remove unused var `background`.
(mail-source-fetch-pop, mail-source-check-pop): Bind pop3 vars with `dlet`.
* lisp/gnus/gnus-int.el (mail-source-plugged, gnus-inhibit-demon):
Declare vars.
(gnus-server-opened, gnus-status-message)
(gnus-open-server, gnus-close-server, gnus-request-list)
(gnus-finish-retrieve-group-infos, gnus-retrieve-group-data-early)
(gnus-request-list-newsgroups, gnus-request-newgroups)
(gnus-request-regenerate, gnus-request-compact, gnus-request-group)
(gnus-retrieve-groups, gnus-request-post, gnus-request-expunge-group)
(gnus-request-scan, gnus-request-update-info, gnus-request-marks)
(gnus-request-accept-article, gnus-request-create-group)
(gnus-asynchronous-p, gnus-remove-denial):
Bind `gnus-command-method` via `let` rather than as formal args.
* lisp/gnus/gnus-topic.el (gnus-topic-insert-topic-line):
Pass documented vars to eval for `gnus-topic-line-format-spec`.
* lisp/gnus/message.el (message-yank-original): Use `cl-progv` rather
than `eval` to bind the vars from `message-cite-style`.
* lisp/gnus/mml.el (mml-parse-1): Use `apply` instead of `eval`.
(gnus-newsgroup-name, gnus-displaying-mime, gnus-newsgroup-name)
(gnus-article-prepare-hook, gnus-newsgroup-charset)
(gnus-original-article-buffer, gnus-message-buffer)
(message-this-is-news, message-this-is-mail): Declare vars.
* lisp/gnus/deuglify.el (gnus-outlook-rearrange-article): Remove unused
var `cite-marks`.
* lisp/gnus/gnus-art.el (ansi-color-context-region): Declare var.
(gnus-mime-display-attachment-buttons-in-header): Move declaration
before first use.
(gnus-mime-display-alternative): Remove unused var `from`.
* lisp/gnus/gnus-bookmark.el (gnus-bookmark-bmenu-list): Remove unused
var `start` `end`.
* lisp/gnus/gnus-cache.el (gnus-article-decode-hook)
(nnml-generate-active-function): Declare var.
* lisp/gnus/gnus-cite.el (gnus-message-citation-mode): Remove unused
var `keywords`.
* lisp/gnus/gnus-cloud.el (gnus-cloud-encode-data): Remove unused var
`cipher`.
(gnus-cloud-ensure-cloud-group): Remove unused var `method`.
* lisp/gnus/gnus-delay.el (gnus-delay-article): Remove unused var `days`.
* lisp/gnus/gnus-html.el (gnus-html-wash-images): Remove unused vars
`tag`, `string`, and `images`.
(gnus-html-wash-tags): Remove unused vars `string` and `images`.
* lisp/gnus/gnus-msg.el (gnus-msg-mail): Remove unused var `group-name`.
(gnus-group-mail, gnus-group-news, gnus-summary-mail-other-window)
(gnus-summary-news-other-window):
Remove unused vars `group` and `buffer`.
(gnus-configure-posting-styles): Remove unused vars `style` and `attribute`.
* lisp/gnus/gnus-picon.el (gnus-picon-find-face): Remove unused vars
`database`, `directory`, and `instance`.
(gnus-picon-transform-newsgroups): Remove unused var `point`.
* lisp/gnus/gnus-range.el (gnus-range-difference): Remove unused var `safe`.
* lisp/gnus/gnus-score.el (gnus-score-load-file): Remove unused var
`score-fn`.
* lisp/gnus/gnus-sum.el (message-options-set-recipient): Declare var.
* lisp/gnus/gnus-undo.el (gnus-undo): Fix docstring lie.
* lisp/gnus/gnus-util.el (print-string-length)
(iswitchb-make-buflist-hook): Declare vars.
(gnus-emacs-version): Remove unused var `codename`.
(gnus-rename-file): Remove unused vars `old-name` and `new-name`.
* lisp/gnus/gnus-uu.el (gnus-uu-yenc-article): Remove unused var
`start-char`.
(gnus-asynchronous): Declare var.
* lisp/gnus/mm-partial.el (gnus-displaying-mime): Declare var.
(mm-inline-partial): Remove unused var `buffer`.
* lisp/gnus/mm-view.el (w3m-force-redisplay, w3m-safe-url-regexp)
(gnus-displaying-mime, gnus-original-article-buffer)
(gnus-article-prepare-hook): Declare vars.
* lisp/gnus/mml-smime.el (mml-smime-epg-encrypt): Remove unused var
`boundary`.
(mml-smime-epg-verify): Remove unused vars `plain` and `signature-file`.
* lisp/gnus/mml1991.el (pgg-text-mode): Declare var.
* lisp/gnus/mml2015.el (pgg-text-mode): Declare var.
(mml2015-pgg-decrypt): Remove unused var `result`.
(mml2015-epg-key-image-to-string): Remove unused var `error`.
(mml2015-epg-decrypt): Remove unused var `result`.
(mml2015-epg-verify): Remove unused vars `plain` and `signature-file`.
* lisp/gnus/nnbabyl.el (nnml-current-directory): Declare var.
* lisp/gnus/nndiary.el (nndiary-files): Move declaration before first use.
* lisp/gnus/nnfolder.el (nnfolder-request-accept-article):
Remove unused var `buf`.
* lisp/gnus/nnmail.el (nnmail-parse-active): Remove unused var `err`.
* lisp/gnus/nnmairix.el (nnmairix-request-group): Remove unused var `args`.
(nnmairix-request-create-group): Remove unused var `info`.
(nnmairix-request-list): Remove unused var `folder`.
(nnmairix-request-set-mark): Remove unused var `propto`.
(nnmairix-request-set-mark): Remove unused vars `number` and `method`.
(nnmairix-close-group): Remove unused var `method`.
(nnmairix-create-search-group-from-message): Remove unused var `cq`.
(nnmairix-create-server-and-default-group): Remove unused var `create`.
(nnmairix-purge-old-groups): Remove unused var `folder`.
(nnmairix-remove-tick-mark-original-article, nnmairix-get-valid-servers):
Remove unused var `cur`.
(nnmairix-replace-group-and-numbers): Remove unused var `header`.
(nnmairix-goto-original-article): Remove unused var `rval`.
(nnmairix-widget-create-query): Remove unused var `allwidgets`.
* lisp/gnus/nnmbox.el (nnml-current-directory): Declare var.
* lisp/gnus/nnmh.el (nnmh-toplev): Move declaration before first use.
(nnmh-request-list-1): Remove unused var `rdir`.
* lisp/gnus/nnml.el (nnml-generate-nov-file): Remove unused var `file`.
* lisp/gnus/nnrss.el (nnrss-request-article): Remove unused var `post`.
(nnrss-request-article): Remove unused var `fn`.
(nnrss-check-group): Remove unused var `rdf-ns`.
* lisp/gnus/nnweb.el (nnweb-request-article): Remove unused var `active`.
(nnweb-google-parse-1): Remove unused var `Score`.
* lisp/gnus/spam-stat.el (spam-stat-error-holder): Remove var.
(spam-stat-buffer-words-with-scores): Remove unused var `word`.
(spam-stat-score-buffer): Remove unused var `spam-stat-error-holder`.
(spam-stat-split-fancy): Use `err` instead of `spam-stat-error-holder`.
* lisp/gnus/spam-wash.el (spam-wash): Remove unused var `handle`.
* lisp/gnus/spam.el (spam-copy-or-move-routine): Remove unused vars
`article` and `mark`.
(spam-register-routine): Remove unused var `article`.
(spam-log-undo-registration): Remove unused var `found`.
(spam-ifile-register-with-ifile): Remove unused var `parameters`.
(spam-check-stat): Remove unused vars `category` and `return`.
(spam-parse-list): Remove unused var `found`.
(spam-filelist-register-routine): Remove unused var `from`.
2021-01-30 18:44:00 -05:00
|
|
|
(if (eval (caar alist) t)
|
2004-09-04 13:13:48 +00:00
|
|
|
(funcall (cdar alist) cont))
|
|
|
|
(setq alist (cdr alist)))))
|
|
|
|
cont)
|
|
|
|
|
|
|
|
(defun mml-tweak-externalize-attachments (cont)
|
|
|
|
"Tweak attached files as external parts."
|
|
|
|
(let (filename-cons)
|
|
|
|
(when (and (eq (car cont) 'part)
|
|
|
|
(not (cdr (assq 'buffer cont)))
|
|
|
|
(and (setq filename-cons (assq 'filename cont))
|
|
|
|
(not (equal (cdr (assq 'nofile cont)) "yes"))))
|
|
|
|
(setcar cont 'external)
|
|
|
|
(setcar filename-cons 'name))))
|
|
|
|
|
2000-09-19 13:40:08 +00:00
|
|
|
(provide 'mml)
|
|
|
|
|
|
|
|
;;; mml.el ends here
|