如何使用文件局部变量设置 Emacs 缓冲区名称?

如何使用文件局部变量设置 Emacs 缓冲区名称?

我有一个目录结构,其中有<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-styleuniquify-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")))

相关内容