skywind3000/asyncrun.vim

runner为floaterm时出现错误:不允许在弹出窗口中使用

Opened this issue · 7 comments

使用 asynctask.vim 时遇到的问题:
自定义 runner: floatermwintype 类型为 float,因此 popup 窗口弹出后始终会获得焦点,而
get(a:opts, 'focus', 1) == 0 条件仍然为真,导致运行 noa wincmd p 命令时会出现错误:不允许在弹出窗口中使用。
wintye=split,则运行良好。

一点不成熟的小建议:若用 popup 窗口显示任务运行结果,可不必调用内置 terminal,直接用 job 运行任务,通过回调函数将运行结果显示到 popup 窗口中,可避免窗口焦点无法切换的问题。

截图_2023-11-24_23-09-38

那你别加 -focus=0 啊

那你别加 -focus=0 啊

倒也是,但感觉不如加个判断条件,pos=floaterm时,强制 focus=1
原本应该在另一个仓库asynctask下提问的,不过发现这边没法删除issue也就算了。主要是 task.ini文件里并未提供 focus选项,每次想切换 pos 的时候,还要额外修改 vimrc里的配置,甚是麻烦。

而且,pos=floaterm 时,wintype=float是写死了的,vimrctask.ini配置中均未提供自定义选项。因此,在插件里做条件判断if get(a:opts, 'focus', 1)==0 来提供自动关闭结果窗口的功能,根本不起作用。至少在vim下是这样,neovim不太熟悉,不敢说。

看来是我没发现。
但好像发现一个新问题:没有匹配的自动命令:User AsyncRunInit
因为用terminal输出时,貌似不能配置 CursorMoved 事件发生时自动关闭结果窗口,而用floaterm的话,得进插件里改动floaterm.vim,将wintype=float改为wintype=split。所以想自己写几个函数配合 autocmd 来实现,避免改动插件源码。结果搞了半天,似乎 AsyncRunPreAsyncRunStop 被移除了?

截图_2023-11-25_22-19-23

只有基于 quickfix 的任务才支持这几个 autocmd,其他终端类,不支持,你可以自己添加终端相关 autocmd

只有基于 quickfix 的任务才支持这几个 autocmd,其他终端类,不支持,你可以自己添加终端相关 autocmd

原来如此。