我如何保存和还原” XTERM.JS实例的上下文?
在我的电子应用程序中,我有一个 xterm.js
在我的一个终端模拟器中 react tabs
。我如何保留该终端的状态,以便在使用文本并返回文本时,仍然存在光标位置等?反应中通常的方法是使用状态变量,将其设置在父组件中并将其传递给渲染器上的孩子,但是由于Xterm.js并不是React组件本身,到现在为止,我还不知道该怎么做。
目前,我创建了这样的终端:
import { useEffect, useRef, useState } from "react";
import { Terminal as TerminalType } from 'xterm';
import { FitAddon } from 'xterm-addon-fit';
//import { SearchAddon } from 'xterm-addon-search'
import 'xterm/css/xterm.css';
export const Terminal = () => {
const [terminal] = useState(new TerminalType({
cursorBlink: true,
cursorStyle: window.api.isWindows ? "bar" : "underline"
}));
useEffect(() => {
const fitAddon = new FitAddon();
terminal.loadAddon(fitAddon);
window.api.receive('terminal.incomingData', (data) => {
terminal.write(data);
});
terminal.open(document.getElementById('xterm-container') as HTMLElement);
terminal.onData((key) => {
window.api.send('terminal.keystroke', key);
});
fitAddon.fit();
// simulate enter press to show the initial prompt command
window.api.send('terminal.keystroke', '\r');
}, [terminal]);
return (
<div id="xterm-container"></div>
)
}
更新1:
用 forcerender = {true}
确实有效地制作选项卡:
<TabPanel key="3" forceRender={true}>
<Terminal />
</TabPanel>
但是,它不仅在需要时一直保持渲染效果,即行动。欢迎更好地解决此问题的方法。
另外,我发现一个问题 fitaddon.fit()
在设置 forcerender = {true}
时不起作用。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用xterm addon 保存您的终端缓冲区或其中一部分。它将被序列化为您可以传递的字符串,以恢复状态。
You can use the xterm addon
@xterm/addon-serialize
to save your terminal buffer, or part of it. It will be serialized to a string you can pass to write() to restore the state.