1. ホーム
  2. emacs

なぜemacsは変更されたファイルに対して一時的なシンボリックリンクを作成するのですか?

2023-10-30 11:33:33

質問

バッファを変更すると、Emacs は自動的に編集中のファイル (例: foo.c) と同じディレクトリに一時的なシンボリックリンクを作成します。

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

ここで、'12345'はEmacsのPIDです(最後の数字が何を意味するのか分かりません)。

なぜEmacsはこのようなリンクを作成するのでしょうか、また、それを防ぐにはどうしたらいいのでしょうか。

私は自動保存モードをオフにしたことに注意してください ( M-x auto-save-mode ) と、バックアップ・ファイルを無効にした ( M-x set-variable -> make-backup-files -> nil ). 変更したバッファを保存したり、その変更を元に戻したりすると、シンボリックリンクが消えます。

特に、私は Emacs がこれらのリンクを作成しないようにしようとしています。なぜなら、これらのリンクはディレクトリのタイムスタンプを変更する原因となり、それによってビルド システムが、変更された 1 つのファイルに対してコンパイルとリンクを行う代わりにモジュール全体を再構築してしまうからです :/)

どんな意見でもありがとうございます!


更新: Emacsが永久に連動ファイルを作成しないようにするには、以下のように src/filelock.c を変更し、カスタムバイナリをビルドします。

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の現在のトランクでは、変数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

(このことを知ったのは、自分で積極的にそういうオプションを追加すればいいんだと思ったからです... :) )