如何为目录中的文件设置 emacs 字符编码?

如何为目录中的文件设置 emacs 字符编码?

我正在使用 Aquamacs,GNU Emacs 23.3.50.1 的发行版。

我正在查看一些用希腊语编写的带有注释的源文件,它们是用 CP1253 编码的。

并且,我可以使用正确的编码恢复,也可以添加文件局部变量:

/* -*- mode: c-mode; tab-width: 4; coding: cp1253-unix; -*- */

所以我可以让它们正确打开,并且我可以将文件变量添加到每个文件中。

但我想设置整个目录的编码。与其手动编辑 .dir-locals.el,我只想这样做:

M-x copy-file-locals-to-dir-locals

从正确打开的文件中。并生成:

;;; Directory Local Variables
;;; See Info node `(emacs) Directory Variables' for more information.

((c-mode
  (tab-width . 4)
  (coding . cp1253-unix)))

没有结果。但是它清楚地识别了新的标签宽度,因此它正在读取文件。

知道为什么吗?emacs 处理 a 列表时是否有任何日志?

答案1

不幸的是,从设计上看,编码标头似乎不会从 Emacs dir-locals 传播;我很难适应您的设置,并且也复制了该问题。

后来我偶然发现了这个来源,它似乎验证了你的发现: http://www.emacsmirror.org/package/dir-locals.html

我不确定是否有用于处理 a 列表的日志,但如果您不熟悉这个变量,您可以在访问文件后验证您的编码:

C-h v buffer-file-coding-system RET

或者

M-x describe-variable RET buffer-file-coding-system RET

就我个人而言,我认为最好的选择是你已经在运行的文件局部变量。

我能想到的替代方法(第一个未经测试)是查看一些 elisp 函数:

(coding-system-priority-list)
(set-coding-system-priority &rest coding-systems)

或第二:(假设你的目录结构是/something/blah/greekcode/file.c)

(add-to-list 'auto-coding-alist 
     '("/greekcode/[^/]+.c\\'" . cp1253-unix))

这甚至优先于文件局部变量。根据需要修改正则表达式,并通过评估进行实验:

(find-auto-coding "/home/brian/greekcode/garbage.c" 1) <= C-x C-e

返回:

(cp1253-unix . auto-coding-alist)

希望这能有所帮助!很想听听其他 emacs 用户提出的解决方案。

相关内容