我正在使用 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 用户提出的解决方案。