From e1f3f5627436c75867de8ada549ae15e0f6b8ddc Mon Sep 17 00:00:00 2001 From: janbar Date: Fri, 14 Feb 2025 08:33:07 +0800 Subject: [PATCH] fix(vfox clink): clink coroutine execution failed (#410) In clink v1.7.8, when coroutine.resume(vfox_task) is used to resume the coroutine, the internal command cannot be executed successfully. --- internal/shell/clink_vfox.lua | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/internal/shell/clink_vfox.lua b/internal/shell/clink_vfox.lua index 8fc780d2..9ac53063 100644 --- a/internal/shell/clink_vfox.lua +++ b/internal/shell/clink_vfox.lua @@ -134,28 +134,27 @@ local vfox_setenv = function(str) end end +local vfox_filter = function() end local vfox_task = coroutine.create(function() os.setenv('__VFOX_PID', os.getpid()) + os.setenv('__VFOX_CURTMPPATH', nil) local vfox_activate = io.popen('vfox activate clink') for line in vfox_activate:lines() do vfox_setenv(line) end vfox_activate:close() - - local cleanup = coroutine.create(function() - os.execute('vfox env -c') - end) - coroutine.resume(cleanup) -end) -coroutine.resume(vfox_task) - -local vfox_prompt = clink.promptfilter(30) -function vfox_prompt:filter(prompt) - clink.promptcoroutine(function() + os.execute('vfox env -c') + vfox_filter = function() local env = io.popen('vfox env -s clink') for line in env:lines() do vfox_setenv(line) end env:close() - end) + end +end) +clink.runcoroutineuntilcomplete(vfox_task) + +local vfox_prompt = clink.promptfilter(30) +function vfox_prompt:filter() + clink.promptcoroutine(vfox_filter) end