2013-08-14 7 views
10

いくつかの複雑な理由から、私はCモードで特定のディレクトリ(任意の名前、拡張子を持たない)でファイルを開きたいと思いますが、Emacs(ファイルローカル変数がありません)のためにそれらを変更したくありません。しかし、私はEmacsとやりとりするのに苦労しています。私は私のDIR-locals.elにこれを入れてみました:私はそのディレクトリからファイルを開いたときmajor-mode変数が実際にc-modeに上書きされているがディレクトリローカルファイルにデフォルトのメジャーモードを設定する方法は?

((nil . ((major-mode . c-mode)))) 

は、Cモードは、バッファ上で有効になっていません。何が起こっているのですか?どのように適用するのですか?

また、私はこのディレクトリのためだけにauto-mode-alistに追加することもできますが、ディレクトリのローカル経由で行う方法はわかりません。

また、dir-locals.elからコードを実行するいくつかの簡単な方法がありますか?私はそれが安全ではないことを知っていますが、設定されているコードでさえあります - ポイントは、dir-localsの変数が処理されたとき(ファイルを開くとき)にだけ呼び出すことです。

ありがとうございました。

答えて

7

.dir-locals.elでは、変数は特定の値にしか設定できません。あなたのコードはmajor-mode変数をc-modeの値に設定します。ただし、これはモードがアクティブになる方法ではありません。それを有効にするには、関数c-modeを呼び出す必要があります。関数を実行するために.dir-locals.elに設定できる特別な変数があります:eval。次のコードは動作します

したがって、:

((nil . ((eval . (c-mode))))) 
+1

ありがとう。私はマニュアルの中で特別なローカルファイル変数を見逃していました。ディレクトリローカルやその他の例としても動作するという言及はありません。 – JS0

+1

逆に書かれていますが、明確ではありません。ディレクトリローカル変数はファイル変数のように扱われます。 –

2

私はあなたが、これはあなたが

を望む結果を与える必要があり

(setq auto-mode-alist (cons '("<your dir path here>\." . c-mode) auto-mode-alist))` 

を持つことができ、あなたの最初の質問に答えることはできません(実際には、そのための答えを自分自身を聞きたいだろう)が、auto-mode-alistをモミ

+1

感謝し、私は私のグローバル設定からローカルではなく、ディレクトリからそのような何かをしたいと思いますけれども、私は、その問題を解決するためにそれを行うことができます。 – JS0

+0

hmmm、場所を確認するフックを追加するのはどうですか?また、私が以前言ったように - 私はまた、主要なモードの解決策を知りたいでしょう... – user2141046

10

別にevalから、あなたを助けることができるmodeという名前の別の特殊な変数もあります。これはファイルローカル変数で使用される変数と同じです。あなたはまた、書くことができる:

((nil . ((mode . c)))) 
関連する問題