Next: Dynamic Libraries, Previous: Desktop Notifications, Up: System Interface [Contents][Index]
いくつかのオペレーティングシステムは、ファイル変更にたいする、ファイルシステムの監視をサポートします。正しく設定されている場合には、Emacsはgfilenotify、inotify、w32notifyのようなライブラリーを静的にリンクします。これらのライブラリーにより、ローカルマシン上でのファイルシステムの監視が有効になります。
リモートマシン上のファイルシステムの監視も可能です。Remote Files in The GNU Emacs Manualを参照してください。これはEmacsにリンク済みのライブラリーのいずれかに依存する訳ではありません。
通知されたファイル変更によりこれらすべてのライブラリーは異なるイベントを発行するので、Emacsは一意な参照を提供するライブラリーfilenotify
を提供しています。
fileに関するファイルシステムイベントの監視を追加する。これはfileに関するファイルシステムイベントがEmacsに報告されるように取り計らう。
リターン値は追加された監視ディスクリプター(descriptor)。タイプは背景にあるライブラリーに依存しており、以下の例に示すとおり整数とみなすことはできない。比較にはequal
を使用すること。
何らかの理由によりfileが監視不可能なら、この関数はエラーfile-notify-error
をシグナルする。
マウントされたファイルシステムでファイル変更を監視できないことがある。これはこの関数により検出されないので、非nil
のリターン値がfileの変更の通知を保証するものではない。
flagsは何を監視するかセットするためのコンディションのリスト。以下のシンボルを含めることができる:
change
ファイル変更を監視。
attribute-change
パーミッションや変更時刻のようなファイル属性の変更を監視。
fileがディレクトリーならディレクトリー内のすべてのファイルの変更が通知される。これは再帰的に機能しない。
Emacsは何らかのイベント発生時には以下の形式のeventを単一の引数として関数callbackを呼び出す:
(descriptor action file [file1])
descriptorはこの関数がリターンするオブジェクトと同じ。actionはイベントを示し、以下のシンボルのいずれか:
created
fileが作成された。
deleted
fileが削除された。
changed
fileが変更された。
renamed
fileがfile1にリネームされた。
attribute-changed
fileの属性が変更された。
fileとfile1はイベントが報告されたファイルの名前。たとえば:
(require 'filenotify) ⇒ filenotify
(defun my-notify-callback (event) (message "Event %S" event)) ⇒ my-notify-callback
(file-notify-add-watch "/tmp" '(change attribute-change) 'my-notify-callback) ⇒ 35025468
(write-region "foo" nil "/tmp/foo") ⇒ Event (35025468 created "/tmp/.#foo") Event (35025468 created "/tmp/foo") Event (35025468 changed "/tmp/foo") Event (35025468 deleted "/tmp/.#foo")
(write-region "bla" nil "/tmp/foo") ⇒ Event (35025468 created "/tmp/.#foo") Event (35025468 changed "/tmp/foo") [2 times] Event (35025468 deleted "/tmp/.#foo")
(set-file-modes "/tmp/foo" (default-file-modes)) ⇒ Event (35025468 attribute-changed "/tmp/foo")
アクションrenamed
がリターンされるかどうかは、使用する監視ライブラリーに依存する。fileとfile1の両方が同じディレクトリーに属し、そのディレクトリーが監視されていればリターンを期待できる。それ以外ではアクションdeleted
とcreated
がランダムな順にリターンされる。
(rename-file "/tmp/foo" "/tmp/bla") ⇒ Event (35025468 renamed "/tmp/foo" "/tmp/bla")
(file-notify-add-watch "/var/tmp" '(change attribute-change) 'my-notify-callback) ⇒ 35025504
(rename-file "/tmp/bla" "/var/tmp/bla") ⇒ ;; gfilenotify Event (35025468 renamed "/tmp/bla" "/var/tmp/bla") ⇒ ;; inotify Event (35025504 created "/var/tmp/bla") Event (35025468 deleted "/tmp/bla")
descriptorに指定された既存のファイル監視を削除する。descriptorはfile-notify-add-watch
がリターンしたオブジェクトであること。