2013-08-14 3 views
10

per qualche motivo complesso, vorrei aprire i file in determinate directory (può avere qualsiasi nome, nessuna estensione) in modalità C, e non voglio modificarli per Emacs (le variabili locali del file sono fuori). Comunque, sto lottando con Emacs per farlo. Ho cercato di mettere questo nel mio dir-locals.el:Come impostare la modalità principale di default nel file directory-local?

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

Anche se la variabile major-mode è infatti sottoposto a override per c-mode quando apro il file da quella directory, la modalità C non è abilitato sul buffer. Cosa sta succedendo e come posso farlo?

In alternativa, potrei aggiungere allo auto-mode-alist solo per questa directory, ma non so come farlo tramite i gestori di directory.

Inoltre, c'è un modo semplice per causare l'esecuzione del codice da dir-locals.el? So che non è sicuro, ma potrebbe anche essere il codice che è in configurazione - il punto è chiamarlo solo quando vengono elaborate le variabili da dir-locals (aprendo un file).

Grazie per l'aiuto.

risposta

7

In .dir-locals.el è possibile impostare le variabili solo su un determinato valore. Che cosa fa il codice è impostare la variabile major-mode sul valore c-mode. Tuttavia, questo non è il modo in cui viene attivata una modalità. Per attivarlo è necessario chiamare la funzione c-mode. È disponibile una variabile speciale che è possibile impostare in .dir-locals.el per eseguire una funzione: eval.

Pertanto, il seguente codice funziona:

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

Grazie. Ho perso le variabili speciali del file locale nel manuale, e non c'è alcun accenno al fatto che funzionino anche come directory-local o altri esempi. – JS0

+1

È scritto al contrario, ma non chiaramente. Dice che le variabili locali della directory vengono trattate come variabili di file. –

2

non posso rispondere alla tua prima domanda (e di fatto, farò sentire la risposta per che io stesso) ma abete il auto-mode-alist si può avere

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

Questo dovrebbe dare il risultato desiderato

+1

Grazie, ho potuto fare che per risolvere il problema, anche se mi piacerebbe fare qualcosa di simile che dalla directory locale e non dalla mia configurazione globale. – JS0

+0

hmmm, che ne dici di aggiungere un gancio per verificare la posizione? inoltre, come ho detto in precedenza, vorrei anche conoscere la soluzione in modalità principale ... – user2141046

10

parte eval, c'è anche un'altra variabile speciale denominata mode che può aiutare. È la stessa variabile utilizzata dalle variabili locali del file. Si potrebbe anche scrivere:

((nil . ((mode . c)))) 
Problemi correlati