我有一个目录结构,其中有<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
如果不使用文件本地“变量”,如何实现这一点?
答案1
据我所知,如果没有eval:
伪变量,你就无法使用文件局部变量来做你想做的事情。
但是,该uniquify
库(标准库)应该可以满足您的需求。只需在 init 文件中放入以下内容即可:
(require 'uniquify)
您还可以自定义uniquify-buffer-name-style
和uniquify-separator
变量以满足uniquify
您的需求。我个人更喜欢这些设置而不是默认设置:
(setq
uniquify-buffer-name-style 'post-forward
uniquify-separator ":")
答案2
(更新)这是一个带有文件局部变量的解决方案:
在您的文件中:
;; -*- 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)
您可能需要自定义安全局部变量值和/或启用局部变量,这取决于您有多少个项目、安全考虑以及回答安全问题对您来说有多烦人。
这是一种不同的方法。它检查包含目录的名称,然后将缓冲区的名称更改为/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")))