Next: Information about Files, Previous: Writing to Files, Up: Files
2人のユーザーが同時に同じファイルを編集すると、互いに干渉し合います。 Emacsは、ファイルが変更されるとファイルロック(file lock)を 記録することで、このような状況が発生しないように努めます。 すると、Emacsは別のEmacsがロックしているファイルを訪問した バッファを変更しようとする最初の試みを検出でき、 ユーザーにどうすべきかを問い合わせます。
複数の計算機がファイルシステムを共有している場合には、 ファイルロックには完全な信頼性はありません。 ファイルロックが働かないと、 2人のユーザーが同時に変更する可能性がありますが、 それでも、Emacsは2番目に保存したユーザーに警告できます。 また、ディスク上で変更されたファイルを訪問しているバッファの変更を 検出することで、同時編集のある場面を捕捉できます。 Modification Timeを参照してください。
ファイルfilenameがロックされていなければ、この関数は
nil
を返す。 このEmacsプロセスがロックしているときにはt
を返す。 他のEmacsがロックしている場合には、ロックしているユーザーの名前を返す。(file-locked-p "foo") nil
この関数は、カレントバッファが変更されていれば ファイルfilenameをロックする。 引数filenameのデフォルトは、 カレントバッファで訪問しているファイルである。 カレントバッファがファイルを訪問していなかったり、 未変更ならばなにもしない。
この関数は、バッファが変更されていれば、 カレントバッファで訪問しているファイルのロックを解除する。 バッファが未変更ならばファイルをロックしていないはずであり、 この関数はなにもしない。 カレントバッファがファイルを訪問していなければ、 やはりなにもしない。
この関数は、別のユーザーother-userがロックしている ファイルfileをユーザーが変更しようとしたときに呼び出される。 この関数のデフォルトの定義は、ユーザーになにをすべきか 問い合わせることである。 この関数の戻り値がEmacsのつぎの動作を決定する。
- 値が
t
であると、ファイルのロックを取得することを意味する。 すると、このユーザーはファイルを編集でき、 別のユーザーother-userはロックを失う。- 値が
nil
であると、ロックを無視して とにかくユーザーにファイルの編集を許す。- この関数はエラー
file-locked
を通知する。 この場合、ユーザーが行おうとしていた変更は行われない。このエラーのエラーメッセージはつぎのようである。
error--> File is locked: file other-userここで、
file
はファイル名であり、 other-userはそのファイルをロックしているユーザー名である。読者は、関数
ask-user-about-lock
を 別の方法で決定する読者独自のものに置き換えてもよい。 通常の定義に対応したコードはuserlock.elにある。