diff --git a/basis/unix/ffi/ffi.factor b/basis/unix/ffi/ffi.factor index 3882f6fc80..10346cff2c 100644 --- a/basis/unix/ffi/ffi.factor +++ b/basis/unix/ffi/ffi.factor @@ -101,6 +101,7 @@ FUNCTION: uid_t getuid ; FUNCTION: uint htonl ( uint n ) ; FUNCTION: ushort htons ( ushort n ) ; ! FUNCTION: int issetugid ; +FUNCTION: int isatty ( int fildes ) ; FUNCTION: int ioctl ( int fd, ulong request, char* argp ) ; FUNCTION: int lchown ( char* path, uid_t owner, gid_t group ) ; FUNCTION: int listen ( int s, int backlog ) ; diff --git a/extra/curses/curses-tests.factor b/extra/curses/curses-tests.factor index 21463b207b..bd98a7aff1 100644 --- a/extra/curses/curses-tests.factor +++ b/extra/curses/curses-tests.factor @@ -14,5 +14,6 @@ IN: curses.tests 2000000 sleep ] with-curses ; -[ -] [ hello-curses ] unit-test +curses-ok? [ + [ ] [ hello-curses ] unit-test +] when diff --git a/extra/curses/curses.factor b/extra/curses/curses.factor index 69c6503aa2..dfb1b8672a 100644 --- a/extra/curses/curses.factor +++ b/extra/curses/curses.factor @@ -4,7 +4,7 @@ USING: accessors alien.c-types alien.strings assocs byte-arrays combinators continuations destructors fry io.encodings.8-bit io io.encodings.string io.encodings.utf8 kernel locals math namespaces prettyprint sequences classes.struct -strings threads curses.ffi ; +strings threads curses.ffi unix.ffi ; IN: curses SYMBOL: curses-windows @@ -19,6 +19,7 @@ ERROR: duplicate-window window ; ERROR: unnamed-window window ; ERROR: window-not-found window ; ERROR: curses-failed ; +ERROR: unsupported-curses-terminal ; : get-window ( string -- window ) dup curses-windows get at* @@ -28,7 +29,11 @@ ERROR: curses-failed ; : curses-error ( n -- ) ERR = [ curses-failed ] when ; +: curses-ok? ( -- ? ) + { 0 1 2 } [ isatty 0 = not ] all? ; + : with-curses ( quot -- ) + curses-ok? [ unsupported-curses-terminal ] unless H{ } clone curses-windows [ initscr curses-error [