.dir-locals.el ist meine bevorzugte Methode, wenn dies möglich ist, insbesondere, da sie für alle Emacs-Benutzer gilt, die an diesem Projekt arbeiten.
Für Projekte, die Emacs-Benutzern feindlich gegenüberstehen oder auf andere Weise keine .dir-locals.elDateien oder persönliche Einstellungen (vermutlich keine Einrückung) haben möchten, die für andere Personen nicht gelten sollten, ist eine Option, wenn Sie ein verteiltes Versionskontrollsystem verwenden um immer an persönlichen Zweigen zu arbeiten, die deine .dir-locals.el. Ich kenne keine Möglichkeit, ein DCVS zu verwenden, das dies jedoch schmerzlos macht.
Eine andere Möglichkeit ist, die .dir-locals.elDateien nicht einzuchecken . Zum Beispiel, mit git, füge es hinzu .git/info/exclude. Das ist natürlich schmerzhaft, wenn Sie viele Kassen eines Projekts haben.
Was ich getan habe, wo .dir-locals.elkeine Option war, ist das Hinzufügen eines Hakens, der nach buffer-file-namebekannten Werten sucht .
(defvar guessed-project nil)
(make-variable-buffer-local 'guessed-project)
(defun guess-project-from-file-name ()
(save-match-data
(setq guessed-project
(cond
((string-match "/linux-kernel/" buffer-file-name)
'linux-kernel)
((string-match "/gnu/" buffer-file-name)
'gnu)
; etc.
))))
(defun c-my-project-hook ()
(guess-project-from-file-name)
(case guessed-project
((gnu) (c-sty-style 'gnu))
((linux-kernel) (c-sty-style 'linux))
))
(add-hook 'c-mode-hook 'c-my-project-hook)
(Warnung: Code wurde direkt in meinen Browser eingegeben, da ich momentan keinen Zugriff auf meinen echten Code habe.)
.dir-locals.el. Mögen Kollegen diese Idee mögen?