summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorRĂ¼diger Sonderfeld <ruediger@c-plusplus.de>2012-12-10 06:17:21 -0500
committerEli Zaretskii <eliz@gnu.org>2012-12-10 06:17:21 -0500
commit81606b10501169a5671061b8461bbc32dcec8705 (patch)
tree6dadb650dc1950fbb1e5d4cf6f0c8d18588e6787 /lisp
parent265c2fbf11cb8bf9b805df63ecb9508631f08e35 (diff)
downloademacs-81606b10501169a5671061b8461bbc32dcec8705.tar.gz
Support filesystem notification through inotify on GNU/Linux.
configure.ac (inotify): New option. (HAVE_INOTIFY): Test for inotify. src/termhooks.h (enum event_kind) [HAVE_INOTIFY]: Add FILE_NOTIFY_EVENT. src/lisp.h (syms_of_inotify) [HAVE_INOTIFY]: Add prototype. src/keyboard.c (Qfile_inotify) [HAVE_INOTIFY]: New variable. (syms_of_keyboard): DEFSYM it. (kbd_buffer_get_event) [HAVE_INOTIFY]: Generate FILE_NOTIFY_EVENT. (make_lispy_event): Support FILE_NOTIFY_EVENT by generating Qfile_inotify events. (keys_of_keyboard) [HAVE_INOTIFY]: Bind file-inotify events in special-event-map to inotify-handle-event. src/emacs.c (main) [HAVE_INOTIFY]: Call syms_of_inotify. src/Makefile.in (base_obj): Add inotify.o. src/inotify.c: New file. lisp/subr.el (inotify-event-p, inotify-handle-event): New functions. test/automated/inotify-test.el: New test.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog4
-rw-r--r--lisp/subr.el20
2 files changed, 24 insertions, 0 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 787bfb7563b..1e65aa3a089 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,7 @@
+2012-12-10 RĂ¼diger Sonderfeld <ruediger@c-plusplus.de>
+
+ * subr.el (inotify-event-p, inotify-handle-event): New functions.
+
2012-12-10 Dani Moncayo <dmoncayo@gmail.com>
* simple.el (just-one-space): Doc fix.
diff --git a/lisp/subr.el b/lisp/subr.el
index e08277370a9..4f2e8f22bfe 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -4323,6 +4323,26 @@ convenience wrapper around `make-progress-reporter' and friends.
nil ,@(cdr (cdr spec)))))
+;;;; Support for watching filesystem events.
+
+(defun inotify-event-p (event)
+ "Check if EVENT is an inotify event."
+ (and (listp event)
+ (>= (length event) 3)
+ (eq (car event) 'file-inotify)))
+
+;;;###autoload
+(defun inotify-handle-event (event)
+ "Handle file system monitoring event.
+If EVENT is a filewatch event then the callback is called. If EVENT is
+not a filewatch event then a `filewatch-error' is signaled."
+ (interactive "e")
+ (unless (inotify-event-p event)
+ (signal 'filewatch-error (cons "Not a valid inotify event" event)))
+
+ (funcall (nth 2 event) (nth 1 event)))
+
+
;;;; Comparing version strings.
(defconst version-separator "."