diff lisp/international/mule-cmds.el @ 45082:5b1a8adeb602

(select-safe-coding-system): Don't offer coding systems that use locking shift. Ask for confirmation if chosen coding system disagrees with a `coding:' spec in the file.
author Richard M. Stallman <rms@gnu.org>
date Fri, 03 May 2002 04:23:31 +0000
parents 3c8d8ff3a848
children 837bbff5c257
line wrap: on
line diff
--- a/lisp/international/mule-cmds.el	Thu May 02 23:51:57 2002 +0000
+++ b/lisp/international/mule-cmds.el	Fri May 03 04:23:31 2002 +0000
@@ -636,6 +636,16 @@
 	      (setcar l mime-charset))
 	  (setq l (cdr l))))
 
+      ;; Don't offer variations with locking shift, which you
+      ;; basically never want.
+      (let (l)
+	(dolist (elt codings (setq codings (nreverse l)))
+	  (unless (or (eq 'coding-category-iso-7-else
+			  (coding-system-category elt))
+		      (eq 'coding-category-iso-8-else
+			  (coding-system-category elt)))
+	    (push elt l))))
+
       ;; Make sure the offending buffer is displayed.
       (or (stringp from)
 	  (pop-to-buffer bufname))
@@ -705,7 +715,23 @@
 
     (if (eq coding-system t)
 	(setq coding-system buffer-file-coding-system))
-    coding-system))
+    ;; Check we're not inconsistent with what `coding:' spec &c would
+    ;; give when file is re-read.
+    (unless (stringp from)
+      (let ((auto-cs (save-restriction
+		       (widen)
+		       (save-excursion
+			 (goto-char (point-min))
+			 (set-auto-coding (or buffer-file-name "")
+					  (buffer-size))))))
+	(if (and auto-cs
+		 (not (coding-system-equal (coding-system-base coding-system)
+					   (coding-system-base auto-cs))))
+	    (unless (yes-or-no-p
+		     (format "Selected encoding %s disagrees with \
+%s specified by file contents.  Really save (else edit coding cookies \
+and try again)? " coding-system auto-cs))
+	      (error "Save aborted")))))    coding-system))
 
 (setq select-safe-coding-system-function 'select-safe-coding-system)