2008-12-09 4 views
9

Ich möchte meine Emacs-Puffer einen anderen Namen als den Dateinamen haben. Anstatt diese jedes Mal manuell einstellen, möchte ich dies automatisch haben, passieren, basierend auf den Dateiinhalt, so etwas wie:Wie setze ich einen Emacs-Puffernamen mit einer lokalen Dateivariablen?

// Lokale Variablen:
// Puffer-name: MyName
// Ende:

Aber das funktioniert nicht, weil Puffer-Namen eine Funktion ist, keine Variable. Wie kann ich das machen?

Antwort

12

Man könnte sagen:

// Local Variables: 
// eval: (rename-buffer "my-buffer-name-here") 
// end: 

Es ist ein Trick, obwohl.

Sie können andernfalls einen find-file-hook Hook in Ihrem .emacs programmieren, der den Puffer zu einem spezifischen lokalen Variableninhalt umbenennt. Etwas wie:

(defvar pdp-buffer-name nil) 

(defun pdp-rename-buffer-if-necessary() 
    "Rename the current buffer according to the value of variable" 
    (interactive) 
    (if (and pdp-buffer-name (stringp pdp-buffer-name)) 
     (rename-buffer pdp-buffer-name))) 

(add-hook 'find-file-hook 'pdp-rename-buffer-if-necessary) 

Dann in Ihrer speziellen Datei, die Sie

// Local Variables: 
// pdp-buffer-name: "pierre" 
// end: 

Mit mehr Gehirn Macht haben, könnten Sie eine schönere Lösung.

Beachten Sie, dass es bereits eine Erweiterung für Ihren Bedarf bestehen könnte. Schau in die Emacs wiki.

+0

Ich denke, Emacs wird jedes Mal über die "Eval" warnen, aber nette Idee! – ShreevatsaR

+0

Ja, richtig warnt es jedesmal vor "eval". Sie könnten dann die Variable "enable-local-variable" auf t setzen, wenn es Sie stört. Es ist aber nicht sicher ... – Pierre

3

Dank Pierre. Ihr pdp-buffer-name elisp-Beispiel hat sehr gut funktioniert.

Ich machte eine Verbesserung, weil ich Emacs bemerkte die lokale Variable als „unsicher“ heißt behandelte, immer aufgefordert zu fragen, ob der Wert angewandt werden soll. Da ich dies mit vielen verschiedenen Werten arbeiten wollen, ohne meine .emacs mit einer Liste von „sicheren“ Werte unübersichtlich, fügte ich einen Rat. Mit der Nomenklatur des vorherigen Beispiels sieht es so aus:

+0

Das sollte die Lösung definitiv vervollständigen. Nett ! – Pierre