2011-04-21 105 views
61

当我修改一个缓冲器时,Emacs为被编辑的文件自动创建在同一目录中的临时符号链接(例如foo.c的):为什么emacs为修改后的文件创建临时符号链接?

.#foo.c -> [email protected]: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:阿恩的答案是正确的。它现在可能的Emacs(24.3.1),加入给你的.emacs文件来禁用最新的锁文件:

(setq create-lockfiles nil) 
+0

非常感谢您的更新!我会看看我能否改变这种情况,因为它会严重干扰我正在开发的项目的构建系统。 – 2012-10-19 11:21:11

回答

54

更新:Emacs 24.3已全面支持这一新设置发布!

在Emacs当前后备箱,你可以简单地自定义变量创建-的lockfiles:

C-h v create-lockfiles 

文档: 非空意味着使用的lockfiles避免碰撞编辑。

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

(setq create-lockfiles nil) 

通过

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

得到它(我发现了这一点,因为我决定主动,只是增加一个选项一样,我自己... :))

+2

有没有办法通过在别处创建符号链接来保留此功能? – Michael 2017-12-01 13:48:06

-2

据我了解,大多数编辑器做:

  • 临时开放文件
  • 保存临时文件
  • 重命名临时文件 - >文件

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

您可能能够关闭这个功能,但我想,也许是更好的选择是改变你的构建系统。

+0

我已经通过禁用自动保存模式来禁用临时文件。无论如何,默认情况下该文件将被命名为#foo.c#,并且不会是上面不存在的文件的符号链接。我们也不想更改构建系统的行为,因为当添加新的源文件时,目录时间戳也会发生变化,这会导致重建整个模块。正确而不是快速是更重要的。 – 2011-04-21 01:02:38

+0

我不认为禁用'自动保存模式'禁用所有临时文件,只是在自动保存过程中创建的。在正常显式保存AFAIUI期间仍然会创建临时文件。 – Mikel 2011-04-21 01:30:42

+0

通常情况下,您希望以其他方式完成:通过临时+重命名创建备份文件。如果文件本身被新版本覆盖,则指向旧副本的硬链接将不会更新。 Emacs为这些东西提供了大量的设置,当然,例如参见有关指向其他选项的'make-backup-files'的文档。 – 2011-04-21 01:40:41

33

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

这有什么好做自动保存。

我找不到如何修改或禁用文件从emacs的内锁。

+0

您可否评论此功能对单用户系统是否有用? (我不是指DOS和WinNT之前的版本;我的意思是具有事实上的单个用户的系统) – 2014-01-10 16:07:33

+0

@ErikAllik:大多数文件只能由文件的所有者编辑,所以单用户系统或者没有。这个锁定系统可以帮助您避免拍摄自己的脚,例如当你有两个想要同时修改这个文件的Emacs实例时。 – Stefan 2015-11-16 14:18:05

相关问题