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


73

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

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

其中“ 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...
}

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

(setq create-lockfiles nil)

1
非常感谢您的更新!我将查看是否可以更改它,因为它严重干扰了我正在处理的项目的构建系统。
Arne Babenhauserheide 2012年

我不得不禁用锁文件的原因(现在已经很干净了,使用create-lockfiles变量-谢谢Emacs devs!)是因为对于Samba / CIFS共享上的文件,它们仍然存在:-(经过几次编辑会话后,目录完全杂乱无章,并且由于它们是作为故意悬挂的符号链接实现的,所以我的文件系统lint工具会报告它们。为什么?挂载选项:rw,relatime,vers = 1.0,cache = strict,domain =,uid = 0,noforceuid, gid = 0,noforcegid,addr = 10.8.78.1,soft,unix,posixpaths,serverino,mapposix,acl,rsize = 1048576,wsize = 65536,echo_interval = 60,actimeo = 1
BehemothTheCat

第二个(最后一个)数字显然是一个时间戳。
x-yuri

Answers:


64

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

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

C-h v create-lockfiles

文档:非nil表示使用锁定文件来避免编辑冲突。

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

(setq create-lockfiles nil)

通过获取

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

(我发现了这一点,因为我决定开始活动,然后自己添加一个这样的选项……:))


6
是否可以通过在其他位置创建符号链接来保留此功能?
迈克尔(Michael)

37

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

这与自动保存无关。

我找不到如何在emacs中修改或禁用文件锁定的方法。


您能否评论此功能在单用户系统上是否完全有用?(我不是指DOS和WinNT之前的版本;我指的是实际上具有单用户的系统)
Erik Kaplun 2014年

@ErikAllik:大多数文件只能由文件所有者编辑,因此无论是单用户系统还是非单用户系统,它们的区别都很小。此锁定系统可帮助您避免用自己的脚开枪,例如,当您有两个Emacs实例想要同时修改此文件时。
Stefan

我想知道为什么它使用符号链接,而不仅仅是常规的锁定文件?只是在目标中具有更多信息吗?
CMCDragonkai '18年
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.