如何在侦听器中中断递归字

How to interrupt a Recursive Word in the Listener

我正在玩文件系统更改监视器,并从 Factor manual

中输入了这个示例
: watch-loop ( monitor -- )
    dup next-change path>> print flush watch-loop ;

: watch-directory ( path -- )
    [ t [ watch-loop ] with-monitor ] with-monitors ;

然后用

调用它
"/tmp" watch-directory

这很好用,文件系统开始发生变化。但我无法阻止它。 Ctrl-C 似乎在 Listener 中不起作用,它甚至在点击 "Restart Listener" 按钮时仍然存在。点击监听器的 "End" 按钮是终止监听的唯一方法吗?我知道监视器由 with-monitor 组合器处理,所以也许只是 watch-loop 是递归的?!

我在 factor-talk(Factor 邮件列表)上无意中发现了这个最近的话题,并且正在整理我从那里收集的内容。如果有人有更正或修正,请编辑。

  1. 运行 命令行上的侦听器,而不是 GUI 中的侦听器:factor -run=listener。这个应该对 Ctrl-C 做出反应。这会将您带到调试器 shell,您可以在其中键入 t 以异常取消。这里的一个问题似乎是 Ctrl-C 可能会在您的代码的子线程中(传递地)被捕获,从而中断错误的事情。

  2. 在 GUI 中,启动第二个侦听器。那么你可以

    2.1。挂起第一个运行递归词的监听器。 (如何?)

    2.1。注册键盘挂钩的建议似乎不起作用 as control keys are not forwarded to the listener.