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

时间:2011-05-16 18:42:36

标签: emacs encoding

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

'(setq coding-system-for-write 'iso-8859-1-unix)

让Emacs以iso-8859-1-unix编码保存文件。当我 输入无法以这种方式编码的字符(“Łódź”for 例如),我被提示选择不同的编码,但是在 将“iso-8859-1-unix”输入迷你缓冲区,保存文件 违规的人物丢失了。

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

有没有办法强制Emacs在iso-8859-1中写一个文件 尽可能,如果这样做,永远不要将其保存在该编码中 会狼吞虎咽吗?

非常感谢,

ThureDührsen

4 个答案:

答案 0 :(得分:1)

根据coding-system-for-write的文档字符串,您不应该全局设置它。

您所寻找的可能是(prefer-coding-system 'iso-8859-1-unix)

答案 1 :(得分:0)

尝试

(setq-default buffer-file-coding-system 'iso-8859-1)

编辑:

纳入AProgrammer的建议,我们得到了

(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)

答案 2 :(得分:0)

我尝试编写一个保存时间挂钩函数,它会检查缓冲区的内容并相应地设置编码。通过使用查找编码系统区域,应该没有太多工作。

答案 3 :(得分:0)

以下内容应使Emacs询问何时缓冲区编码,设置emacs以保存文件。然后,Emacs将提示您选择“安全”编码中的一个。

(setq select-safe-coding-system-accept-default-p
      '(lambda (coding)
         (string=
          (coding-system-base coding)
          (coding-system-base buffer-file-coding-system))))