获取当前选中的 vscode 输出面板通道名

在开发 vscode 插件时,如果你的插件存在多种类型的日志输出,并且你可能需要知道当前选中的输出通道名,可以尝试下这种方式:

import * as vscode from "vscode";

import { PUBLISHER, EXTENSION_NAME, OUTPUT_CHANNEL_NAME } from "src/constants";

export function getVisibleOutputChannel() {
  const visibleTextEditors = vscode.window.visibleTextEditors;

  const visibleOutputChannel = visibleTextEditors.find(({ document }) => {
    return (
      document.uri.scheme === "output" &&
      document.uri.path.startsWith(
        `${PUBLISHER}.${EXTENSION_NAME}.${OUTPUT_CHANNEL_NAME}`
      )
    );
  });

  return visibleOutputChannel?.document.uri.path;
}

其中,PUBLISHEREXTENSION_NAME 分别对应的是 package.json 中的 publishername 属性的值,OUTPUT_CHANNEL_NAME 对应的是你使用 vscode.window.createOutputChannel 方法创建输出通道时指定的输出通道名。

不仅如此,如果你还想监听输出面板日志的切换,但同样由于 vscode 本身并没有提供直接的 api,我也没找到更好的实现方式,有需要的话可以暂时参考这样实现:

context.subscriptions.push(
  vscode.window.onDidChangeVisibleTextEditors(() => {
    // 当存在多个 visibleTextEditor 时,该回调会被执行多次,每次获取到的 visibleTextEditors 会按顺序递增
  })
);

这里要注意,TextEditors 不仅仅包含所有的输出通道,你打开的每个文件编辑区域也都属于 TextEditor,它们的打开、关闭、切换都会触发该回调。另外,当存在多个可见的 TextEditor 时,该回调会被执行多次,且每次获取到的 visibleTextEditors 会按顺序递增。因此,你可能还需要结合上面示例中的 getVisibleOutputChannel 方法一起去做相关业务逻辑的处理。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容