aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorMichael Albinus2015-11-15 17:45:32 +0000
committerMichael Albinus2015-11-25 15:07:11 +0100
commite95b309ae4f5fbdebdb7067daca9d091925047cf (patch)
treee2671f96cbc0e803ee927af06c3781eb03c52788 /lisp
parent41d9bd0c3b19d839b72fdd20e613cb6ab3b1b1f4 (diff)
downloademacs-e95b309ae4f5fbdebdb7067daca9d091925047cf.tar.gz
emacs-e95b309ae4f5fbdebdb7067daca9d091925047cf.zip
More work on kqueue
* lisp/filenotify.el (file-notify-callback): Handle also the `rename' event from kqueue. (file-notify-add-watch): Do not register an entry twice. * src/kqueue.c (kqueue_directory_listing): New function. (kqueue_generate_event): New argument FILE1. Adapt callees. (kqueue_compare_dir_list): Rewrite in order to make it more robust.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/filenotify.el21
1 files changed, 9 insertions, 12 deletions
diff --git a/lisp/filenotify.el b/lisp/filenotify.el
index f7c97569825..23029427760 100644
--- a/lisp/filenotify.el
+++ b/lisp/filenotify.el
@@ -189,7 +189,7 @@ EVENT is the cadr of the event in `file-notify-handle-event'
189 ((memq action 189 ((memq action
190 '(attribute-changed changed created deleted renamed)) 190 '(attribute-changed changed created deleted renamed))
191 action) 191 action)
192 ((eq action 'moved) 192 ((memq action '(moved rename))
193 (setq file1 (file-notify--event-file1-name event)) 193 (setq file1 (file-notify--event-file1-name event))
194 'renamed) 194 'renamed)
195 ((eq action 'ignored) 195 ((eq action 'ignored)
@@ -329,7 +329,7 @@ FILE is the name of the file whose event is being reported."
329 (if (file-directory-p file) 329 (if (file-directory-p file)
330 file 330 file
331 (file-name-directory file)))) 331 (file-name-directory file))))
332 desc func l-flags registered) 332 desc func l-flags registered entry)
333 333
334 (unless (file-directory-p dir) 334 (unless (file-directory-p dir)
335 (signal 'file-notify-error `("Directory does not exist" ,dir))) 335 (signal 'file-notify-error `("Directory does not exist" ,dir)))
@@ -378,18 +378,15 @@ FILE is the name of the file whose event is being reported."
378 (setq desc (funcall func dir l-flags 'file-notify-callback))) 378 (setq desc (funcall func dir l-flags 'file-notify-callback)))
379 379
380 ;; Modify `file-notify-descriptors'. 380 ;; Modify `file-notify-descriptors'.
381 (setq registered (gethash desc file-notify-descriptors)) 381 (setq file (unless (file-directory-p file) (file-name-nondirectory file))
382 (puthash 382 desc (file-notify--descriptor desc file)
383 desc 383 registered (gethash desc file-notify-descriptors)
384 `(,dir 384 entry `(,file . ,callback))
385 (,(unless (file-directory-p file) (file-name-nondirectory file)) 385 (unless (member entry (cdr registered))
386 . ,callback) 386 (puthash desc `(,dir ,entry . ,(cdr registered)) file-notify-descriptors))
387 . ,(cdr registered))
388 file-notify-descriptors)
389 387
390 ;; Return descriptor. 388 ;; Return descriptor.
391 (file-notify--descriptor 389 desc))
392 desc (unless (file-directory-p file) (file-name-nondirectory file)))))
393 390
394(defun file-notify-rm-watch (descriptor) 391(defun file-notify-rm-watch (descriptor)
395 "Remove an existing watch specified by its DESCRIPTOR. 392 "Remove an existing watch specified by its DESCRIPTOR.