Node.js 使用自定义节点脚本作为shell创建Visual Studio代码集成终端
我正在开发一个VisualStudio代码扩展,希望在其中创建一个终端,该终端可以访问自定义shell。我有一个Node.js脚本(Node.js 使用自定义节点脚本作为shell创建Visual Studio代码集成终端,node.js,visual-studio-code,electron,vscode-extensions,Node.js,Visual Studio Code,Electron,Vscode Extensions,我正在开发一个VisualStudio代码扩展,希望在其中创建一个终端,该终端可以访问自定义shell。我有一个Node.js脚本(.js文件),它实现了这个shell现在,我正在尝试使用扩展中的Code的createTerminal方法来启动一个终端,该终端使用Node.js脚本作为外壳。 我不能直接将shellPath设置为我的js文件,因为我不能保证用户安装了Node.js,系统将使用Node.js运行这些文件,也不能保证安装了哪个版本的Node。我需要能够指出一个普遍理解的二进制文件,它
.js
文件),它实现了这个shell现在,我正在尝试使用扩展中的Code的createTerminal
方法来启动一个终端,该终端使用Node.js脚本作为外壳。
我不能直接将shellPath
设置为我的js
文件,因为我不能保证用户安装了Node.js,系统将使用Node.js运行这些文件,也不能保证安装了哪个版本的Node。我需要能够指出一个普遍理解的二进制文件,它可以处理这个文件。粗略地说,我想这样做:
let terminal = vscode.window.createTerminal({
name: "My terminal",
shellPath: 'node', // Use the Node.js executable as the target
shellArgs: [path.join(__dirname, 'my-shell-wrapper.js')] // Tell Node to run my shell
});
terminal.show();
我怎样才能做到这一点?是否有一个可执行文件随附代码,我可以指向它运行节点脚本?或者我还缺少另一种机制吗?VSCode现在(在过去一年左右)可以选择为终端指定自定义行为,而不仅仅是底层shell可执行文件。有一个超负荷的需要;它有一个pty
属性,允许您指定用于读取和写入终端的自定义处理程序。从他们的:
const writeEmitter=new vscode.EventEmitter();
常数pty:vscode.Pseudoterminal={
onDidWrite:writeEmitter.event,
打开:()=>{},
关闭:()=>{},
handleInput:data=>writeEmitter.fire(数据=='\r'?'\r\n':数据)
};
createTerminal({name:'localecho',pty});
这可用于实现任意终端交互
const writeEmitter = new vscode.EventEmitter<string>();
const pty: vscode.Pseudoterminal = {
onDidWrite: writeEmitter.event,
open: () => {},
close: () => {},
handleInput: data => writeEmitter.fire(data === '\r' ? '\r\n' : data)
};
vscode.window.createTerminal({ name: 'Local echo', pty });