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


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 文件本地'变量'?


我很确定它不能,但如果你回答 ! 对于“可能不安全的文件局部变量”提示,Emacs会在你的custom.el文件中注意到它以后不应该提示该文件的局部变量。
Aaron Miller

Answers:


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)

你可能需要自定义 安全,局部变量的值 和/或 使局部变量 , 取决于您有多少项目,安全考虑因素以及您回答安全问题的烦恼程度。


这是一种不同的方法。 它检查包含目录的名称 然后将缓冲区的名称更改为/ 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 库(标准)应该满足您的需求。只需在init文件中添加以下内容:

(require 'uniquify)

你也可以自定义 uniquify-buffer-name-styleuniquify-separator 变量来量身定制 uniquify 满足您的需求。我个人比默认设置更喜欢这些设置:

(setq
 uniquify-buffer-name-style 'post-forward
 uniquify-separator         ":")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.