diff --git a/extra/curses/curses.factor b/extra/curses/curses.factor index 364d4fae32..895fa52eb7 100644 --- a/extra/curses/curses.factor +++ b/extra/curses/curses.factor @@ -188,15 +188,18 @@ M: curses-window dispose* ( window -- ) [ ffi:cbreak ] [ ffi:nocbreak ] if ] if curses-error ; -: apply-options ( window -- ) +: apply-window-options ( window -- ) { - [ [ cbreak>> ] [ raw>> ] bi set-cbreak/raw ] - [ echo>> [ ffi:echo ] [ ffi:noecho ] if curses-error ] [ [ ptr>> ] [ scrollok>> >BOOLEAN ] bi ffi:scrollok curses-error ] [ [ ptr>> ] [ leaveok>> >BOOLEAN ] bi ffi:leaveok curses-error ] [ [ ptr>> ] [ keypad>> >BOOLEAN ] bi ffi:keypad curses-error ] } cleave ; +: apply-global-options ( window -- ) + [ [ cbreak>> ] [ raw>> ] bi set-cbreak/raw ] + [ echo>> [ ffi:echo ] [ ffi:noecho ] if curses-error ] + bi ; + SYMBOL: n-registered-colors MEMO: register-color ( fg bg -- n ) @@ -220,7 +223,7 @@ PRIVATE> ] [ window-params ffi:newwin ] if* [ curses-error ] keep >>ptr &dispose - ] [ apply-options ] bi ; + ] [ apply-window-options ] bi ; : with-window ( window quot -- ) [ current-window ] dip with-variable ; inline @@ -230,9 +233,12 @@ PRIVATE> [ '[ ffi:initscr curses-pointer-error - >>ptr dup apply-options + >>ptr + [ apply-global-options ] [ apply-window-options ] [ ] tri + ffi:erase curses-error init-colors + _ with-window ] [ ffi:endwin curses-error ] [ ] cleanup ] with-destructors ; inline @@ -259,7 +265,7 @@ M: curses-terminal dispose init-terminal ffi:initscr curses-pointer-error drop dup ptr>> ffi:set_term curses-pointer-error drop - ] dip apply-options ; + ] dip [ apply-global-options ] [ apply-window-options ] bi ;