changeset 48877:c7299043f7f4

(universal-coding-system-argument): Bind coding-system-require-warning to t. (select-safe-coding-system): Handle t in the arg DEFAULT-CODING-SYSTEM specially. Use read-coding-system to read a coding-system to allow users to specify unsafe coding system on their risk.
author Kenichi Handa <handa@m17n.org>
date Tue, 17 Dec 2002 11:40:32 +0000
parents 0b4aeb4594ad
children 063364651d43
files lisp/international/mule-cmds.el
diffstat 1 files changed, 51 insertions(+), 41 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/international/mule-cmds.el	Tue Dec 17 11:39:59 2002 +0000
+++ b/lisp/international/mule-cmds.el	Tue Dec 17 11:40:32 2002 +0000
@@ -305,6 +305,7 @@
 
     (let ((coding-system-for-read coding-system)
 	  (coding-system-for-write coding-system)
+	  (coding-system-require-warning t)
 	  (current-prefix-arg prefix))
       (message "")
       (call-interactively cmd))))
@@ -604,7 +605,10 @@
 
 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.
+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,
+i.e. `buffer-file-coding-system' and the most prepended coding system
+is not used.
 
 Optional 4th arg ACCEPT-DEFAULT-P, if non-nil, is a function to
 determine the acceptability of the silently selected coding system.
@@ -624,36 +628,43 @@
 	   (not (listp default-coding-system)))
       (setq default-coding-system (list default-coding-system)))
 
-  ;; Change elements of the list to (coding . base-coding).
-  (setq default-coding-system
-	(mapcar (function (lambda (x) (cons x (coding-system-base x))))
-		default-coding-system))
+  (let ((no-other-defaults nil))
+    (if (eq (car default-coding-system) t)
+	(setq no-other-defaults t
+	      default-coding-system (cdr default-coding-system)))
+
+    ;; Change elements of the list to (coding . base-coding).
+    (setq default-coding-system
+	  (mapcar (function (lambda (x) (cons x (coding-system-base x))))
+		  default-coding-system))
 
-  ;; If buffer-file-coding-system is not nil nor undecided, append it
-  ;; to the defaults.
-  (if buffer-file-coding-system
-      (let ((base (coding-system-base buffer-file-coding-system)))
-	(or (eq base 'undecided)
-	    (assq buffer-file-coding-system default-coding-system)
-	    (rassq base default-coding-system)
-	    (setq default-coding-system
-		  (append default-coding-system
-			  (list (cons buffer-file-coding-system base)))))))
+    (unless no-other-defaults
+      ;; If buffer-file-coding-system is not nil nor undecided, append it
+      ;; to the defaults.
+      (if buffer-file-coding-system
+	  (let ((base (coding-system-base buffer-file-coding-system)))
+	    (or (eq base 'undecided)
+		(assq buffer-file-coding-system default-coding-system)
+		(rassq base default-coding-system)
+		(setq default-coding-system
+		      (append default-coding-system
+			      (list (cons buffer-file-coding-system base)))))))
 
-  ;; If the most preferred coding system has the property mime-charset,
-  ;; append it to the defaults.
-  (let ((tail coding-category-list)
-	preferred base)
-    (while (and tail
-		(not (setq preferred (symbol-value (car tail)))))
-      (setq tail (cdr tail)))
-    (and (coding-system-p preferred)
-	 (setq base (coding-system-base preferred))
-	 (coding-system-get preferred 'mime-charset)
-	 (not (assq preferred default-coding-system))
-	 (not (rassq base default-coding-system))
-	 (setq default-coding-system
-	       (append default-coding-system (list (cons preferred base))))))
+      ;; If the most preferred coding system has the property mime-charset,
+      ;; append it to the defaults.
+      (let ((tail coding-category-list)
+	    preferred base)
+	(while (and tail
+		    (not (setq preferred (symbol-value (car tail)))))
+	  (setq tail (cdr tail)))
+	(and (coding-system-p preferred)
+	     (setq base (coding-system-base preferred))
+	     (coding-system-get preferred 'mime-charset)
+	     (not (assq preferred default-coding-system))
+	     (not (rassq 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))
@@ -821,20 +832,19 @@
 		(mapcar (function (lambda (x) (princ "  ") (princ x)))
 			codings)
 		(insert "\n")
-		(fill-region-as-paragraph pos (point)))))
+		(fill-region-as-paragraph pos (point)))
+	      (insert "Or specify any other coding system
+on your risk of loosing the problematic characters.\n")))
 
 	  ;; Read a coding system.
-	  (if safe
-	      (setq codings (append safe codings)))
-	  (let* ((safe-names (mapcar (lambda (x) (list (symbol-name x)))
-				     codings))
-		 (name (completing-read
-			(format "Select coding system (default %s): "
-				(car codings))
-			safe-names nil t nil nil
-			(car (car safe-names)))))
-	    (setq last-coding-system-specified (intern name)
-		  coding-system last-coding-system-specified)))
+	  (setq default-coding-system (or (car safe) (car codings)))
+	  (setq coding-system
+		(read-coding-system 
+		 (format "Select coding system (default %s): "
+			 default-coding-system)
+		 default-coding-system))
+	  (setq last-coding-system-specified coding-system))
+
 	(kill-buffer "*Warning*")
 	(set-window-configuration window-configuration)))