为什么emacs会为修改后的文件创建临时符号链接?

Dan*_*ler 68 emacs

当我修改缓冲区时,Emacs会自动在与正在编辑的文件相同的目录中创建一个临时符号链接(例如foo.c):

.#foo.c -> user@host.12345:1296583136
Run Code Online (Sandbox Code Playgroud)

'12345'是Emacs的PID(我不知道最后一个数字是什么意思).

为什么Emacs会创建这些链接,我该如何阻止它这样做呢?

请注意,我已关闭自动保存模式(M-x auto-save-mode)和禁用备份文件(M-x set-variable -> make-backup-files -> nil).当我保存修改后的缓冲区或撤消对它的更改时,符号链接会消失.

特别是,我试图阻止Emacs创建这些链接,因为它们导致目录时间戳被修改,这导致我们的构建系统重建整个模块而不是编译和链接一个更改的文件:/

感谢您的任何意见!


更新:为了防止Emacs永久创建互锁文件,您可以更改src/filelock.c和构建自定义二进制文件:

void
lock_file (fn)
     Lisp_Object fn;
{
     return;
     // Unused code below...
}
Run Code Online (Sandbox Code Playgroud)

更新2:Arne的回答是正确的.现在可以在最新的Emacs(24.3.1)中禁用锁定文件,方法是将其添加到.emacs文件中:

(setq create-lockfiles nil)
Run Code Online (Sandbox Code Playgroud)

Arn*_*ide 61

更新:Emacs 24.3已经发布,完全支持这个新设置!

在emacs的当前主干中,您可以简单地自定义变量create-lockfiles:

C-h v create-lockfiles
Run Code Online (Sandbox Code Playgroud)

文档:非零意味着使用锁定文件来避免编辑冲突.

在您的init文件中,您可以设置

(setq create-lockfiles nil)
Run Code Online (Sandbox Code Playgroud)

通过它获取

bzr branch bzr://bzr.savannah.gnu.org/emacs/trunk emacs-trunk
make
src/emacs
Run Code Online (Sandbox Code Playgroud)

(我发现了这个,因为我决定变得活跃,只是添加一个像我自己的选项... :))

  • 有没有办法通过在别处创建符号链接来保留此功能? (3认同)

Jua*_*cho 35

符号链接是emacs的文件互锁系统:符号链接表示emacs的实例正在编辑此文件.如果另一个实例尝试编辑同一文件,emacs将发出警告.请参阅http://www.gnu.org/software/emacs/manual/html_node/emacs/Interlocking.html

这与自动保存无关.

我找不到如何在emacs中修改或禁用文件锁定.