--- apel-10.8-orig/ChangeLog	2013-10-03 18:17:05.176741628 +1000
+++ apel-10.8/ChangeLog	2013-10-03 18:16:54.442741731 +1000
@@ -1,3 +1,56 @@
+2013-07-05  Tatsuya Kinoshita  <tats@vega.ocn.ne.jp>
+
+	* mcs-20.el: Really check whether the mule-vesion variable is defined.
+
+2013-07-04  Kazuhiro Ito  <kzhr@d1.dion.ne.jp>
+
+	* mcs-20.el: Check whether the mule-vesion variable is defined.
+	Cf. https://github.com/ikazuhiro/apel/commit/328c02e022340b36dd7e5f9250c7f86d2bafd793
+
+2013-03-24  Kazuhiro Ito  <kzhr@d1.dion.ne.jp>
+
+	* mcs-20.el (mime-charset-to-coding-system): Display the message
+	and use charset name as coding system when
+	`mime-charset-coding-system-alist' indicates invalid coding
+	system.
+
+2012-09-07  Kazuhiro Ito  <kzhr@d1.dion.ne.jp>
+
+	* mcs-e20.el (coding-system-to-mime-charset): Coding system's
+	setting is preferred to mime-charset-coding-system-alist's value.
+	Detect MIME name from mime-charset-coding-system-alist's value
+	more permissively.
+
+2012-08-08  Kazuhiro Ito  <kzhr@d1.dion.ne.jp>
+
+	* poe.el (next-command-event): Fix that Emacs 21 and later were
+	treated as 'Emacs 19, 20.1 and 20.2'.
+
+2012-07-28  Kazuhiro Ito  <kzhr@d1.dion.ne.jp>
+
+	* mcs-e20.el (charsets-mime-charset-alist): Do not use
+	`iso-2022-jp-2'.
+
+2012-07-28  Kazuhiro Ito  <kzhr@d1.dion.ne.jp>
+
+	* mcs-20.el (detect-mime-charset-string): (Emacs23 and later) New
+	function.
+	(detect-mime-charset-region): Use it.
+
+2011-06-17  Kazuhiro Ito  <kzhr@d1.dion.ne.jp>
+
+	* mcs-20.el (detect-mime-charset-region): (Emacs23 and later) Do
+	not check whether `charsets-mime-charset-alist' contains non
+	charset symbol.
+
+	* mcs-e20.el (charsets-mime-charset-alist): Remove non charset
+	symbol for Emacs 23 and later.
+
+2010-03-19  Kazuhiro Ito  <kzhr@d1.dion.ne.jp>
+
+	* mcs-20.el (detect-mime-charset-region): Do not care priority of
+	charsets on Emacs 23 and later.
+
 2011-07-17  David Maus  <dmaus@ictsoc.de>
 
 	* tinycustom.el (defcustom): Use new style backquotes.
--- apel-10.8-orig/mcs-20.el	2005-07-06 12:08:52.000000000 +1000
+++ apel-10.8/mcs-20.el	2013-10-03 17:44:42.936760151 +1000
@@ -84,11 +84,13 @@
   (if (stringp charset)
       (setq charset (intern (downcase charset)))
     )
-  (let ((cs (assq charset mime-charset-coding-system-alist)))
-    (setq cs
-	  (if cs
-	      (cdr cs)
-	    charset))
+  (let ((cs (cdr (assq charset mime-charset-coding-system-alist))))
+    (unless (or (null cs) (find-coding-system cs))
+      (message
+       "Invalid coding system: %s.  Confirm mime-charset-coding-system-alist."
+       cs)
+      (setq cs nil))
+    (unless cs (setq cs charset))
     (if lbt
 	(setq cs (intern (format "%s-%s" cs
 				 (cond ((eq lbt 'CRLF) 'dos)
@@ -96,12 +98,11 @@
 				       ((eq lbt 'CR) 'mac)
 				       (t lbt)))))
       )
-    (if (find-coding-system cs)
-	cs
-      (if mime-charset-to-coding-system-default-method
-	  (funcall mime-charset-to-coding-system-default-method
-		   charset lbt cs)
-	))))
+    (or (find-coding-system cs)
+	(if mime-charset-to-coding-system-default-method
+	    (funcall mime-charset-to-coding-system-default-method
+		     charset lbt cs)
+	  ))))
 
 (defalias 'mime-charset-p 'mime-charset-to-coding-system)
 
@@ -209,6 +210,34 @@
 	(setq rest (cdr rest)))
       default-mime-charset-for-write)))
 )
+
+((eval-when-compile (and (boundp 'mule-version)
+			 (null (string< mule-version "6.0"))))
+;; for Emacs 23 and later
+(defun detect-mime-charset-string (string)
+  "Return MIME charset for STRING."
+  (let ((src (string-to-list string))
+	tmp)
+    (setq tmp src)
+    ;; Uniquify the list of characters.
+    (while tmp
+      (setq tmp (setcdr tmp (delq (car tmp) (cdr tmp)))))
+    ;; Detect charset from the list of characters.
+    (catch 'found
+      (mapc (lambda (cons)
+	      (catch 'next
+		(mapc (lambda (ch) (unless (char-charset ch (car cons))
+				     (throw 'next nil)))
+		      src)
+		(throw 'found (cdr cons))))
+	    charsets-mime-charset-alist)
+      default-mime-charset-for-write)))
+
+(defsubst detect-mime-charset-region (start end)
+  "Return MIME charset for region between START and END."
+  (detect-mime-charset-string
+   (buffer-substring-no-properties start end))))
+
 (t
 ;; for legacy Mule
 (defun detect-mime-charset-region (start end)
--- apel-10.8-orig/mcs-e20.el	2005-07-06 12:08:52.000000000 +1000
+++ apel-10.8/mcs-e20.el	2013-10-03 17:44:42.936760151 +1000
@@ -90,11 +90,15 @@
      ((ascii korean-ksc5601)				. euc-kr)
      ((ascii chinese-gb2312)				. gb2312)
      ((ascii chinese-big5-1 chinese-big5-2)		. big5)
-     ((ascii thai-tis620 composition)			. tis-620)
-     ((ascii latin-iso8859-1 greek-iso8859-7
-	     latin-jisx0201 japanese-jisx0208-1978
-	     chinese-gb2312 japanese-jisx0208
-	     korean-ksc5601 japanese-jisx0212)		. iso-2022-jp-2)
+     ,(static-cond
+       ((null (string< mule-version "6.0"))
+	'((ascii thai-tis620)				. tis-620))
+       (t
+	'((ascii thai-tis620 composition)      		. tis-620)))
+     ;; ((ascii latin-iso8859-1 greek-iso8859-7
+     ;; 	     latin-jisx0201 japanese-jisx0208-1978
+     ;; 	     chinese-gb2312 japanese-jisx0208
+     ;; 	     korean-ksc5601 japanese-jisx0212)		. iso-2022-jp-2)
      ;;((ascii latin-iso8859-1 greek-iso8859-7
      ;;        latin-jisx0201 japanese-jisx0208-1978
      ;;        chinese-gb2312 japanese-jisx0208
@@ -119,8 +123,16 @@
 (defun coding-system-to-mime-charset (coding-system)
   "Convert CODING-SYSTEM to a MIME-charset.
 Return nil if corresponding MIME-charset is not found."
-  (or (car (rassq coding-system mime-charset-coding-system-alist))
-      (coding-system-get coding-system 'mime-charset)
+  (or (coding-system-get coding-system 'mime-charset)
+      (let ((coding (coding-system-base coding-system))
+	    (alist mime-charset-coding-system-alist)
+	    result)
+	(while alist
+	  (if (eq (coding-system-base (cdar alist)) coding)
+	      (setq result (caar alist)
+		    alist nil)
+	    (setq alist (cdr alist))))
+	result)
       ))
 
 (defun-maybe-cond mime-charset-list ()
--- apel-10.8-orig/poe.el	2013-10-03 17:43:11.327761025 +1000
+++ apel-10.8/poe.el	2013-10-03 17:44:42.937760151 +1000
@@ -1996,8 +1996,9 @@
 returned.
 If PROMPT is non-nil, it should be a string and will be displayed in
 the echo area while this function is waiting for an event."
-  ((and (>= emacs-major-version 20)
-	(>= emacs-minor-version 4))
+  ((or (>= emacs-major-version 21)
+       (and (>= emacs-major-version 20)
+	    (>= emacs-minor-version 4)))
    ;; Emacs 20.4 and later.
    (read-event prompt))			; should specify 2nd arg?
   ((and (= emacs-major-version 20)
