feat: 终端头部指令.

This commit is contained in:
lijiahangmax
2024-01-09 01:19:51 +08:00
parent fa14ff58f9
commit 0bb7b5bc62
10 changed files with 173 additions and 49 deletions

View File

@@ -5,6 +5,7 @@ import {
OutputPayload
} from '../types/terminal.type';
import { InputProtocol } from '../types/terminal.protocol';
import { TerminalStatus } from '../types/terminal.const';
// 终端输出消息体处理器实现
export default class TerminalOutputProcessor implements ITerminalOutputProcessor {
@@ -25,6 +26,7 @@ export default class TerminalOutputProcessor implements ITerminalOutputProcessor
// 未成功展示错误信息
if (!success) {
session.write(`${msg || ''}`);
session.status = TerminalStatus.CLOSED;
return;
}
// 发送 connect 命令
@@ -38,6 +40,7 @@ export default class TerminalOutputProcessor implements ITerminalOutputProcessor
// 未成功展示错误信息
if (!success) {
session.write(`${msg || ''}`);
session.status = TerminalStatus.CLOSED;
return;
}
// 设置可写
@@ -54,6 +57,7 @@ export default class TerminalOutputProcessor implements ITerminalOutputProcessor
// 提示消息
session.write(`\r\n${msg || ''}`);
// 设置状态
session.status = TerminalStatus.CLOSED;
session.connected = false;
// 设置不可写
session.setCanWrite(false);

View File

@@ -1,6 +1,6 @@
import type { ITerminalChannel, ITerminalSession } from '../types/terminal.type';
import { useTerminalStore } from '@/store';
import { fontFamilySuffix } from '../types/terminal.const';
import { fontFamilySuffix, TerminalStatus } from '../types/terminal.const';
import { InputProtocol } from '../types/terminal.protocol';
import { ITerminalOptions, Terminal } from 'xterm';
import { FitAddon } from 'xterm-addon-fit';
@@ -23,6 +23,8 @@ export default class TerminalSession implements ITerminalSession {
public canWrite: boolean;
public status: number;
private readonly sessionId: string;
private readonly channel: ITerminalChannel;
@@ -37,6 +39,7 @@ export default class TerminalSession implements ITerminalSession {
this.channel = channel;
this.connected = false;
this.canWrite = false;
this.status = TerminalStatus.CONNECTING;
this.inst = undefined as unknown as Terminal;
this.addons = {} as TerminalAddons;
}
@@ -65,6 +68,7 @@ export default class TerminalSession implements ITerminalSession {
// 设置已连接
connect(): void {
this.status = TerminalStatus.CONNECTED;
this.connected = true;
// 注册输入事件
this.inst.onData(s => {
@@ -98,7 +102,7 @@ export default class TerminalSession implements ITerminalSession {
}
// 写入数据
write(value: string): void {
write(value: string | Uint8Array): void {
this.inst.write(value);
}
@@ -128,11 +132,26 @@ export default class TerminalSession implements ITerminalSession {
// 选中全部
selectAll(): void {
this.inst.selectAll();
this.inst.focus();
}
// 获取选中
getSelection(): string {
return this.inst.getSelection();
const selection = this.inst.getSelection();
this.inst.focus();
return selection;
}
// 去顶部
toTop(): void {
this.inst.scrollToTop();
this.inst.focus();
}
// 去底部
toBottom(): void {
this.inst.scrollToBottom();
this.inst.focus();
}
// 获取配置