2013-08-14 17 views
10

z jakiegoś złożonego powodu, chciałbym otworzyć pliki w określonym katalogu (może mieć dowolną nazwę, bez rozszerzenia) w trybie C, i nie chcę ich modyfikować dla Emacsa (zmienne lokalne pliku są out). Walczę jednak z Emacsem, aby to zrobić. Starałem się umieścić to w moim dir-locals.el:Jak ustawić domyślny tryb główny w pliku lokalnym?

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

Chociaż zmienna major-mode rzeczywiście jest przesłonięta do c-mode podczas otwierania pliku z tego katalogu, tryb C nie jest włączona w buforze. Co się dzieje i jak mogę to zrobić?

Alternatywnie można dodać do auto-mode-alist tylko dla tego katalogu, ale nie wiem, jak to zrobić za pośrednictwem lokalnych lokalizacji.

Czy istnieje również prosty sposób na wykonanie kodu z dir-locals.el? Wiem, że jest to niebezpieczne, ale może to być nawet kod, który jest w konfiguracji - chodzi o to, aby wywołać go tylko wtedy, gdy przetwarzane są zmienne z dir-locals (otwieranie pliku).

Dzięki za pomoc.

Odpowiedz

7

W .dir-locals.el można ustawić tylko zmienne do określonej wartości. To, co robi twój kod, ustawia zmienną major-mode na wartość c-mode. Jednak nie jest to sposób aktywacji trybu. Aby go aktywować, musisz zadzwonić do funkcji c-mode. Istnieje specjalna zmienna, którą można ustawić w .dir-locals.el, aby uruchomić funkcję: eval.

Dlatego poniższy kod działa:

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

Dzięki. Brakowało mi specjalnych zmiennych pliku lokalnego w podręczniku i nie ma żadnej wzmianki o tym, że działają one również jako katalog-lokalny lub przykłady. – JS0

+1

Jest napisane na odwrót, ale nie jasno. Mówi, że zmienne lokalne katalogu są traktowane jak zmienne plików. –

2

Nie mogę odpowiedzieć na pierwsze pytanie (aw rzeczywistości będzie chciał usłyszeć odpowiedź na to sam), ale jodła auto-mode-alist można mieć

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

to powinno dać wynik chcesz

+1

Dzięki, mogę to zrobić, aby rozwiązać ten problem, chociaż chciałbym zrobić coś takiego z katalogu lokalnego, a nie z mojej konfiguracji globalnej. – JS0

+0

hmmm, co powiesz na dodanie haka, aby sprawdzić lokalizację? poza tym, jak wcześniej powiedziałem - chciałbym również poznać główne rozwiązanie trybu ... – user2141046

10

Oprócz eval, istnieje także inna specjalna zmienna o nazwie mode który może pomóc. Jest to ta sama zmienna, która jest używana przez zmienne lokalne pliku. Możesz również napisać:

((nil . ((mode . c)))) 
Powiązane problemy