在開(kāi)發(fā) vscode 插件時(shí),如果你的插件存在多種類型的日志輸出予权,并且你可能需要知道當(dāng)前選中的輸出通道名续崖,可以嘗試下這種方式:
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;
}
其中,PUBLISHER
和 EXTENSION_NAME
分別對(duì)應(yīng)的是 package.json
中的 publisher
和 name
屬性的值鼻百,OUTPUT_CHANNEL_NAME
對(duì)應(yīng)的是你使用 vscode.window.createOutputChannel
方法創(chuàng)建輸出通道時(shí)指定的輸出通道名笛钝。
不僅如此质况,如果你還想監(jiān)聽(tīng)輸出面板日志的切換,但同樣由于 vscode 本身并沒(méi)有提供直接的 api玻靡,我也沒(méi)找到更好的實(shí)現(xiàn)方式,有需要的話可以暫時(shí)參考這樣實(shí)現(xiàn):
context.subscriptions.push(
vscode.window.onDidChangeVisibleTextEditors(() => {
// 當(dāng)存在多個(gè) visibleTextEditor 時(shí)中贝,該回調(diào)會(huì)被執(zhí)行多次囤捻,每次獲取到的 visibleTextEditors 會(huì)按順序遞增
})
);
這里要注意,TextEditors
不僅僅包含所有的輸出通道邻寿,你打開(kāi)的每個(gè)文件編輯區(qū)域也都屬于 TextEditor
蝎土,它們的打開(kāi)、關(guān)閉绣否、切換都會(huì)觸發(fā)該回調(diào)誊涯。另外,當(dāng)存在多個(gè)可見(jiàn)的 TextEditor
時(shí)蒜撮,該回調(diào)會(huì)被執(zhí)行多次暴构,且每次獲取到的 visibleTextEditors
會(huì)按順序遞增。因此段磨,你可能還需要結(jié)合上面示例中的 getVisibleOutputChannel
方法一起去做相關(guān)業(yè)務(wù)邏輯的處理取逾。