changeset 72032:352a45abb3cc

(select-safe-coding-system): Fix the way of deciding eol-type of the coding system.
author Kenichi Handa <handa@m17n.org>
date Thu, 20 Jul 2006 11:28:14 +0000
parents 2b53c13e6121
children a77b2ac7cfec
files lisp/international/mule-cmds.el
diffstat 1 files changed, 33 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/international/mule-cmds.el	Thu Jul 20 09:48:09 2006 +0000
+++ b/lisp/international/mule-cmds.el	Thu Jul 20 11:28:14 2006 +0000
@@ -831,7 +831,7 @@
 Optional 3rd arg DEFAULT-CODING-SYSTEM specifies a coding system or a
 list of coding systems to be prepended to the default coding system
 list.  However, if DEFAULT-CODING-SYSTEM is a list and the first
-element is t, the cdr part is used as the defualt coding system list,
+element is t, the cdr part is used as the default coding system list,
 i.e. `buffer-file-coding-system', `default-buffer-file-coding-system',
 and the most preferred coding system are not used.
 
@@ -898,9 +898,6 @@
 	      (rassq base default-coding-system)
 	      (push (cons auto-cs base) default-coding-system))))
 
-    ;; From now on, the list of defaults is reversed.
-    (setq default-coding-system (nreverse default-coding-system))
-
     (unless no-other-defaults
       ;; If buffer-file-coding-system is not nil nor undecided, append it
       ;; to the defaults.
@@ -908,8 +905,9 @@
 	  (let ((base (coding-system-base buffer-file-coding-system)))
 	    (or (eq base 'undecided)
 		(rassq base default-coding-system)
-		(push (cons buffer-file-coding-system base)
-		      default-coding-system))))
+		(setq default-coding-system
+		      (append default-coding-system
+			      (list (cons buffer-file-coding-system base)))))))
 
       ;; If default-buffer-file-coding-system is not nil nor undecided,
       ;; append it to the defaults.
@@ -917,8 +915,10 @@
 	  (let ((base (coding-system-base default-buffer-file-coding-system)))
 	    (or (eq base 'undecided)
 		(rassq base default-coding-system)
-		(push (cons default-buffer-file-coding-system base)
-		      default-coding-system))))
+		(setq default-coding-system
+		      (append default-coding-system
+			      (list (cons default-buffer-file-coding-system 
+					  base)))))))
 
       ;; If the most preferred coding system has the property mime-charset,
       ;; append it to the defaults.
@@ -930,18 +930,40 @@
 	     (setq base (coding-system-base preferred))
 	     (coding-system-get preferred 'mime-charset)
 	     (not (rassq base default-coding-system))
-	     (push (cons preferred base)
-		   default-coding-system))))
+	     (setq default-coding-system
+		   (append default-coding-system
+			   (list (cons preferred base)))))))
 
     (if select-safe-coding-system-accept-default-p
 	(setq accept-default-p select-safe-coding-system-accept-default-p))
 
+    ;; Decide the eol-type from the top of the default codings,
+    ;; buffer-file-coding-system, or
+    ;; default-buffer-file-coding-system.
+    (if default-coding-system
+	(let ((default-eol-type (coding-system-eol-type
+				 (caar default-coding-system))))
+	  (if (and (vectorp default-eol-type) buffer-file-coding-system)
+	      (setq default-eol-type (coding-system-eol-type 
+				      buffer-file-coding-system)))
+	  (if (and (vectorp default-eol-type) default-buffer-file-coding-system)
+	      (setq default-eol-type (coding-system-eol-type 
+				      default-buffer-file-coding-system)))
+	  (if (and default-eol-type (not (vectorp default-eol-type)))
+	      (dolist (elt default-coding-system)
+		(setcar elt (coding-system-change-eol-conversion
+			     (car elt) default-eol-type))))))
+
     (let ((codings (find-coding-systems-region from to))
 	  (coding-system nil)
 	  safe rejected unsafe)
       (if (eq (car codings) 'undecided)
 	  ;; Any coding system is ok.
-	  (setq coding-system t)
+	  (setq coding-system (caar default-coding-system))
+	;; Reverse the list so that elements are accumulated in safe,
+	;; rejected, and unsafe in the correct order.
+	(setq default-coding-system (nreverse default-coding-system))
+
 	;; Classify the defaults into safe, rejected, and unsafe.
 	(dolist (elt default-coding-system)
 	  (if (memq (cdr elt) codings)
@@ -958,14 +980,6 @@
 	(setq coding-system (select-safe-coding-system-interactively
 			     from to codings unsafe rejected (car codings))))
 
-      (if (vectorp (coding-system-eol-type coding-system))
-	  (let ((eol (coding-system-eol-type buffer-file-coding-system)))
-	    (if (numberp eol)
-		(setq coding-system
-		      (coding-system-change-eol-conversion coding-system eol)))))
-
-      (if (eq coding-system t)
-	  (setq coding-system buffer-file-coding-system))
       ;; Check we're not inconsistent with what `coding:' spec &c would
       ;; give when file is re-read.
       ;; But don't do this if we explicitly ignored the cookie