2011-09-07 7 views
7

Ecco il contenuto dal mio file .emacs.Come posso spostare le impostazioni della modalità php da .emacs a .dir-locals.el?

(add-hook 'php-mode-hook 
     (lambda() 
     (c-set-style "bsd") 
     (setq indent-tabs-mode t) 
     (setq c-basic-offset 4) 
     (setq tab-width 4) 
     (c-set-offset 'arglist-close 'c-lineup-arglist-operators) 
     (c-set-offset 'arglist-intro '+) 
     (c-set-offset 'arglist-cont-nonempty 'c-lineup-math) 
     (c-set-offset 'case-label '+)  
     )) 

Desidero spostare queste impostazioni di formattazione nella directory specifica del progetto. Sebbene io possa farlo facilmente per le dichiarazioni setq (ad esempio (setq indent-tabs-mode t)), non sono in grado di farlo per chiamate di funzioni come: (c-set-offset 'arglist-intro '+).

Ecco quello che ho messo nel mio .dir-locals.el:

;;; Directory Local Variables 
;;; See Info node `(emacs) Directory Variables' for more information. 

    ((php-mode 
     (c-set-style "bsd") 
     (indent-tabs-mode . t) 
     (c-basic-offset . 4) 
     (tab-width . 4) 
     (c-set-offset 'arglist-close 'c-lineup-arglist-operators) 
     (c-set-offset 'arglist-intro 'c-basic-offset) 
     (c-set-offset 'arglist-cont-nonempty 'c-lineup-math) 
     (c-set-offset 'case-label '+)  
    )) 

Cosa c'è di sbagliato qui?

risposta

10

Le variabili locali della directory sono proprio questo: le variabili; forme non elis da valutare. Fortunatamente, ciò è previsto tramite il eval pseudo-variabile:

((php-mode 
    (indent-tabs-mode . t) 
    (c-basic-offset . 4) 
    (tab-width . 4) 
    (eval . (progn 
      (c-set-style "bsd") 
      (c-set-offset 'arglist-close 'c-lineup-arglist-operators) 
      (c-set-offset 'arglist-intro 'c-basic-offset) 
      (c-set-offset 'arglist-cont-nonempty 'c-lineup-math) 
      (c-set-offset 'case-label '+))))) 

Emacs vi chiederà di confermare che il codice è sicuro quando incontra, e salverà alla lista safe-local-variable-values nelle custom-set-variables sezioni del file init se lo desideri.

Problemi correlati