前端终端组件xterm.js的使用(转)

官网链接

https://xtermjs.org/

安装

npm install xterm

使用

import 'xterm/css/xterm.css'

import { Terminal } from 'xterm'

const term = new Terminal()

term.open(document.getElementById('xterm-container'))

好人总结的文档

 配置项:

rendererType?: 'dom' || 'canvas'; // 渲染器类型
 
cols?: number; // 列数
rows?: number; // 行数
 
disableStdin?: boolean; // 是否禁用输入
 
fontSize?: number; // 字体大小
fontFamily?: string; // 字体类型
fontWeight?: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number; // 字体加粗
fontWeightBold?:  'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number; // 字体加粗
letterSpacing?: number; // 字符间距
lineHeight?: number; // 字体行高
 
scrollback?: number; // 终端中的回滚量,即当前视口之上保留的行数
scrollSensitivity?: number; // 正常滚动的滚动速度
fastScrollModifier?: 'alt' | 'ctrl' | 'shift' | undefined; // 按住哪个键可倍增滚动速度
fastScrollSensitivity?: number; // 快速滚动的滚动速度
 
logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'off'; 日志类型, 默认是 info 
allowTransparency?: boolean; // 背景是否应支持非不透明颜色,开启后支持 theme中使用 rgba
theme?: {  // 主题
    cursor?: string; // 光标颜色
    cursorAccent?: string; // 光标的强调色
    foreground?: string; // 默认的前景色,即字体颜色
    background?: string; // 默认的背景色
    selection?: string; // 选择的背景色(可以是透明的)
};
 
bellStyle?: 'none' | 'sound'; // 终端将使用的铃声通知类型
bellSound?: string; // 当 bellStyle='sound' 时,用于 sound 的数据URI
 
convertEol?: boolean; // 启用时,光标将设置为每一新行下一行的开头
cursorBlink?: boolean; // 光标是否闪烁
cursorStyle?: 'block' | 'underline' | 'bar'; // 光标的样式
cursorWidth?: number; // cursorStyle='bar' 时光标的宽度(以px为单位)
altClickMovesCursor?: boolean; // 如果启用,alt+click会将提示光标移动到鼠标下方的位置。默认值为true
 
/**
 * 终端中文本的最小对比度,设置该值将根据是否满足对比度动态更改前景颜色
 * Example values:
 * - 1: The default, do nothing.
 * - 4.5: WCAG AA合规性的最低要求
 * - 7: WCAG AAA合规性的最低要求
 * - 21: 黑纸白字或白纸黑字
 */
minimumContrastRatio?: number;
drawBoldTextInBrightColors?: boolean; // 是否以明亮的颜色绘制粗体文本。默认值为true
wordSeparator?: string; // 字符被双击的时候单独被选中,多个字符可以用空格间隔
rightClickSelectsWord?: boolean; // 是否支持鼠标右键选中整行
screenReaderMode?: boolean; // 是否启用屏幕阅读器支持
 
tabStopWidth?: number; // 终端中制表位的大小

内置函数


    open(HTMLElement): void; // Terminal基于传入的 dom 元素进行初始化
    dispose(): void; // Terminal销毁,同时也会销毁 dom 元素以及事件
    reset(): void; // Terminal  reset
 
    getOption(key: string): any; // 获取配置
    setOption(key: string, value: any): void; // 动态设置配置
 
    focus(): void; // Terminal聚焦
    blur(): void; // Terminal失焦
    resize(columns: number, rows: number): void; // 可以动态设置行数和列数
 
    write(data: string | Uint8Array, callback?: () => void): void; // xterm终端写入
    writeln(data: string | Uint8Array, callback?: () => void): void;
    writeUtf8(data: Uint8Array, callback?: () => void): void;
    clear(): void; // 清空光标所在行上面的所有输入内容,不包含删除当前光标所在行
 
    select(column: number, row: number, length: number): void; // 选择第row + 1 行的 第 column + 1 列开始,直到后面的第 length 个字符
    selectAll(): void; // 选中全部内容
    selectLines(start: number, end: number): void; // 可以配合 onRender 方法的回调选中
    hasSelection(): boolean; // 判断有没有选中
    getSelection(): string; // 获取选中的字符
    getSelectionPosition(): {startColumn: number, startRow: number, endColumn: number, endRow: number} | undefined; // 获取选中的字符的位置
    clearSelection(): void; // 清除选中状态
 
    scrollLines(amount: number): void; // 一次滚动 amount 行
    scrollPages(pageCount: number): void; // 相当于鼠标滚轮滑了pageCount下
    scrollToTop(): void; // 滚动到顶部
    scrollToBottom(): void; // 滚动到底部
    scrollToLine(line: number): void; // 滚动到第 line + 1 行是当前窗口的第一行
 
    refresh(start: number, end: number): void; // 范围内 refresh
    loadAddon(addon: ITerminalAddon): void; // 挂载插件

