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

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

.#foo.c -> user@host.12345:1296583136 

其中“12345”是Emacs的PID(我不知道最后的数字是什么意思)。

为什么Emacs创build这些链接,我如何阻止它做到这一点?

请注意,我closures了自动保存模式( Mx auto-save-mode )并禁用了备份文件( Mx set-variable -> make-backup-files -> nil )。 当我保存一个修改后的缓冲区,或者撤消对它的修改时,符号链接就消失了。

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

感谢您的任何意见!


更新:为了防止Emacs永久创build联锁文件,您可以更改src/filelock.c并构build一个自定义二进制文件:

 void lock_file (fn) Lisp_Object fn; { return; // Unused code below... } 

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

 (setq create-lockfiles nil) 

更新:Emacs 24.3已经全面支持这个新的设置!

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

 Ch v create-lockfiles 

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

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

 (setq create-lockfiles nil) 

通过

 bzr branch bzr://bzr.savannah.gnu.org/emacs/trunk emacs-trunk make src/emacs 

(我发现了这个,因为我决定积极,只是像这样的自己添加一个选项… :))

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

这与自动保存无关。

我无法find如何修改或禁用emacs内的文件locking。

据我所知,大多数编辑做:

  • 打开临时文件
  • 保存临时文件
  • 重命名临时文件 – >文件

这比截断和覆盖文件要安全得多,如果系统在当时崩溃(或之间的任何时间和文件被物理刷新到磁盘),将导致丢失文件。

你也许可以把它关掉,但是我想也许更好的select是改变你的构build系统。