Wie stelle ich den Hauptmodus für eine Datei in .dir-Locations.el ein?

7

Ich möchte den Hauptmodus für eine Datei so einstellen, wie Sie dateilokale Variablen verwenden würden

Local Variables:
mode: text
End:

aber .dir-locals.elum die betreffende Datei nicht zu "verschmutzen". Ist das möglich?

xebtl
quelle
Ist dies nur für den persönlichen Gebrauch oder etwas, das Sie gemeinsam nutzen möchten? Es gibt verschiedene Möglichkeiten, wie Sie dies in elisp angehen können, anstatt auf verzeichnislokale Variablen zurückzugreifen.
Phils
@phils Es wäre schön, eine gemeinsam nutzbare Lösung zu haben, weshalb ich über Dir-Einheimische nachdachte. Aber praktisch ist es mehr oder weniger persönlich. (Es ist unwahrscheinlich, dass es mit vielen Menschen geteilt wird und wer weiß, ob sie Emacs und / oder Pflege verwenden).
xebtl
OK. Ich denke, die Verwendung der evalPseudovariablen ist die einzige Möglichkeit, damit in einer .dir-locals.elDatei umzugehen. Bei benutzerdefinierten Elisp-Dateien können Sie nur die Verwendung verwenden auto-mode-alist, um den Dateinamen regexp abzugleichen (Sie können bei Bedarf regexp-quoteMuster für wörtliche Zeichenfolgenwerte erstellen).
Phils

Antworten:

4

Es ist möglich, eine Zeichenfolge anstelle eines Modus anzugeben, dies funktioniert jedoch nur für Unterverzeichnisse. Also werde ich nilstattdessen verwenden, um alle Modi abzugleichen, und dann die evalTaste, um den Hauptmodus bedingt zu ändern:

((nil
  (eval
   (lambda ()
     (when (string= (file-name-nondirectory buffer-file-name)
                    "file-name.extension")
       (my-mode))))))

Ein Nachteil dieses Ansatzes ist, dass der evalSchlüssel unsicher ist. Sie müssen die Variable daher dauerhaft bestätigen, damit dies Auswirkungen hat.

Wasamasa
quelle
Danke, das funktioniert. Könnte jemand den Unterschied mit dem folgenden Formular erklären? `` `((nil. ((Eval. (Lambda ()) (when (string = (Dateiname-Nichtverzeichnis (Puffername))" Dateiname ") (my-mode)))))` ``
Swarnendu Biswas
2

Das Folgende .dir-locals.elfunktioniert gut für mich, um den Hauptmodus aller Dateien in einem Verzeichnis auf einzustellen shell-script-mode:

((nil . ((mode . shell-script))))

Der offensichtliche Nachteil ist, dass Sie den Hauptmodus nicht nur für eine bestimmte Teilmenge von Dateien im Verzeichnis angeben können.

Nachtrag: Amüsanterweise hat es auch den Nebeneffekt, den Hauptmodus von sich .dir-locals.elselbst einzustellen shell-script-mode.

Nachtrag 2: Eher amüsanter, es hat auch den Nebeneffekt shell-script-mode, dass der Hauptmodus von Dired-Puffern auf eingestellt wird , so dass es unmöglich ist, irgendwelche zu öffnen (da während der Initialisierung ein Fehler ausgegeben wird).

Radon Rosborough
quelle