Do a runloop so that monitors work in terminal
parent
1f759a7b2d
commit
8460780f61
|
@ -1,8 +1,9 @@
|
||||||
! Copyright (C) 2006, 2007 Slava Pestov
|
! Copyright (C) 2006, 2007 Slava Pestov
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien io kernel namespaces core-foundation cocoa.messages
|
USING: alien io kernel namespaces core-foundation
|
||||||
cocoa cocoa.classes cocoa.runtime sequences threads
|
core-foundation.run-loop cocoa.messages cocoa cocoa.classes
|
||||||
debugger init inspector kernel.private ;
|
cocoa.runtime sequences threads debugger init inspector
|
||||||
|
kernel.private ;
|
||||||
IN: cocoa.application
|
IN: cocoa.application
|
||||||
|
|
||||||
: <NSString> ( str -- alien ) <CFString> -> autorelease ;
|
: <NSString> ( str -- alien ) <CFString> -> autorelease ;
|
||||||
|
@ -21,8 +22,6 @@ IN: cocoa.application
|
||||||
: with-cocoa ( quot -- )
|
: with-cocoa ( quot -- )
|
||||||
[ NSApp drop call ] with-autorelease-pool ;
|
[ NSApp drop call ] with-autorelease-pool ;
|
||||||
|
|
||||||
: CFRunLoopDefaultMode "kCFRunLoopDefaultMode" <NSString> ;
|
|
||||||
|
|
||||||
: next-event ( app -- event )
|
: next-event ( app -- event )
|
||||||
0 f CFRunLoopDefaultMode 1
|
0 f CFRunLoopDefaultMode 1
|
||||||
-> nextEventMatchingMask:untilDate:inMode:dequeue: ;
|
-> nextEventMatchingMask:untilDate:inMode:dequeue: ;
|
||||||
|
|
|
@ -9,9 +9,9 @@ TYPEDEF: void* CFBundleRef
|
||||||
TYPEDEF: void* CFStringRef
|
TYPEDEF: void* CFStringRef
|
||||||
TYPEDEF: void* CFURLRef
|
TYPEDEF: void* CFURLRef
|
||||||
TYPEDEF: void* CFUUIDRef
|
TYPEDEF: void* CFUUIDRef
|
||||||
TYPEDEF: void* CFRunLoopRef
|
|
||||||
TYPEDEF: bool Boolean
|
TYPEDEF: bool Boolean
|
||||||
TYPEDEF: int CFIndex
|
TYPEDEF: int CFIndex
|
||||||
|
TYPEDEF: int SInt32
|
||||||
TYPEDEF: double CFTimeInterval
|
TYPEDEF: double CFTimeInterval
|
||||||
TYPEDEF: double CFAbsoluteTime
|
TYPEDEF: double CFAbsoluteTime
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
! Copyright (C) 2008 Slava Pestov
|
! Copyright (C) 2008 Slava Pestov
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien alien.c-types alien.syntax kernel math sequences
|
USING: alien alien.c-types alien.syntax kernel math sequences
|
||||||
namespaces assocs init continuations core-foundation ;
|
namespaces assocs init accessors continuations combinators
|
||||||
|
core-foundation core-foundation.run-loop ;
|
||||||
IN: core-foundation.fsevents
|
IN: core-foundation.fsevents
|
||||||
|
|
||||||
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
|
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
|
||||||
|
@ -182,11 +183,11 @@ SYMBOL: event-stream-callbacks
|
||||||
}
|
}
|
||||||
"cdecl" [
|
"cdecl" [
|
||||||
[ >event-triple ] 3curry map
|
[ >event-triple ] 3curry map
|
||||||
swap event-stream-callbacks get at call
|
swap event-stream-callbacks get at
|
||||||
drop
|
dup [ call drop ] [ 3drop ] if
|
||||||
] alien-callback ;
|
] alien-callback ;
|
||||||
|
|
||||||
TUPLE: event-stream info handle ;
|
TUPLE: event-stream info handle closed ;
|
||||||
|
|
||||||
: <event-stream> ( quot paths latency flags -- event-stream )
|
: <event-stream> ( quot paths latency flags -- event-stream )
|
||||||
>r >r >r
|
>r >r >r
|
||||||
|
@ -194,9 +195,15 @@ TUPLE: event-stream info handle ;
|
||||||
>r master-event-source-callback r>
|
>r master-event-source-callback r>
|
||||||
r> r> r> <FSEventStream>
|
r> r> r> <FSEventStream>
|
||||||
dup enable-event-stream
|
dup enable-event-stream
|
||||||
event-stream construct-boa ;
|
f event-stream construct-boa ;
|
||||||
|
|
||||||
M: event-stream dispose
|
M: event-stream dispose
|
||||||
dup event-stream-info remove-event-source-callback
|
dup closed>> [ drop ] [
|
||||||
event-stream-handle dup disable-event-stream
|
t >>closed
|
||||||
FSEventStreamRelease ;
|
{
|
||||||
|
[ info>> remove-event-source-callback ]
|
||||||
|
[ handle>> disable-event-stream ]
|
||||||
|
[ handle>> FSEventStreamInvalidate ]
|
||||||
|
[ handle>> FSEventStreamRelease ]
|
||||||
|
} cleave
|
||||||
|
] if ;
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
! Copyright (C) 2008 Slava Pestov
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: alien.syntax kernel threads init
|
||||||
|
cocoa.application core-foundation ;
|
||||||
|
IN: core-foundation.run-loop
|
||||||
|
|
||||||
|
: kCFRunLoopRunFinished 1 ; inline
|
||||||
|
: kCFRunLoopRunStopped 2 ; inline
|
||||||
|
: kCFRunLoopRunTimedOut 3 ; inline
|
||||||
|
: kCFRunLoopRunHandledSource 4 ; inline
|
||||||
|
|
||||||
|
TYPEDEF: void* CFRunLoopRef
|
||||||
|
|
||||||
|
FUNCTION: SInt32 CFRunLoopRunInMode (
|
||||||
|
CFStringRef mode,
|
||||||
|
CFTimeInterval seconds,
|
||||||
|
Boolean returnAfterSourceHandled
|
||||||
|
) ;
|
||||||
|
|
||||||
|
: CFRunLoopDefaultMode "kCFRunLoopDefaultMode" <NSString> ;
|
||||||
|
|
||||||
|
: run-loop-thread ( -- )
|
||||||
|
CFRunLoopDefaultMode 0 f CFRunLoopRunInMode
|
||||||
|
kCFRunLoopRunHandledSource = [ 1000 sleep ] unless
|
||||||
|
run-loop-thread ;
|
||||||
|
|
||||||
|
: start-run-loop-thread ( -- )
|
||||||
|
[ run-loop-thread t ] "CFRunLoop dispatcher" spawn-server drop ;
|
||||||
|
|
||||||
|
[ start-run-loop-thread ] "core-foundation.run-loop" add-init-hook
|
|
@ -75,13 +75,13 @@ os { winnt linux macosx } member? [
|
||||||
|
|
||||||
[ ] [ "monitor-test/xyz/test.txt" temp-file touch-file ] unit-test
|
[ ] [ "monitor-test/xyz/test.txt" temp-file touch-file ] unit-test
|
||||||
|
|
||||||
[ ] [ "c1" get 5 seconds await-timeout ] unit-test
|
[ ] [ "c1" get 15 seconds await-timeout ] unit-test
|
||||||
|
|
||||||
[ ] [ "monitor-test/subdir/blah/yxy" temp-file make-directories ] unit-test
|
[ ] [ "monitor-test/subdir/blah/yxy" temp-file make-directories ] unit-test
|
||||||
|
|
||||||
[ ] [ "monitor-test/subdir/blah/yxy/test.txt" temp-file touch-file ] unit-test
|
[ ] [ "monitor-test/subdir/blah/yxy/test.txt" temp-file touch-file ] unit-test
|
||||||
|
|
||||||
[ ] [ "c2" get 5 seconds await-timeout ] unit-test
|
[ ] [ "c2" get 15 seconds await-timeout ] unit-test
|
||||||
|
|
||||||
! Dispose twice
|
! Dispose twice
|
||||||
[ ] [ "m" get dispose ] unit-test
|
[ ] [ "m" get dispose ] unit-test
|
||||||
|
|
Loading…
Reference in New Issue