在特定情况下,即使终端已停止,Vscode.Window.onDidCloseTerminal 也不会被调用,

jei2mxaa  于 3个月前  发布在  Vscode
关注(0)|答案(6)|浏览(54)

当所有扩展都被禁用时,这个问题是否会发生?:是/否

  • VS Code 版本:1.86.2 和 1.87.0
  • OS 版本:基于 WSL2 的 Ubuntu 20.02

在为 OCaml 编程语言的 VSCode IDE 插件准备一个补丁时发生了这个问题。
OCaml 的用户环境与 Python 非常相似,用户希望打开一个解释器窗口(称为 REPL),在其中运行一些代码并查看输出。
VSCode OCaml 插件的一个长期存在的问题是,在某些情况下,一旦其解释器终端窗口被关闭一次,就无法重新打开(ocamllabs/vscode-ocaml-platform#935)。
似乎这个问题与观察到的事实有关,即使使用 Ctrl+D 由用户关闭了 REPL 终端,出于某种原因 Vscode.Window.onDidCloseTerminal 也没有被调用。
当 VSCode OCaml 插件安装在 Ubuntu 20.02 的 WSL2 虚拟机上且 VSCode 远程连接到虚拟机时,Vscode.Window.onDidCloseTerminal 不会被调用。
当一切都在本地运行时(特别是 MacOS),Vscode.Window.onDidCloseTerminal 会被调用。
ocamllabs/vscode-ocaml-platform#1398 也有相关的补丁和讨论。
重现步骤:
我可以提供它的重现方法,但这可能有点冗长。
我想知道这是否是一个已知的问题,以及解决这个问题的典型方法是什么。

6tqwzwtp

6tqwzwtp1#

感谢您提出这个问题!看起来您可能正在使用旧版本的VS Code,最新稳定版本是1.87.0。请尝试升级到最新版本并检查此问题是否仍然存在。
快乐编码!

ltqd579y

ltqd579y2#

这个问题在1.87.0版本中仍然存在。

kgsdhlau

kgsdhlau3#

在WSL中,当终端关闭时,onDidCloseTerminal事件似乎不会触发。

uz75evzq

uz75evzq4#

我深入研究了这个问题,并意识到有一个重要的缺失条件,需要满足这个条件才能重现这个情况:移动一个终端窗格,就像下面的视频一样。
20240304-143204.mp4
(请忽略背景音乐和水印)
请注意,第二次运行 OCaml: Open REPL 不起作用。这是因为关闭第一个终端没有调用 Vscode.Window.onDidCloseTerminal ,从而在内部阻止了第二个终端的创建。
我在使用 WSL2 上的 Ubuntu 时观察到了这一点。@ulugbekna 你是否想检查一下这是否也发生在你本地的 Mac 机器上?

w7t8yxp5

w7t8yxp55#

我尝试了另一个扩展 https://github.com/monadius/vscode-hol-light ,它也存在类似的问题。
https://github.com/monadius/vscode-hol-light/blob/50ea36724a66c652f3b8b864a6d002610b211e60/src/extension.ts#L39-L43
如果新创建的终端被移动到单独的窗格(如上面的视频所示)并关闭, onDidCloseTerminal 将不会被调用。

fykwrbwg

fykwrbwg6#

我无法在macOS上复现这个问题,一定是与WSL相关的问题。

相关问题