悬停翻译有个bug
yoocoos opened this issue · 27 comments
BUG:
这个BUG会出现在VSCode1.73以上版本
当鼠标在框选任何可以触发悬停翻译的内容时,有概率出现聚焦到悬停提示上,导致不能继续输入或更改代码,必须手动取消一下悬停提示
BUG复现:
用鼠标按住左键框选可以悬停翻译的内容,不要放开左键
在框选的过程中鼠标还在移动悬停提示就会触发(如果关闭这个插件,鼠标还在移动框选的时候是不会出现悬停提示的)
这时候触发悬停提示就有很大概率聚焦到悬停提示上面,导致vscode主窗口无法继续输入
建议:
改成跟vscode默认一样,鼠标还在移动框选的时候,悬停提示不要触发,停下了再触发
同样被这个问题困扰,经过测试,VS code的悬停延时设置针对这个问题无效,禁用插件后恢复正常
同样被这个问题困扰,经过测试,VS code的悬停延时设置针对这个问题无效,禁用插件后恢复正常
目前我只能想要使用这个插件就必须勇哥1.72版本的vscode,这个版本不会有冲突
通过鼠标选中内容的时候, 由于鼠标不会在选中区域,不会弹出 Hover 框,达不到“划词翻译”的效果。 所以在选择内容过程中,相隔300ms后,或主动显示hover内容。 普通情况下不会出现问题,目前看,在选择内容后,已弹出hover再移动到 选中区域,或重复hover响应,焦点就变到了hover浮层上,主框就不能输入了。。之前的版本没问题,应该是近期vscode的默认调整。
目前没有很完美的方法,如果直接移除该逻辑,划词翻译效果就没了。
通过鼠标选中内容的时候, 由于鼠标不会在选中区域,不会弹出 Hover 框,达不到“划词翻译”的效果。 所以在选择内容过程中,相隔300ms后,或主动显示hover内容。 普通情况下不会出现问题,目前看,在选择内容后,已弹出hover再移动到 选中区域,或重复hover响应,焦点就变到了hover浮层上,主框就不能输入了。。之前的版本没问题,应该是近期vscode的默认调整。
目前没有很完美的方法,如果直接移除该逻辑,划词翻译效果就没了。
vscode默认应该是松开鼠标才开始计时300ms,能否取消主动显示的逻辑,对于需要翻译的词,通过主动在上面停顿一下光标来实现。或者给主动显示hover内容加一个开关,因为通常来说需要翻译的情况不会很多。
我用的Wisen-Translate反而没有问题。。。
这个就有。。
这个问题影响很大,每次复制一段代码然后想删除的时候,就总是失去焦点
我一般是双击单词,它就会弹出翻译
这个框有时会自动锁定焦点,有时不会,导致鼠标点到哪里都是无法取消这个弹窗
当前两个解决方案:
- 将当前可视区域通过滚动放方式移动到编辑器边缘
- 按下ESC键
这样弹窗才会掉,前者还好,但是会改变编辑位置,后者使编辑器失去焦点,必须再用鼠标点一次上次要编辑的位置 才可以继续输入内容
预期:选择了单词悬停进行翻译,除非鼠标点击弹窗(或者其他方式)定焦,否则当鼠标指针移出弹窗,翻译弹窗即消失
问题场景:有时再给别人演示代码时,双击选中一个单词,就有弹窗翻译挡住,并且鼠标移走,弹窗依旧还在,禁用插件需要重新启动VSCode,编辑器的很多状态,历史记录等等没了
感谢反馈,非常详细。参考你给的方案,近期优化下。
@intellism 这个问题根源来自 vscode 1.73.0 变更了 editor.action.showHover
原来的行为: microsoft/vscode#176057
由:显示 Hover
变成: 没有 Hover 时创建并显示 Hover,Hover 可见时则 Focus Hover
变更的原因是为了:通过 command+ i/k
(即editor.action.showHover
) 激活 Hover
时,默认 focus Hover
,使其可以通过上下按键滚动查看 Hover
内容。
我想到 3 种解决方法:
- 在
commands.executeCommand('editor.action.showHover')
之前判断 editor 是否有 Hover 显示,如果已经显示过,则不再调用 - 在
commands.executeCommand('editor.action.showHover')
之后重新 focus editor,将焦点从 Hover 上收回 - VS Code 改回
commands.executeCommand('editor.action.showHover')
原来的行为,或者提供参数可以控制(默认原始行为)
经过研究,我并没有找到上述方案1,2的实现方法,无法从插件侧解决这个问题~
@intellism 这个问题根源来自 vscode 1.73.0 变更了
editor.action.showHover
原来的行为: microsoft/vscode#176057由:
显示 Hover
变成:没有 Hover 时创建并显示 Hover,Hover 可见时则 Focus Hover
变更的原因是为了:通过
command+ i/k
(即editor.action.showHover
) 激活Hover
时,默认 focusHover
,使其可以通过上下按键滚动查看Hover
内容。
- Determine whether the editor has Hover displayed before
commands.executeCommand('editor.action.showHover')
. If it has been displayed, it will not be called again.- Re-focus the editor after
commands.executeCommand('editor.action.showHover')
to take back the focus from Hover- Change VS Code back to the original behavior of
commands.executeCommand('editor.action.showHover')
, or provide parameters to control (default original behavior)After research, I have not found the implementation method of the above solutions 1 and 2, and cannot solve this problem from the plug-in side ~
Thank you for your analysis and solution. Option 3 is the simplest, but needs to be tested> @intellism 这个问题根源来自 vscode 1.73.0 变更了 editor.action.showHover
原来的行为: microsoft/vscode#176057
由:
显示 Hover
变成:没有 Hover 时创建并显示 Hover,Hover 可见时则 Focus Hover
变更的原因是为了:通过
command+ i/k
(即editor.action.showHover
) 激活Hover
时,默认 focusHover
,使其可以通过上下按键滚动查看Hover
内容。
- 在
commands.executeCommand('editor.action.showHover')
之前判断 editor 是否有 Hover 显示,如果已经显示过,则不再调用- 在
commands.executeCommand('editor.action.showHover')
之后重新 focus editor,将焦点从 Hover 上收回- VS Code 改回
commands.executeCommand('editor.action.showHover')
原来的行为,或者提供参数可以控制(默认原始行为)经过研究,我并没有找到上述方案1,2的实现方法,无法从插件侧解决这个问题~
谢谢分析并提供解决方案。 方案3是最简单的,但是,在选择文本的时候,鼠标没有hover到选中区域, “划词翻译” 就不生效了。 目前看方案2是有可能的,可以切换editor的 focus状态的,我尝试下。
嗯,方案3我周末给vscode提了个PR,看官方是否会通过合并了
PS: 方案2还需要注意还原到原来的selection,不然会丢失文本的选中状态,体验非常糟糕