mh-gnus.el.
* mh-gnus.el: Require mh-acros.
(mh-defmacro-compat, mh-defun-compat): Move to mh-acros.el.
* mh-utils.el (url-unreserved-chars, url-hexify-string): Define if not
defined. Copied from url-util.el in Emacs22 for Emacs 21.
2006-01-11 Bill Wohler <wohler@newt.com>
+ * mh-acros.el (mh-defun-compat, mh-defmacro-compat): Move here
+ from mh-gnus.el.
+
+ * mh-gnus.el: Require mh-acros.
+ (mh-defmacro-compat, mh-defun-compat): Move to mh-acros.el.
+
+ * mh-utils.el (mh-x-image-url-cache-canonicalize): Use
+ url-hexify-string to remove special characters from filenames
+ (closes SF #1396499). Note that this invalidates the existing
+ names in your cache so you might as well remove
+ ~/Mail/.mhe-x-image-cache/* now.
+ (url-unreserved-chars, url-hexify-string): Define if not defined.
+ Copied from url-util.el in Emacs22 for Emacs 21.
+
* mh-buffers.el: New file. Contains constants and code from
mh-index.el and mh-utils.el.
* mh-comp.el (mh-forward): Cosmetics on prompt when draft exists.
(mh-send-letter): Add -msgid to mh-send-args (closes SF #725425).
- * mh-utils.el (mh-x-image-url-cache-canonicalize): Use
- url-hexify-string to remove special characters from filenames
- (closes SF #1396499). Note that this invalidates the existing
- names in your cache so you might as well remove
- ~/Mail/.mhe-x-image-cache/* now.
-
2006-01-10 Bill Wohler <wohler@newt.com>
* mh-comp.el (mh-insert-letter): If you choose a different folder,
;;; mh-acros.el --- Macros used in MH-E
-;; Copyright (C) 2004 Free Software Foundation, Inc.
+;; Copyright (C) 2004, 2006 Free Software Foundation, Inc.
;; Author: Satyaki Das <satyaki@theforce.stanford.edu>
;; Maintainer: Bill Wohler <wohler@newt.com>
`(when (fboundp ',function)
(funcall ',function ,@args))))
+(defmacro mh-defun-compat (function arg-list &rest body)
+ "This is a macro to define functions which are not defined.
+It is used for functions which were added to Emacs recently.
+If FUNCTION is not defined then it is defined to have argument
+list, ARG-LIST and body, BODY."
+ (let ((defined-p (fboundp function)))
+ (unless defined-p
+ `(defun ,function ,arg-list ,@body))))
+(put 'mh-defun-compat 'lisp-indent-function 'defun)
+
+(defmacro mh-defmacro-compat (function arg-list &rest body)
+ "This is a macro to define functions which are not defined.
+It is used for macros which were added to Emacs recently.
+If FUNCTION is not defined then it is defined to have argument
+list, ARG-LIST and body, BODY."
+ (let ((defined-p (fboundp function)))
+ (unless defined-p
+ `(defmacro ,function ,arg-list ,@body))))
+(put 'mh-defmacro-compat 'lisp-indent-function 'defun)
+
(defmacro mh-make-local-hook (hook)
"Make HOOK local if needed.
XEmacs and versions of GNU Emacs before 21.1 require
;;; mh-gnus.el --- Make MH-E compatible with installed version of Gnus.
-;; Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
;; Author: Satyaki Das <satyaki@theforce.stanford.edu>
;; Maintainer: Bill Wohler <wohler@newt.com>
;;; Code:
+(eval-when-compile (require 'mh-acros))
+
;; Load libraries in a non-fatal way in order to see if certain functions are
;; pre-defined.
(load "mailabbrev" t t)
(load "mml" t t)
(load "smiley" t t)
-(defmacro mh-defun-compat (function arg-list &rest body)
- "This is a macro to define functions which are not defined.
-It is used for Gnus utility functions which were added recently.
-If FUNCTION is not defined then it is defined to have argument
-list, ARG-LIST and body, BODY."
- (let ((defined-p (fboundp function)))
- (unless defined-p
- `(defun ,function ,arg-list ,@body))))
-(put 'mh-defun-compat 'lisp-indent-function 'defun)
-
-(defmacro mh-defmacro-compat (function arg-list &rest body)
- "This is a macro to define functions which are not defined.
-It is used for Gnus utility functions which were added recently.
-If FUNCTION is not defined then it is defined to have argument
-list, ARG-LIST and body, BODY."
- (let ((defined-p (fboundp function)))
- (unless defined-p
- `(defmacro ,function ,arg-list ,@body))))
-(put 'mh-defmacro-compat 'lisp-indent-function 'defun)
-
-;; Copy of original function from gnus-util.el.
+;; Copy of function from gnus-util.el.
(mh-defun-compat gnus-local-map-property (map)
"Return a list suitable for a text property list specifying keymap MAP."
(cond (mh-xemacs-flag (list 'keymap map))
((>= emacs-major-version 21) (list 'keymap map))
(t (list 'local-map map))))
-;; Copy of original function from mm-decode.el.
+;; Copy of function from mm-decode.el.
(mh-defun-compat mm-merge-handles (handles1 handles2)
(append (if (listp (car handles1)) handles1 (list handles1))
(if (listp (car handles2)) handles2 (list handles2))))
(mh-defun-compat mm-possibly-verify-or-decrypt (parts ctl)
nil)
-;; Copy of original macro is in mm-decode.el.
+;; Copy of macro in mm-decode.el.
(mh-defmacro-compat mm-handle-multipart-ctl-parameter (handle parameter)
`(get-text-property 0 ,parameter (car ,handle)))
-;; Copy of original function in mm-decode.el.
+;; Copy of function in mm-decode.el.
(mh-defun-compat mm-readable-p (handle)
"Say whether the content of HANDLE is readable."
(and (< (with-current-buffer (mm-handle-buffer handle)
(and (eq (mm-body-7-or-8) '7bit)
(not (mm-long-lines-p 76))))))
-;; Copy of original function in mm-bodies.el.
+;; Copy of function in mm-bodies.el.
(mh-defun-compat mm-long-lines-p (length)
"Say whether any of the lines in the buffer is longer than LENGTH."
(save-excursion
"Older versions of Emacs don't have this function."
nil)
-;; Copy of original function in mml.el.
+;; Copy of function in mml.el.
(mh-defun-compat mml-minibuffer-read-disposition (type &optional default)
(unless default (setq default
(if (and (string-match "\\`text/" type)
"Scale image in INPUT file and write to OUTPUT file using ImageMagick."
(call-process "convert" nil nil nil "-geometry" "96x48" input output))
+;; Copy of constant from url-util.el in Emacs 22; needed by Emacs 21.
+(if (not (boundp 'url-unreserved-chars))
+ (defconst url-unreserved-chars
+ '(
+ ?a ?b ?c ?d ?e ?f ?g ?h ?i ?j ?k ?l ?m ?n ?o ?p ?q ?r ?s ?t ?u ?v ?w ?x ?y ?z
+ ?A ?B ?C ?D ?E ?F ?G ?H ?I ?J ?K ?L ?M ?N ?O ?P ?Q ?R ?S ?T ?U ?V ?W ?X ?Y ?Z
+ ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9
+ ?- ?_ ?. ?! ?~ ?* ?' ?\( ?\))
+ "A list of characters that are _NOT_ reserved in the URL spec.
+This is taken from RFC 2396."))
+
+;; Copy of function from url-util.el in Emacs 22; needed by Emacs 21.
+(mh-defun-compat url-hexify-string (str)
+ "Escape characters in a string."
+ (mapconcat
+ (lambda (char)
+ ;; Fixme: use a char table instead.
+ (if (not (memq char url-unreserved-chars))
+ (if (> char 255)
+ (error "Hexifying multibyte character %s" str)
+ (format "%%%02X" char))
+ (char-to-string char)))
+ str ""))
+
(defun mh-x-image-url-cache-canonicalize (url)
"Canonicalize URL.
Replace the ?/ character with a ?! character and append .png.