如何将 xterm.js(in electron) 连接到真正的工作命令提示符?
How do I connect xterm.js(in electron) to a real working command prompt?
我把自己挖进了一个很深的兔子洞,试图找出标题的意思。如果你对这个问题是什么感到困惑,我会给出更详细的解释:你见过 VSCode 终端吗?还是总站?好吧,我想做那些应用程序做的事情。我有一个电子应用程序,为了方便用户,我想在其中包含某种命令提示符。我查看了 xterm.js,但我只能找到 SSH 之类的示例,而不是直接 link 到系统上托管的控制台。 我想问的是如何将 xterm.js(在 electron 中)连接到实际工作的命令提示符? 我见过能够与 cmd.exe 交互的程序例如 Windows 终端。我将以它为例。
Image taken from process hacker
在所附的照片中,您可以看到三个过程。 WindowsTerminal.exe、OpenConsole.exe 和 cmd.exe。在深入研究了 Windows 终端的源代码之后,我可以看到 OpenConsole.exe 从您创建的每个 cmd 实例开始。所以我假设这是与 cmd.exe 交互的程序。现在我知道 Windows 终端是使用 UWP 制作的,但你可以看到类似的事情发生 with VSCode(我打开了一堆终端来演示)
这是另一个 post,有一个 similar question,但没有答案。我希望这个能引起一些关注。
所以如果你能回答,谢谢。如果您有点偏离主题,请记住我的问题:如何将 xterm.js(in electron) 连接到实际工作的命令提示符?
对不起,如果你不能理解我的措辞,我不是很擅长这个:P
我明白了,在 github 上编码:https://github.com/77Z/electron-local-terminal-prototype
following video 对我很有帮助。很快,您需要:
- 安装 node-pty 和 electron-rebuild 包(除了 xterm)
- 将以下代码放入适当的流程文件
主进程中(main.js):
const os = require('os');
const pty = require('node-pty');
var shell = os.platform() === "win32" ? "powershell.exe" : "bash";
var ptyProcess = pty.spawn(shell, [], {
name: 'xterm-color',
cols: 80,
rows: 24,
cwd: process.env.HOME,
env: process.env
});
ptyProcess.on("data", (data) => {
mainWindow.webContents.send("terminal-incData", data);
});
ipcMain.on("terminal-into", (event, data)=> {
ptyProcess.write(data);
})
渲染进程中:
const Terminal = require('xterm').Terminal;
const FitAddon = require('xterm-addon-fit').FitAddon;
const term = new Terminal();
const fitAddon = new FitAddon();
term.loadAddon(fitAddon);
// Open the terminal in #terminal-container
term.open(document.getElementById('terminal-container'));
term.onData(e => {
ipcRenderer.send("terminal-into", e);
} );
ipcRenderer.on('terminal-incData', (event, data) => {
term.write(data);
})
// Make the terminal's size and geometry fit the size of #terminal-container
fitAddon.fit();
- 运行 electron-rebuild 命令如果出错。
当您尝试安装 electron-rebuild 包时,您可能会遇到以下错误:
在 MAC 中:error: no template named 'remove_cv_t'
。 solution is here
在 Windows 中:gyp ERR! find Python
我把自己挖进了一个很深的兔子洞,试图找出标题的意思。如果你对这个问题是什么感到困惑,我会给出更详细的解释:你见过 VSCode 终端吗?还是总站?好吧,我想做那些应用程序做的事情。我有一个电子应用程序,为了方便用户,我想在其中包含某种命令提示符。我查看了 xterm.js,但我只能找到 SSH 之类的示例,而不是直接 link 到系统上托管的控制台。 我想问的是如何将 xterm.js(在 electron 中)连接到实际工作的命令提示符? 我见过能够与 cmd.exe 交互的程序例如 Windows 终端。我将以它为例。
Image taken from process hacker
在所附的照片中,您可以看到三个过程。 WindowsTerminal.exe、OpenConsole.exe 和 cmd.exe。在深入研究了 Windows 终端的源代码之后,我可以看到 OpenConsole.exe 从您创建的每个 cmd 实例开始。所以我假设这是与 cmd.exe 交互的程序。现在我知道 Windows 终端是使用 UWP 制作的,但你可以看到类似的事情发生 with VSCode(我打开了一堆终端来演示)
这是另一个 post,有一个 similar question,但没有答案。我希望这个能引起一些关注。
所以如果你能回答,谢谢。如果您有点偏离主题,请记住我的问题:如何将 xterm.js(in electron) 连接到实际工作的命令提示符?
对不起,如果你不能理解我的措辞,我不是很擅长这个:P
我明白了,在 github 上编码:https://github.com/77Z/electron-local-terminal-prototype
following video 对我很有帮助。很快,您需要:
- 安装 node-pty 和 electron-rebuild 包(除了 xterm)
- 将以下代码放入适当的流程文件
主进程中(main.js):
const os = require('os');
const pty = require('node-pty');
var shell = os.platform() === "win32" ? "powershell.exe" : "bash";
var ptyProcess = pty.spawn(shell, [], {
name: 'xterm-color',
cols: 80,
rows: 24,
cwd: process.env.HOME,
env: process.env
});
ptyProcess.on("data", (data) => {
mainWindow.webContents.send("terminal-incData", data);
});
ipcMain.on("terminal-into", (event, data)=> {
ptyProcess.write(data);
})
渲染进程中:
const Terminal = require('xterm').Terminal;
const FitAddon = require('xterm-addon-fit').FitAddon;
const term = new Terminal();
const fitAddon = new FitAddon();
term.loadAddon(fitAddon);
// Open the terminal in #terminal-container
term.open(document.getElementById('terminal-container'));
term.onData(e => {
ipcRenderer.send("terminal-into", e);
} );
ipcRenderer.on('terminal-incData', (event, data) => {
term.write(data);
})
// Make the terminal's size and geometry fit the size of #terminal-container
fitAddon.fit();
- 运行 electron-rebuild 命令如果出错。
当您尝试安装 electron-rebuild 包时,您可能会遇到以下错误:
在 MAC 中:error: no template named 'remove_cv_t'
。 solution is here
在 Windows 中:gyp ERR! find Python