Почему emacs создает временные символические ссылки для измененных файлов?

Когда я изменяю буфер, Emacs автоматически создает временную символическую ссылку в том же каталоге, что и редактируемый файл (например, foo.c):

.#foo.c -> [email protected]:1296583136

где '12345' - это PID Emacs '(я не знаю, что означает последнее число).

Почему 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)

Ответ 1

Обновление: Emacs 24.3 был выпущен с полной поддержкой этой новой настройки!

В текущей строке emacs вы можете просто настроить переменную create-lockfiles:

C-h v create-lockfiles

Документация: Non-nil означает использование lockfiles, чтобы избежать редактирования конфликтов.

В вашем файле инициализации вы можете установить

(setq create-lockfiles nil)

Получить его через

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

(я узнал об этом, потому что решил принять активное участие и просто добавить такой вариант самостоятельно...:))

Ответ 2

Символьная ссылка - это система блокировки файлов emacs: символическая ссылка указывает, что экземпляр emacs редактирует этот файл. Если другой экземпляр пытается отредактировать один и тот же файл, emacs выдаст предупреждение. См. http://www.gnu.org/software/emacs/manual/html_node/emacs/Interlocking.html

Это не имеет ничего общего с автоматическим сохранением.

Я не могу найти, как изменить или отключить блокировку файлов из emacs.

Ответ 3

Как я понимаю, большинство редакторов:

  • открыть файл temp
  • сохранить файл temp
  • переименовать файл temp → файл

Это намного безопаснее, чем усечение и переписывание файла на месте, что приведет к потере файла, если система потерпит крах в тот момент (или в любое время между тем и когда файл физически выгружается на диск).

Возможно, вы сможете отключить это, но я думаю, что лучший вариант - изменить вашу систему сборки.