Open spiedeman opened 9 months ago
那你别加 -focus=0 啊
那你别加 -focus=0 啊
倒也是,但感觉不如加个判断条件,pos=floaterm
时,强制 focus=1
。
原本应该在另一个仓库asynctask
下提问的,不过发现这边没法删除issue也就算了。主要是 task.ini
文件里并未提供 focus
选项,每次想切换 pos
的时候,还要额外修改 vimrc
里的配置,甚是麻烦。
而且,pos=floaterm
时,wintype=float
是写死了的,vimrc
和task.ini
配置中均未提供自定义选项。因此,在插件里做条件判断if get(a:opts, 'focus', 1)==0
来提供自动关闭结果窗口的功能,根本不起作用。至少在vim
下是这样,neovim
不太熟悉,不敢说。
tasks.ini 中可以写 focus 的,看:
https://github.com/skywind3000/asynctasks.vim/wiki/Task-Config#specification
看来是我没发现。
但好像发现一个新问题:没有匹配的自动命令:User AsyncRunInit
。
因为用terminal
输出时,貌似不能配置 CursorMoved
事件发生时自动关闭结果窗口,而用floaterm
的话,得进插件里改动floaterm.vim
,将wintype=float
改为wintype=split
。所以想自己写几个函数配合 autocmd
来实现,避免改动插件源码。结果搞了半天,似乎 AsyncRunPre
和 AsyncRunStop
被移除了?
只有基于 quickfix 的任务才支持这几个 autocmd,其他终端类,不支持,你可以自己添加终端相关 autocmd
只有基于 quickfix 的任务才支持这几个 autocmd,其他终端类,不支持,你可以自己添加终端相关 autocmd
原来如此。
使用
asynctask.vim
时遇到的问题: 自定义runner: floaterm
的wintype
类型为float
,因此popup
窗口弹出后始终会获得焦点,而get(a:opts, 'focus', 1) == 0
条件仍然为真,导致运行noa wincmd p
命令时会出现错误:不允许在弹出窗口中使用。 若wintye=split
,则运行良好。一点不成熟的小建议:若用
popup
窗口显示任务运行结果,可不必调用内置terminal
,直接用job
运行任务,通过回调函数将运行结果显示到popup
窗口中,可避免窗口焦点无法切换的问题。