1

У меня есть структура каталогов, где у меня есть <project>/worksheet.tex . Когда я открываю каждый лист, я получаю неописательный worksheet<n> в качестве имени буфера.

Я хотел бы сохранить имена буферов как локальные переменные файла. Что-то вроде этого:

;; (to be safe if "specific project" already exists as a buffer)
buffer-name: (generate-new-buffer-name "specific project")

Как это можно реализовать без использования локальной переменной eval file?

2 ответа2

1

(обновление) вот решение с локальной файловой переменной:

в ваших файлах:

;; -*- preferred-buffer-name: "purtsl"; -*-

в .emacs:

(defun change-buffer-name ()
  (if (boundp 'preferred-buffer-name)
      (rename-buffer preferred-buffer-name)))

(add-hook 'find-file-hook 'change-buffer-name t)

вам, возможно, придется настраивать safe-local-variable-values и / или enable-local-variable, в зависимости от того, сколько у вас проектов, соображений безопасности и насколько раздражает ответ на секретный вопрос.


и вот другой подход. он проверяет имя содержащей директории и затем изменяет имя буфера на /WS:

(defun find-file-custom (filename)
  "open filename and set buffer name to <project>/WS"
  (interactive "F")
  (find-file filename)
  (rename-buffer (concat "<" (file-name-nondirectory
                       (directory-file-name
                        (file-name-directory (buffer-file-name)))) ">/WS")))
0

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

Тем не менее, библиотека uniquify (которая является стандартной), должна покрывать ваши потребности. Просто поместите что-то вроде следующего в ваш файл инициализации:

(require 'uniquify)

Вы также можете настроить uniquify-buffer-name-style и uniquify-separator чтобы адаптировать uniquify к вашим потребностям. Мне лично эти настройки нравятся больше, чем значения по умолчанию:

(setq
 uniquify-buffer-name-style 'post-forward
 uniquify-separator         ":")

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .