ディレクトリ内のファイルの emacs 文字コードを設定するにはどうすればよいですか?

ディレクトリ内のファイルの emacs 文字コードを設定するにはどうすればよいですか?

私は GNU Emacs 23.3.50.1 のディストリビューションである Aquamacs を使用しています。

ギリシャ語でコメントが書かれたソース ファイルをいくつか見ていますが、それらは 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)

または 2 番目: (ディレクトリ構造が /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 ユーザーがどのような解決策を提案しているか、ぜひ聞いてみたいです。

関連情報