Como faço para definir um nome de buffer de Emacs com uma variável local do arquivo?

votos
9

Quero tampão meus emacs ter um nome diferente do nome do arquivo. Em vez de definir isso manualmente de cada vez, eu quero que isso aconteça automaticamente com base no conteúdo do arquivo, algo como:

// Variáveis locais:
// tampão-name: MyName
// End:

Mas isso não funciona porque o buffer do nome é uma função, não uma variável. Como posso fazer isso?

Publicado 09/12/2008 em 16:57
fonte usuário
Em outras línguas...                            


2 respostas

votos
12

Você poderia dizer:

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

É um truque embora.

Caso contrário, pode programar um find-file-hookgancho em sua .emacsque mudar o nome do buffer para um conteúdo de variáveis locais específicos. Algo como:

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

Então, em seu arquivo específico que você tem

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

Com mais poder do cérebro você poderia ter uma solução mais agradável.

Note-se que já poderia existir uma extensão para sua necessidade. Olhe-se no wiki Emacs .

Respondeu 09/12/2008 em 17:30
fonte usuário

votos
3

Graças Pierre. Seu pdp-buffer-name exemplo elisp funcionou muito bem.

Fiz uma melhoria, porque eu notei emacs estava tratando a variável local como "inseguro" ou seja, sempre alertando para perguntar se o valor deve ser aplicado. Desde que eu quero isso para trabalhar com muitos valores diferentes sem ocupar meu .emacs com uma lista de valores "seguros", eu adicionei um conselho. Com a nomenclatura do exemplo anterior, é parecido com este:

;; 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))  
  )  
Respondeu 09/12/2008 em 20:20
fonte usuário

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