如何為目錄中的檔案設定 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-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 用戶提出的解決方案。

相關內容