intellism/vscode-comment-translate

悬停翻译有个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键

这样弹窗才会掉,前者还好,但是会改变编辑位置,后者使编辑器失去焦点,必须再用鼠标点一次上次要编辑的位置
才可以继续输入内容

image

预期:选择了单词悬停进行翻译,除非鼠标点击弹窗(或者其他方式)定焦,否则当鼠标指针移出弹窗,翻译弹窗即消失

问题场景:有时再给别人演示代码时,双击选中一个单词,就有弹窗翻译挡住,并且鼠标移走,弹窗依旧还在,禁用插件需要重新启动VSCode,编辑器的很多状态,历史记录等等没了

我一般是双击单词,它就会弹出翻译

这个框有时会自动锁定焦点,有时不会,导致鼠标点到哪里都是无法取消这个弹窗

当前两个解决方案:

  • 将当前可视区域通过滚动放方式移动到编辑器边缘
  • 按下ESC键

这样弹窗才会掉,前者还好,但是会改变编辑位置,后者使编辑器失去焦点,必须再用鼠标点一次上次要编辑的位置 才可以继续输入内容

image

预期:选择了单词悬停进行翻译,除非鼠标点击弹窗(或者其他方式)定焦,否则当鼠标指针移出弹窗,翻译弹窗即消失

问题场景:有时再给别人演示代码时,双击选中一个单词,就有弹窗翻译挡住,并且鼠标移走,弹窗依旧还在,禁用插件需要重新启动VSCode,编辑器的很多状态,历史记录等等没了

感谢反馈,非常详细。参考你给的方案,近期优化下。

我再补充一下复现:
Python 代码调试时,处于断点中,双击单词选中,然后会弹出翻译,此时鼠标停留超过 1-2 秒,弹窗依旧卡在哪里,弹窗也没有被 focus 情况下
image

@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 种解决方法:

  1. commands.executeCommand('editor.action.showHover') 之前判断 editor 是否有 Hover 显示,如果已经显示过,则不再调用
  2. commands.executeCommand('editor.action.showHover') 之后重新 focus editor,将焦点从 Hover 上收回
  3. 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 时,默认 focus Hover,使其可以通过上下按键滚动查看 Hover 内容。

图片 图片
I think of 3 solutions:

  1. Determine whether the editor has Hover displayed before commands.executeCommand('editor.action.showHover'). If it has been displayed, it will not be called again.
  2. Re-focus the editor after commands.executeCommand('editor.action.showHover') to take back the focus from Hover
  3. 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 时,默认 focus Hover,使其可以通过上下按键滚动查看 Hover 内容。

图片 图片
我想到 3 种解决方法:

  1. commands.executeCommand('editor.action.showHover') 之前判断 editor 是否有 Hover 显示,如果已经显示过,则不再调用
  2. commands.executeCommand('editor.action.showHover') 之后重新 focus editor,将焦点从 Hover 上收回
  3. VS Code 改回 commands.executeCommand('editor.action.showHover') 原来的行为,或者提供参数可以控制(默认原始行为)

经过研究,我并没有找到上述方案1,2的实现方法,无法从插件侧解决这个问题~

谢谢分析并提供解决方案。 方案3是最简单的,但是,在选择文本的时候,鼠标没有hover到选中区域, “划词翻译” 就不生效了。 目前看方案2是有可能的,可以切换editor的 focus状态的,我尝试下。

嗯,方案3我周末给vscode提了个PR,看官方是否会通过合并了

PS: 方案2还需要注意还原到原来的selection,不然会丢失文本的选中状态,体验非常糟糕