响应事件

onKey(callback({ key: string, domEvent: KeyboardEvent })) // key: 键盘按键的值,domEvent: 键盘事件
onData(callback(key: String)) // 类似于input的oninput事件,key代表的是输入的字符
onCursorMove(callback()) // 输入光标位置变动会触发,比如输入,换行等
onLineFeed(callback()) // 操作回车按钮换行时触发,自然输入换行不会触发
onScroll(callback(scrollLineNumber: number)) // 当输入的行数超过设定的行数后会触发内容的滚动,输入换行以及回车换行均会触发
onSelectionChange(callback()) // 操作鼠标左键选中/取消选中会触发
onRender(callback({start: number, end: number})) // 鼠标移出点击,移入点击以及输入模式下键盘按下都会触发,范围从“0”到“Terminal.rows-1”
onResize(callback({cols: number, rows: number})) // 在 open() 之后如果调用 resize 设置行列会触发改事件,返回新的行列数值

禁用光标移动

term.attachCustomKeyEventHandler((e) => {
      console.log({ e });
      //   e = e.target;
      var keyCode = e.keyCode || e.which || e.charCode;
      const moveKey = [37, 38, 39, 40].includes(keyCode);
      if (moveKey) return false;
});

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
xterm.js是一个基于JavaScript的插件,用于在Web应用程序中实现终端效果。Spring Boot是一个Java框架,用于快速构建Web应用程序。可以结合xterm.js、Spring Boot和HTML来实现Shell终端效果。 要实现这个效果,首先需要在HTML页面中引入xterm.js的库文件和必要的样式表。可以通过CDN或者将相关文件下载到本地进行引入。 然后,在Spring Boot的后端代码中,可以使用WebSocket技术来与前端建立实时通信。可以使用Spring Boot提供的`@Controller`注解来处理WebSocket连接请求,并在连接建立之后与xterm.js进行交互。 在后端代码中,可以编写一个`ShellController`类来处理WebSocket连接和命令执行。在这个类中,可以使用`@OnOpen`注解来处理WebSocket连接建立事件,并在这个事件中创建一个新的`DefaultShell`对象,用于执行命令和返回结果。 `DefaultShell`类可以封装底层的Shell命令执行器,例如使用Java的`ProcessBuilder`类来执行Shell命令,并将结果返回给前端。在`DefaultShell`类中,可以定义一个`executeCommand`方法,用于执行命令,并通过WebSocket将结果发送给前端。 在前端代码中,可以使用xterm.js提供的API来创建一个终端对象,并通过WebSocket与后端进行通信。在页面加载完成时,可以调用xterm.js的`Terminal`构造函数来创建一个新的终端对象,并将其附加到页面上的指定元素上。 然后,在页面的JavaScript代码中,可以使用WebSocket对象与后端进行通信。当用户在终端中输入命令时,可以将命令传递给后端的WebSocket连接,并在收到结果后更新终端的显示。 总结来说,通过使用xterm.js、Spring Boot和HTML,可以实现一个具有终端效果的Shell界面。前端使用xterm.js提供的API创建终端对象,在页面的JavaScript代码中与后端通过WebSocket进行通信。后端使用Spring Boot来处理WebSocket连接请求,并通过Java的执行命令和返回结果。这样就可以在Web应用程序中实现一个类似于Shell终端的交互界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HHYZBC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值