W jaki sposób ustawić nazwę bufora Emacs ze zmienną lokalnego pliku?

głosy
9

Chcę, aby moje emacs buffer mieć inną nazwę niż nazwa pliku. Zamiast ustawiania tego ręcznie za każdym razem, chcę mieć to dzieje się automatycznie na podstawie zawartości plików, coś jak:

// lokalne zmienne:
// bufor-name: MyName
// Koniec:

Ale to nie działa, ponieważ bufor-name jest funkcją, a nie zmienna. Jak mogę to zrobić?

Utwórz 09/12/2008 o 16:57
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
12

Można powiedzieć:

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

Jest to jednak podstęp.

Można inaczej zaprogramować find-file-hookhak w twoim .emacsktóry przemianować bufor do konkretnych lokalnych zawartości zmiennych. Coś jak:

(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)

Następnie w określonym pliku masz

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

Z większą moc mózgu można mieć ładniejszy rozwiązanie.

Zauważ, że nie może już istnieć rozszerzenie dla Państwa potrzeby. Spójrz w wiki Emacs .

Odpowiedział 09/12/2008 o 17:30
źródło użytkownik

głosy
3

Dzięki Pierre. Twój PDP-bufor-name elisp przykład bardzo dobrze.

Zrobiłem jedno akcesorium bo zauważyłem emacs traktował lokalną zmienną jako „niebezpieczne”, czyli zawsze skłania się zapytać, czy wartość ta powinna być stosowana. Ponieważ chcę to do pracy z wieloma różnymi wartościami bez zaśmiecania mojego .emacs z listy „bezpiecznych” wartości, dodałem radę. Z nomenklaturą poprzednim przykładzie wygląda to tak:

;; 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))  
  )  
Odpowiedział 09/12/2008 o 20:20
źródło użytkownik

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