为什么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系统。