From: Thien-Thi Nguyen <ttn@gnuvola.org>
To: "Rüdiger Sonderfeld" <ruediger@c-plusplus.de>
Cc: emacs-devel@gnu.org
Subject: Re: [PATCH updated] Support for filesystem watching (inotify)
Date: Sat, 04 Jun 2011 22:10:45 +0200 [thread overview]
Message-ID: <8762olmk6y.fsf@ambire.localdomain> (raw)
In-Reply-To: <201106041913.09203.ruediger@c-plusplus.de> ("Rüdiger Sonderfeld"'s message of "Sat, 4 Jun 2011 19:13:08 +0200")
() Rüdiger Sonderfeld <ruediger@c-plusplus.de>
() Sat, 4 Jun 2011 19:13:08 +0200
+DEFUN ("file-watch", Ffile_watch, Sfile_watch, 3, MANY, 0,
+ doc: /* Watch a file or directory.
+
+file-watch watches the file or directory given in FILENAME. If a change occurs
+CALLBACK is called with FILENAME as first argument and a list of changes as second
+argument. FLAGS can be
+
+:modify -- notify when a file is modified or created.
+
+:move -- notify when a file/directory is moved.
+
+:attrib -- notify when attributes change.
+
+:delete -- notify when a file/directory is deleted.
+
+:all -- notify for all of the above.
I think FLAGS should be symbols, not keywords. Furthermore, "flags"
is too generic; maybe something like "aspect" or even "what" would be
(slightly) better. Instead of ‘:all’ (or ‘all’), consider using ‘t’.
Also, it's cool if the first line names all the args. How about:
"Arrange to call FUNC if ASPECT of FILENAME changes."
?
+Watching a directory is not recursive. CALLBACK receives the events as a list
+with each list element being a list containing information about an event. The
+first element is a flag symbol. If a directory is watched the second element is
+the name of the file that changed. If a file is moved from or to the directory
+the second element is either :from or :to and the third element is the file
+name. A fourth element contains a numeric identifier (cookie) that can be used
+to identify matching move operations if a file is moved inside the directory.
+
+Example:
+(file-watch "foo" #'(lambda (file event) (message "%s %s" file event)) :all)
+
+Use `file-unwatch' to stop watching.
+
+usage: (file-watch FILENAME CALLBACK &rest FLAGS) */)
+ (size_t nargs, Lisp_Object *args)
For upward-compatability, it is better to not use rest-args for these
aspects. You should specify one arg ASPECT, document that it can be
"either a symbol, one of: ..., or a list of of these symbols".
Style preference: I'd prefer CALLBACK to be last so that long lambda
expressions need not be (visually) scanned to determine the aspects watched.
Consider:
(file-watch "foo" t (lambda (name event)
;; LONG
;; COMPLICATED
;; DRAWN-OUT
;; COMPUTATION
))
vs
(file-watch "foo" (lambda (name event)
;; LONG
;; COMPLICATED
;; DRAWN-OUT
;; COMPUTATION
)
t)
No big deal, just sympathy for the lone t.
+ CHECK_STRING(args[0]);
Please insert a space between a function (or macro) and its arg list.
Generally, (info "(standards) Formatting").
+ else /* TODO: should this be an error? */
Yes.
+ /* TODO: check if file is already in the watch_list. */
Moreover, you need to decide what to do given, for example:
(progn (file-watch "foo" 'modify 'notify-modify)
(file-watch "foo" 'move 'notify-move))
Is this OK, is this an error, is this "close to" an error?
I think a simple "file is already in" check is insufficient.
+ watch_list = Fcons(Fcons(make_number(watchdesc), Flist(2, args)), watch_list);
You can use ‘acons’: (acons K V ALIST) ≡ (cons (cons K V) ALIST).
next prev parent reply other threads:[~2011-06-04 20:10 UTC|newest]
Thread overview: 148+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-03 22:34 [PATCH] Support for filesystem watching (inotify) Rüdiger Sonderfeld
2011-06-04 8:52 ` joakim
2011-06-04 16:40 ` Rüdiger Sonderfeld
2011-06-04 10:43 ` Jan Djärv
2011-06-04 23:36 ` [PATCH update2] " Rüdiger Sonderfeld
2011-06-05 5:45 ` Eli Zaretskii
2011-06-05 9:48 ` [PATCH update3] " Rüdiger Sonderfeld
2011-06-05 7:48 ` [PATCH update2] " Jan Djärv
2011-06-05 7:54 ` Andreas Schwab
2011-06-05 9:49 ` Rüdiger Sonderfeld
2011-06-05 15:59 ` John Yates
2011-06-05 16:14 ` Rüdiger Sonderfeld
2011-06-05 16:58 ` Eli Zaretskii
2011-06-06 18:56 ` Rüdiger Sonderfeld
2011-06-06 19:57 ` Eli Zaretskii
2011-06-04 11:30 ` [PATCH] " Eli Zaretskii
2011-06-04 17:13 ` [PATCH updated] " Rüdiger Sonderfeld
2011-06-04 19:15 ` Eli Zaretskii
2011-06-04 20:10 ` Thien-Thi Nguyen [this message]
2011-06-04 23:43 ` Rüdiger Sonderfeld
2011-06-05 2:15 ` Thien-Thi Nguyen
2011-06-05 9:22 ` Štěpán Němec
2011-06-15 20:53 ` Johan Bockgård
2011-06-16 8:52 ` Inlined cl functions -- how to learn about them Štěpán Němec
2011-06-06 15:21 ` [PATCH updated] Support for filesystem watching (inotify) Stefan Monnier
2011-06-06 16:25 ` Rüdiger Sonderfeld
2011-06-06 17:11 ` Stefan Monnier
2011-06-06 20:16 ` Ted Zlatanov
2011-06-07 14:42 ` Stefan Monnier
2011-06-07 16:46 ` Ted Zlatanov
2011-06-07 18:06 ` Stefan Monnier
2011-06-07 18:26 ` Ted Zlatanov
2011-06-24 0:50 ` Rüdiger Sonderfeld
2011-06-24 10:19 ` Ted Zlatanov
2011-06-24 12:18 ` Ted Zlatanov
2011-07-06 13:36 ` Stefan Monnier
2011-07-06 15:54 ` Paul Eggert
2011-07-06 18:30 ` Stefan Monnier
2011-07-06 20:39 ` Paul Eggert
2011-07-06 19:14 ` wide-int crash [was Re: [PATCH updated] Support for filesystem watching (inotify)] Glenn Morris
2011-07-06 22:31 ` Paul Eggert
2011-10-07 7:30 ` bug#8884: wide-int crash Glenn Morris
2011-06-17 17:50 ` bug#8884: 24.0.50; temacs crashes and dumps core when configured --with-wide-int Peter Dyballa
2011-06-17 20:07 ` Peter Dyballa
[not found] ` <handler.8884.D8884.131797266119606.notifdone@debbugs.gnu.org>
2011-10-08 13:35 ` bug#8884: closed (Re: bug#8884: wide-int crash) Peter Dyballa
2011-10-17 22:24 ` Peter Dyballa
2011-10-18 5:42 ` Paul Eggert
2011-10-18 9:14 ` Peter Dyballa
2011-10-18 10:55 ` Eli Zaretskii
2011-10-18 13:33 ` Stefan Monnier
2011-10-18 15:38 ` Paul Eggert
2011-10-18 15:45 ` Andreas Schwab
2011-10-18 15:57 ` Paul Eggert
2011-10-18 21:41 ` Peter Dyballa
2011-10-19 1:47 ` Paul Eggert
2011-10-19 22:46 ` Peter Dyballa
2011-10-19 3:43 ` Stefan Monnier
2011-10-19 13:59 ` Peter Dyballa
2011-10-19 14:44 ` Stefan Monnier
2011-10-19 14:59 ` Peter Dyballa
2011-10-19 18:00 ` Stefan Monnier
2011-10-19 21:59 ` Peter Dyballa
2011-10-20 0:32 ` Stefan Monnier
2011-07-06 22:31 ` bug#8884: wide-int crash [was Re: [PATCH updated] Support for filesystem watching (inotify)] Paul Eggert
2011-07-07 19:43 ` [PATCH updated] Support for filesystem watching (inotify) Stefan Monnier
2012-09-28 13:06 ` [PATCH] Added basic file system watching support Rüdiger Sonderfeld
2012-09-28 14:13 ` Stefan Monnier
2012-09-28 16:27 ` Rüdiger Sonderfeld
2012-10-01 4:38 ` Stefan Monnier
2012-10-01 7:24 ` Eli Zaretskii
2012-10-01 14:09 ` [PATCH] Added inotify support Rüdiger Sonderfeld
2012-10-01 16:27 ` Stefan Monnier
2012-10-02 21:28 ` Eli Zaretskii
2012-10-02 23:46 ` Óscar Fuentes
2012-10-03 2:10 ` Stefan Monnier
2012-10-03 3:54 ` Eli Zaretskii
2012-10-03 12:46 ` Stefan Monnier
2012-10-03 18:34 ` Eli Zaretskii
2012-10-03 18:47 ` Stefan Monnier
2012-10-03 19:08 ` Eli Zaretskii
2012-10-03 20:59 ` Stefan Monnier
2012-10-12 13:54 ` Eli Zaretskii
2012-10-14 14:55 ` Eli Zaretskii
2012-10-03 19:33 ` Óscar Fuentes
2012-10-05 7:40 ` Eli Zaretskii
2012-10-05 13:07 ` Óscar Fuentes
2012-10-05 15:19 ` Eli Zaretskii
2012-10-05 16:55 ` Nix
2012-10-05 17:15 ` Eli Zaretskii
2012-10-05 17:46 ` Nix
2012-10-05 18:22 ` Stefan Monnier
2012-10-05 18:30 ` Óscar Fuentes
2012-10-06 16:39 ` Nix
2012-10-06 17:01 ` Stefan Monnier
2012-10-06 18:51 ` Nix
2012-10-06 21:26 ` Stefan Monnier
2012-10-06 21:28 ` Nix
2012-10-07 7:38 ` Achim Gratz
2012-10-07 13:58 ` Stefan Monnier
2012-10-07 14:54 ` Achim Gratz
2012-10-07 8:24 ` Stephen J. Turnbull
2012-10-07 14:00 ` Stefan Monnier
2012-10-07 14:28 ` Óscar Fuentes
2012-10-07 14:38 ` Stefan Monnier
2012-10-08 7:07 ` Stephen J. Turnbull
2012-10-08 8:06 ` Eli Zaretskii
2012-10-14 15:52 ` Jim Meyering
2012-10-06 7:04 ` Stephen J. Turnbull
2012-10-06 7:23 ` Andreas Schwab
2012-10-06 16:41 ` Nix
2012-10-07 8:09 ` Stephen J. Turnbull
2012-10-07 14:08 ` Stefan Monnier
2012-10-03 3:57 ` Eli Zaretskii
2012-12-02 20:08 ` Eli Zaretskii
2012-12-03 17:18 ` Stefan Monnier
2012-12-10 14:16 ` Eli Zaretskii
2012-12-10 14:47 ` Stefan Monnier
2012-12-10 11:52 ` Eli Zaretskii
2012-12-10 12:11 ` Rüdiger Sonderfeld
2012-12-11 7:43 ` Michael Albinus
2012-12-11 8:20 ` Eli Zaretskii
2012-12-11 16:36 ` Michael Albinus
2012-12-11 16:46 ` Rüdiger Sonderfeld
2012-12-11 20:17 ` Michael Albinus
2012-12-11 7:54 ` [PATCH] Added basic file system watching support Michael Albinus
2012-12-11 8:12 ` Eli Zaretskii
2012-12-11 8:19 ` Michael Albinus
2012-12-11 8:29 ` Eli Zaretskii
2012-12-11 8:44 ` Michael Albinus
2012-12-11 9:39 ` Eli Zaretskii
2012-12-11 10:15 ` Eli Zaretskii
2012-12-11 10:38 ` Michael Albinus
2012-12-11 10:24 ` Michael Albinus
2012-12-11 12:51 ` Eli Zaretskii
2012-12-11 13:17 ` Michael Albinus
2012-12-11 13:23 ` Eli Zaretskii
2012-12-12 1:09 ` Leo
2012-12-12 3:57 ` Eli Zaretskii
2013-01-07 11:33 ` Michael Albinus
2013-01-07 15:57 ` Eli Zaretskii
2013-01-07 16:00 ` Michael Albinus
2013-01-07 20:26 ` Stefan Monnier
2013-01-08 7:44 ` Michael Albinus
2011-06-06 15:14 ` [PATCH updated] Support for filesystem watching (inotify) Stefan Monnier
2011-06-06 16:21 ` Rüdiger Sonderfeld
2012-09-18 11:50 ` [PATCH] " Leo
2012-09-26 12:15 ` Rüdiger Sonderfeld
2012-09-26 17:52 ` Stefan Monnier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8762olmk6y.fsf@ambire.localdomain \
--to=ttn@gnuvola.org \
--cc=emacs-devel@gnu.org \
--cc=ruediger@c-plusplus.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.