强制Emacs使用特定编码,当且仅当它不会导致任何问题

Thu*_*sen 6 emacs encoding

在我的.emacs文件中,我使用了该行

'(setq coding-system-for-write 'iso-8859-1-unix)
Run Code Online (Sandbox Code Playgroud)

让Emacs以iso-8859-1-unix编码保存文件.当我输入无法以这种方式编码的字符时(例如"Łódź"),我会被提示选择不同的编码,但是当输入"iso-8859-1-unix"进入迷你缓冲区时,文件会被保存并且会被冒犯人物丢失了.

如果我在提示符处按Enter键,则文件以Unicode保存,当我关闭并重新打开Emacs时,它将再次被解释为Unicode文件.如果我然后删除有问题的字符,保存文件并关闭并重新打开另一次Emacs,它仍然被解释为Unicode文件 - 我从中推断它仍然以Unicode保存,即使保存在iso-8859- 1-unix本来可以.

那么有没有办法强制Emacs尽可能在iso-8859-1中写一个文件,如果这样做会吞噬字符,从不将它保存在那个编码中?

提前谢谢了,

ThureDührsen

hua*_*uan 0

尝试

(setq-default buffer-file-coding-system 'iso-8859-1)
Run Code Online (Sandbox Code Playgroud)

编辑:

结合程序员的建议,我们得到

(defun enforce-coding-system-priority ()
  (let ((pref (car (coding-system-priority-list)))
        (list (find-coding-systems-region (point-min) (point-max))))
    (when (or (memq 'undecided list) (memq pref list))
      (setq buffer-file-coding-system pref))))

(add-hook 'before-save-hook 'enforce-coding-system-priority)

(prefer-coding-system 'iso-8859-1)
Run Code Online (Sandbox Code Playgroud)