Previous: Terminal I/O Encoding, Up: Coding Systems

33.9.9 MS-DOS File Types

On MS-DOS and Microsoft Windows, Emacs guesses the appropriate end-of-line conversion for a file by looking at the file's name. This feature classifies files as text files and binary files. By “binary file” we mean a file of literal byte values that are not necessarily meant to be characters; Emacs does no end-of-line conversion and no character code conversion for them. On the other hand, the bytes in a text file are intended to represent characters; when you create a new file whose name implies that it is a text file, Emacs uses DOS end-of-line conversion.

— Variable: buffer-file-type

This variable, automatically buffer-local in each buffer, records the file type of the buffer's visited file. When a buffer does not specify a coding system with buffer-file-coding-system, this variable is used to determine which coding system to use when writing the contents of the buffer. It should be nil for text, t for binary. If it is t, the coding system is no-conversion. Otherwise, undecided-dos is used.

Normally this variable is set by visiting a file; it is set to nil if the file was visited without any actual conversion.

Its default value is used to decide how to handle files for which file-name-buffer-file-type-alist says nothing about the type: If the default value is non-nil, then these files are treated as binary: the coding system no-conversion is used. Otherwise, nothing special is done for them—the coding system is deduced solely from the file contents, in the usual Emacs fashion.

— User Option: file-name-buffer-file-type-alist

This variable holds an alist for recognizing text and binary files. Each element has the form (regexp . type), where regexp is matched against the file name, and type may be nil for text, t for binary, or a function to call to compute which. If it is a function, then it is called with a single argument (the file name) and should return t or nil.

When running on MS-DOS or MS-Windows, Emacs checks this alist to decide which coding system to use when reading a file. For a text file, undecided-dos is used. For a binary file, no-conversion is used.

If no element in this alist matches a given file name, then the default value of buffer-file-type says how to treat the file.