Как мне установить имя буфера Emacs с локальной файловой переменной? - PullRequest
9 голосов
/ 09 декабря 2008

Я хочу, чтобы мой буфер emacs имел имя, отличное от имени файла. Вместо того, чтобы устанавливать это каждый раз вручную, я хочу, чтобы это происходило автоматически в зависимости от содержимого файла, например:

// Локальные переменные:
// имя-буфера: MyName
// Конец:

Но это не работает, потому что имя-буфера - это функция, а не переменная. Как я могу это сделать?

Ответы [ 2 ]

12 голосов
/ 09 декабря 2008

Можно сказать:

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

Это трюк, хотя.

В противном случае вы можете запрограммировать find-file-hook хук в вашем .emacs, который переименует буфер в определенное содержимое локальной переменной. Что-то вроде:

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

Тогда в вашем конкретном файле у вас есть

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

Имея больше умственных способностей, вы могли бы получить более приятное решение.

Обратите внимание, что уже может существовать расширение для ваших нужд. Посмотрите в Emacs wiki .

3 голосов
/ 09 декабря 2008

Спасибо, Пьер. Ваш пример pdp-buffer-name elisp работал очень хорошо.

Я сделал одно улучшение, потому что заметил, что emacs рассматривал локальную переменную как «небезопасную», то есть всегда предлагал спросить, следует ли применить значение. Поскольку я хочу, чтобы это работало со многими различными значениями, не загромождая мои .emacs списком «безопасных» значений, я добавил совет. С номенклатурой предыдущего примера это выглядит так:

;; 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))  
  )  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...