diff options
| -rw-r--r-- | lisp/dos-w32.el | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/lisp/dos-w32.el b/lisp/dos-w32.el index 2d730c8af0f..5fb6d5a0f6b 100644 --- a/lisp/dos-w32.el +++ b/lisp/dos-w32.el | |||
| @@ -88,10 +88,13 @@ against the file name, and TYPE is nil for text, t for binary.") | |||
| 88 | (setq-default buffer-file-coding-system 'undecided-dos) | 88 | (setq-default buffer-file-coding-system 'undecided-dos) |
| 89 | 89 | ||
| 90 | (defun find-buffer-file-type-coding-system (command) | 90 | (defun find-buffer-file-type-coding-system (command) |
| 91 | "Choose a coding system for a file operation. | 91 | "Choose a coding system for a file operation in COMMAND. |
| 92 | If COMMAND is `insert-file-contents', the coding system is chosen based | 92 | COMMAND is a list that specifies the operation, and I/O primitive as its |
| 93 | upon the filename, the contents of `untranslated-filesystem-list' and | 93 | CAR, and the arguments that might be given to that operation as its CDR. |
| 94 | `file-name-buffer-file-type-alist', and whether the file exists: | 94 | If operation is `insert-file-contents', the coding system is chosen based |
| 95 | upon the filename (the CAR of the arguments beyond the operation), the contents | ||
| 96 | of `untranslated-filesystem-list' and `file-name-buffer-file-type-alist', | ||
| 97 | and whether the file exists: | ||
| 95 | 98 | ||
| 96 | If it matches in `untranslated-filesystem-list': | 99 | If it matches in `untranslated-filesystem-list': |
| 97 | If the file exists: `undecided' | 100 | If the file exists: `undecided' |
| @@ -103,7 +106,7 @@ upon the filename, the contents of `untranslated-filesystem-list' and | |||
| 103 | If the file exists: `undecided' | 106 | If the file exists: `undecided' |
| 104 | If the file does not exist: default-buffer-file-coding-system | 107 | If the file does not exist: default-buffer-file-coding-system |
| 105 | 108 | ||
| 106 | If COMMAND is `write-region', the coding system is chosen based upon | 109 | If operation is `write-region', the coding system is chosen based upon |
| 107 | the value of `buffer-file-coding-system' and `buffer-file-type'. If | 110 | the value of `buffer-file-coding-system' and `buffer-file-type'. If |
| 108 | `buffer-file-coding-system' is non-nil, its value is used. If it is | 111 | `buffer-file-coding-system' is non-nil, its value is used. If it is |
| 109 | nil and `buffer-file-type' is t, the coding system is `no-conversion'. | 112 | nil and `buffer-file-type' is t, the coding system is `no-conversion'. |
| @@ -126,6 +129,13 @@ set to the appropriate coding system, and the value of | |||
| 126 | (undecided nil) (undecided-unix nil)) | 129 | (undecided nil) (undecided-unix nil)) |
| 127 | (cond ((eq op 'insert-file-contents) | 130 | (cond ((eq op 'insert-file-contents) |
| 128 | (setq target (nth 1 command)) | 131 | (setq target (nth 1 command)) |
| 132 | ;; If TARGET is a cons cell, it has the form (FILENAME . BUFFER), | ||
| 133 | ;; where BUFFER is a buffer into which the file was already read, | ||
| 134 | ;; but its contents were not yet decoded. (This form of the | ||
| 135 | ;; arguments is used, e.g., in arc-mode.el.) This function | ||
| 136 | ;; doesn't care about the contents, it only looks at the file's | ||
| 137 | ;; name, which is the CAR of the cons cell. | ||
| 138 | (if (consp target) (setq target (car target))) | ||
| 129 | ;; First check for a file name that indicates | 139 | ;; First check for a file name that indicates |
| 130 | ;; it is truly binary. | 140 | ;; it is truly binary. |
| 131 | (setq binary (find-buffer-file-type target)) | 141 | (setq binary (find-buffer-file-type target)) |