Function: find-new-buffer-file-coding-system
find-new-buffer-file-coding-system is a byte-compiled function defined
in mule.el.gz.
Signature
(find-new-buffer-file-coding-system CODING)
Documentation
Return a coding system for a buffer when a file of CODING is inserted.
The local variable buffer-file-coding-system of the current buffer
is set to the returned value.
Return nil if there's no need to set buffer-file-coding-system.
Source Code
;; Defined in /usr/src/emacs/lisp/international/mule.el.gz
;; The coding-spec and eol-type of coding-system returned is decided
;; independently in the following order.
;; 1. That of buffer-file-coding-system locally bound.
;; 2. That of CODING.
(defun find-new-buffer-file-coding-system (coding)
"Return a coding system for a buffer when a file of CODING is inserted.
The local variable `buffer-file-coding-system' of the current buffer
is set to the returned value.
Return nil if there's no need to set `buffer-file-coding-system'."
(let (local-coding local-eol
found-coding found-eol
new-coding new-eol)
(if (null coding)
;; Nothing found about coding.
nil
;; Get information of `buffer-file-coding-system' in LOCAL-EOL
;; and LOCAL-CODING.
(setq local-eol (coding-system-eol-type buffer-file-coding-system))
(if (null (numberp local-eol))
;; But eol-type is not yet set.
(setq local-eol nil))
(if (and buffer-file-coding-system
(not (eq (coding-system-type buffer-file-coding-system)
'undecided)))
(setq local-coding (coding-system-base buffer-file-coding-system)))
(if (and (local-variable-p 'buffer-file-coding-system)
local-eol local-coding)
;; The current buffer has already set full coding-system, we
;; had better not change it.
nil
(setq found-eol (coding-system-eol-type coding))
(if (null (numberp found-eol))
;; But eol-type is not found.
;; If EOL conversions are inhibited, force unix eol-type.
(setq found-eol (if inhibit-eol-conversion 0)))
(setq found-coding (coding-system-base coding))
(if (and (not found-eol) (eq found-coding 'undecided))
;; No valid coding information found.
nil
;; Some coding information (eol or text) found.
;; The local setting takes precedence over the found one.
(setq new-coding (if (local-variable-p 'buffer-file-coding-system)
(or local-coding found-coding)
(or found-coding local-coding)))
(setq new-eol (if (local-variable-p 'buffer-file-coding-system)
(or local-eol found-eol)
(or found-eol local-eol)))
(let ((eol-type (coding-system-eol-type new-coding)))
(if (and (numberp new-eol) (vectorp eol-type))
(aref eol-type new-eol)
new-coding)))))))