我正在使用 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-list 時是否有任何日誌?
答案1
不幸的是,根據設計,編碼頭似乎不會從 Emacs dir-locals 傳播;我對你的設置很掙扎,也複製了這個問題。
後來我發現這個來源似乎驗證了你的發現: http://www.emacsmirror.org/package/dir-locals.html
我不確定是否有用於處理 a-list 的日誌,但如果您不熟悉此變量,您可以在訪問文件後驗證您的編碼:
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 用戶提出的解決方案。