XEmacs 21.4.17 "Jumbo Shrimp".
[chise/xemacs-chise.git.1] / lisp / code-files.el
index 87306b8..2d5c5ef 100644 (file)
@@ -17,7 +17,7 @@
 ;; General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with XEmacs; see the file COPYING.  If not, write to the 
+;; along with XEmacs; see the file COPYING.  If not, write to the
 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 ;; Boston, MA 02111-1307, USA.
 
@@ -68,7 +68,13 @@ global environment specification.")
     ("TUTORIAL\\.\\(?:hr\\|pl\\|ro\\)\\'" . iso-8859-2)
     ;; ("\\.\\(el\\|emacs\\|info\\(-[0-9]+\\)?\\|texi\\)$" . iso-2022-8)
     ;; ("\\(ChangeLog\\|CHANGES-beta\\)$" . iso-2022-8)
-    ("/spool/mail/.*$" . convert-mbox-coding-system))
+
+    ;; This idea is totally broken, and the code didn't work anyway.
+    ;; Mailboxes should be decoded by mail clients, who actually know
+    ;; how to deal with them.  Otherwise, their contents should be
+    ;; treated as `binary'.
+    ;("/spool/mail/.*$" . convert-mbox-coding-system)
+    )
   "Alist to decide a coding system to use for a file I/O operation.
 The format is ((PATTERN . VAL) ...),
 where PATTERN is a regular expression matching a file name,
@@ -110,7 +116,8 @@ something other than what it is at the moment."
           (coding-system-base buffer-file-coding-system)
           (cond ((eq eol-type 'lf) 'crlf)
                 ((eq eol-type 'crlf) 'lf)
-                ((eq eol-type 'cr) 'lf))))))
+                ((eq eol-type 'cr) 'lf))))
+    (set-buffer-modified-p t)))
 
 (define-obsolete-function-alias
   'set-file-coding-system
@@ -191,34 +198,23 @@ object (the entry specified a coding system)."
            ((find-coding-system codesys))
            ))))
 
-(defun convert-mbox-coding-system (filename visit start end)
-  "Decoding function for Unix mailboxes.
-Does separate detection and decoding on each message, since each
-message might be in a different encoding."
-  (let ((buffer-read-only nil))
-    (save-restriction
-      (narrow-to-region start end)
-      (goto-char (point-min))
-      (while (not (eobp))
-       (let ((start (point))
-             end)
-         (forward-char 1)
-         (if (re-search-forward "^From" nil 'move)
-             (beginning-of-line))
-         (setq end (point))
-         (decode-coding-region start end 'undecided))))))
+;; This was completely broken, not only in implementation (does not
+;; understand MIME), but in concept -- such high-level decoding should
+;; be done by mail readers, not by IO code!  Removed 2000-04-18.
+
+;(defun convert-mbox-coding-system (filename visit start end) ...)
 
 (defun find-coding-system-magic-cookie ()
-  "Look for the coding-system magic cookie in the current buffer.\n"
-"The coding-system magic cookie is the exact string\n"
-"\";;;###coding system: \" followed by a valid coding system symbol,\n"
-"somewhere within the first 3000 characters of the file.  If found,\n"
-"the coding system symbol is returned; otherwise nil is returned.\n"
-"Note that it is extremely unlikely that such a string would occur\n"
-"coincidentally as the result of encoding some characters in a non-ASCII\n"
-"charset, and that the spaces make it even less likely since the space\n"
-"character is not a valid octet in any ISO 2022 encoding of most non-ASCII\n"
-"charsets."
+  "Look for the coding-system magic cookie in the current buffer.
+The coding-system magic cookie is the exact string
+\";;;###coding system: \" followed by a valid coding system symbol,
+somewhere within the first 3000 characters of the file.  If found,
+the coding system symbol is returned; otherwise nil is returned.
+Note that it is extremely unlikely that such a string would occur
+coincidentally as the result of encoding some characters in a non-ASCII
+charset, and that the spaces make it even less likely since the space
+character is not a valid octet in any ISO 2022 encoding of most non-ASCII
+charsets."
   (save-excursion
     (goto-char (point-min))
     (or (and (looking-at
@@ -288,7 +284,7 @@ Return t if file exists."
                 (set-buffer (get-buffer-create " *load*"))
                 (erase-buffer)
                 (let ((coding-system-for-read 'raw-text))
-                  (insert-file-contents path nil 1 3001))
+                  (insert-file-contents path nil 0 3000))
                 (find-coding-system-magic-cookie))
               (if elc
                   ;; if reading a byte-compiled file and we didn't find
@@ -357,7 +353,7 @@ CODING-SYSTEM (the actual coding system used to decode the file), and
 a cons of absolute pathname and length of data inserted (the same
 thing as will be returned from `insert-file-contents').")
 
