SYMBOL: listener-hook
SYMBOL: datastack-hook
+SYMBOL: error-hook
" " listener-prompt set-global
+[ drop terpri debug-help ] error-hook set-global
: bye ( -- ) quit-flag on ;
: read-multiline ( -- quot ? )
[ f depth (read-multiline) >r reverse r> ] with-parser ;
+: listen-try
+ [
+ print-error error-continuation get error-hook get call
+ ] recover ;
+
: listen ( -- )
listener-hook get call
listener-prompt get write flush
- [ read-multiline [ call ] [ bye ] if ] try ;
+ [ read-multiline [ call ] [ bye ] if ]
+ listen-try ;
: (listener) ( -- )
quit-flag get [ quit-flag off ] [ listen (listener) ] if ;
IN: gadgets-listener
USING: arrays gadgets gadgets-editors gadgets-labels
gadgets-layouts gadgets-panes gadgets-scrolling
-gadgets-splitters gadgets-theme generic hashtables
-io jedit kernel listener lists math
-namespaces parser prettyprint sequences threads words ;
+gadgets-splitters gadgets-theme generic hashtables io jedit
+kernel listener lists math namespaces parser prettyprint
+sequences styles threads words ;
TUPLE: listener-gadget pane stack ;
] keep
listener-gadget-pane word-completion ;
+: ui-error-hook ( error -- )
+ terpri H{ { font-style bold } } [
+ "Debug this error" swap simple-object terpri
+ ] with-style ;
+
: listener-thread ( listener -- )
dup listener-gadget-pane [
[ ui-listener-hook ] curry listener-hook set
+ [ ui-error-hook ] error-hook set
print-banner listener
] with-stream* ;