Wie richte ich ein Emacs-Puffer-Namen mit einer Datei lokale Variable?

stimmen
9

Ich möchte, dass 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:

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

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

Veröffentlicht am 09/12/2008 um 16:57
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
12

Du könntest sagen:

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

Es ist ein Trick, obwohl.

Sie könnten sonst ein Programm find-file-hookHaken in Ihren .emacsdie benennen Sie den Puffer auf einen bestimmten lokalen Variable Inhalte. 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 haben

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

Mit mehr Gehirn Macht könnte man eine schönere Lösung.

Beachten Sie, dass es bereits eine Erweiterung für Ihren Bedarf bestehen könnte. Schauen Sie in der Emacs Wiki .

Beantwortet am 09/12/2008 um 17:30
quelle vom benutzer

stimmen
3

Dank Pierre. Ihr pdp-Puffer-Name elisp Beispiel funktionierte sehr gut.

Ich machte eine Verbesserung, weil ich Emacs bemerkt wurden die lokale Variable als „unsicher“, dh die Behandlung, immer fragen auffordert, wenn 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 wie folgt aus:

;; allow all values for "pdp-buffer-name"  
(defadvice safe-local-variable-p (after allow-pdp-buffer-name (sym val) activate)  
  (if (eq sym 'pdp-buffer-name)    
      (setq ad-return-value t))  
  )  
Beantwortet am 09/12/2008 um 20:20
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more