-(defun insert-file-contents (filename &optional visit beg end replace)
+(defun insert-file-contents (filename &optional visit start end replace)
   "Insert contents of file FILENAME after point.
 Returns list of absolute file name and length of data inserted.
 If second argument VISIT is non-nil, the buffer's visited filename
@@ -365,9 +361,9 @@ and last save file modtime are set, and it is marked unmodified.
 If visiting and the file does not exist, visiting is completed
 before the error is signaled.
 
-The optional third and fourth arguments BEG and END
+The optional third and fourth arguments START and END
 specify what portion of the file to insert.
-If VISIT is non-nil, BEG and END must be nil.
+If VISIT is non-nil, START and END must be nil.
 If optional fifth argument REPLACE is non-nil,
 it means replace the current buffer contents (in the accessible portion)
 with the file contents.  This is better than simply deleting and inserting
@@ -420,7 +416,7 @@ and `insert-file-contents-post-hook'."
                   coding-system)
                  (setq coding-system 'undecided)))
            (setq return-val
-                 (insert-file-contents-internal filename visit beg end
+                 (insert-file-contents-internal filename visit start end
                                                 replace coding-system
                                                 ;; store here!
                                                 'used-codesys))
@@ -464,20 +460,19 @@ and `insert-file-contents-post-hook'."
 (defvar write-region-pre-hook nil
   "A special hook to decide the coding system used for writing out a file.
 
-Before writing a file, `write-region' calls the functions on this hook
-with arguments START, END, FILENAME, APPEND, VISIT, and CODING-SYSTEM,
-the same as the corresponding arguments in the call to
-`write-region'.
+Before writing a file, `write-region' calls the functions on this hook with
+arguments START, END, FILENAME, APPEND, VISIT, LOCKNAME and CODING-SYSTEM,
+the same as the corresponding arguments in the call to `write-region'.
 
-The return value of the functions should be either
+The return value of each function should be one of
 
 -- nil
 -- A coding system or a symbol denoting it, indicating the coding system
-   to be used for reading the file
+   to be used for writing the file
 -- A list of two elements (absolute pathname and length of data written),
-   which is used as the return value to `write-region'.  In this
-   case, `write-region' assumes that the function has written
-   the file for itself and suppresses further writing.
+   which is used as the return value to `write-region'.  In this case,
+   `write-region' assumes that the function has written the file and
+   returns.
 
 If any function returns non-nil, the remaining functions are not called.")
 
@@ -485,13 +480,17 @@ If any function returns non-nil, the remaining functions are not called.")
   "A hook called by `write-region' after a file has been written out.
 
 The functions on this hook are called with arguments START, END,
-FILENAME, APPEND, VISIT, and CODING-SYSTEM, the same as the
+FILENAME, APPEND, VISIT, LOCKNAME, and CODING-SYSTEM, the same as the
 corresponding arguments in the call to `write-region'.")
 
-(defun write-region (start end filename &optional append visit lockname coding-system)
+(defun write-region (start end filename
+                    &optional append visit lockname coding-system)
   "Write current region into specified file.
 By default the file's existing contents are replaced by the specified region.
-When called from a program, takes three arguments:
+Called interactively, prompts for a file name.  With a prefix arg, prompts
+for a coding system as well.
+
+When called from a program, takes three required arguments:
 START, END and FILENAME.  START and END are buffer positions.
 Optional fourth argument APPEND if non-nil means
   append to existing file contents (if any).
@@ -510,19 +509,19 @@ to the file, instead of any buffer contents, and END is ignored.
 Optional seventh argument CODING-SYSTEM specifies the coding system
   used to encode the text when it is written out, and defaults to
   the value of `buffer-file-coding-system' in the current buffer.
-  Interactively, with a prefix arg, you will be prompted for the
-  coding system.
 See also `write-region-pre-hook' and `write-region-post-hook'."
   (interactive "r\nFWrite region to file: \ni\ni\ni\nZCoding-system: ")
   (setq coding-system
        (or coding-system-for-write
            (run-hook-with-args-until-success
-            'write-region-pre-hook start end filename append visit lockname)
+            'write-region-pre-hook
+            start end filename append visit lockname coding-system)
            coding-system
            buffer-file-coding-system
            (find-file-coding-system-for-write-from-filename filename)
            ))
   (if (consp coding-system)
+      ;; One of the `write-region-pre-hook' functions wrote the file
       coding-system
     (let ((func
           (coding-system-property coding-system 'pre-write-conversion)))
@@ -555,9 +554,4 @@ See also `write-region-pre-hook' and `write-region-post-hook'."
                        start end filename append visit lockname
                        coding-system)))
 
-;;; The following was all that remained in mule-files.el, so I moved it
-;;; here for neatness.  -sb
-(when (featurep 'mule)
-  (setq-default buffer-file-coding-system 'iso-2022-8))
-
 ;;; code-files.el ends here