2013-08-14 2 views
10

aus irgendeinem komplizierten Grund, würde ich gerne Dateien in bestimmten Verzeichnis öffnen (kann einen beliebigen Namen, keine Erweiterung) im C-Modus, und ich möchte sie nicht für Emacs ändern (file-lokale Variablen sind out). Ich kämpfe jedoch mit Emacs, um es zu tun. Ich habe versucht, dies in meinem dir-locals.el zu setzen:Wie Standard-Hauptmodus in Verzeichnis-lokale Datei festlegen?

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

Obwohl die major-mode Variable in der Tat zu c-mode außer Kraft gesetzt wird, wenn ich Datei aus diesem Verzeichnis öffnen, wird der C-Modus auf dem Puffer nicht aktiviert. Was ist los und wie kann ich es anwenden?

Alternativ könnte ich die auto-mode-alist nur für dieses Verzeichnis hinzufügen, aber ich weiß nicht, wie das über das Verzeichnis Locals zu tun.

Gibt es auch einen einfachen Weg, die Ausführung von Code von dir-locals.el zu verursachen? Ich weiß, dass es unsicher ist, aber es könnte sogar der Code sein, der in config ist - der Punkt besteht darin, ihn nur aufzurufen, wenn Variablen von dir-locals verarbeitet werden (Öffnen einer Datei).

Danke für Hilfe.

Antwort

7

In .dir-locals.el können Sie Variablen nur auf einen bestimmten Wert setzen. Was Ihr Code tut, ist die major-mode Variable auf den c-mode Wert. Dies ist jedoch nicht die Art, wie ein Modus aktiviert wird. Um es zu aktivieren, müssen Sie die Funktion c-mode aufrufen. Es gibt eine spezielle Variable, die Sie in .dir-locals.el einstellen können, um eine Funktion auszuführen: eval.

Daher wird der folgende Code funktioniert:

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

Danke. Ich habe die speziellen local-file-Variablen im Handbuch verpasst, und es gibt keine Erwähnung, dass sie auch als lokale Verzeichnisse oder irgendwelche Beispiele funktionieren. – JS0

+1

Es ist anders herum geschrieben, aber nicht klar. Es besagt, dass die lokalen Variablen des Verzeichnisses wie Dateivariablen behandelt werden. –

2

ich kann nicht Ihre erste Frage beantworten (und in der Tat, wie für das selbst die Antwort hören), aber fir die auto-mode-alist Sie

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

diese sollten Sie geben das gewünschte Ergebnis

wollen haben
+1

Danke, ich könnte das tun, um dieses Problem zu lösen, obwohl ich so etwas aus dem lokalen Verzeichnis und nicht aus meiner globalen Konfiguration tun möchte. – JS0

+0

hmmm, wie wäre es mit einem Haken, um den Standort zu überprüfen? Außerdem, wie ich vorher sagte - ich würde auch die Hauptmoduslösung wissen wollen ... – user2141046

10

Neben eval, gibt es auch noch eine spezielle Variable namens mode, die Ihnen helfen können. Es ist dieselbe Variable, die von lokalen Dateivariablen verwendet wird. Du könntest auch schreiben:

((nil . ((mode . c)))) 
Verwandte Themen