了解一下 DomTerm,这是一款终端模拟器和复用器,带有 HTML 图形和其它不多见的功能。

DomTerm 是一款现代化的终端模拟器,它使用浏览器引擎作为 “GUI 工具包”。这就支持了一些相关的特性,例如可嵌入图像和链接、HTML 富文本以及可折叠(显示/隐藏)命令。除此以外,它看起来感觉就像一个功能完整、独立的终端模拟器,有着出色 xterm 兼容性(包括鼠标处理和 24 位色)和恰当的 “装饰” (菜单)。另外它内置支持了会话管理和副窗口(如同 tmux 和 GNU Screen 中一样)、基本输入编辑(如在 readline 中)以及分页(如在 less 中)。

图 1: DomTerminal 终端模拟器。

在以下部分我们将看一看这些特性。我们将假设你已经安装好了 domterm 。开始之前先让我们概览一下这项技术。

前端 vs. 后端

DomTerm 大部分是用 JavaScript 写的,它运行在一个浏览器引擎中。它可以是像例如 Chrome 或者 Firefox 一样的桌面浏览器(见图 3),也可以是一个内嵌的浏览器。使用一个通用的网页浏览器没有问题,但是用户体验却不够好(因为菜单是为通用的网页浏览而不是为了终端模拟器所打造),并且其安全模型也会妨碍使用。因此使用内嵌的浏览器更好一些。

目前以下这些是支持的:

qdomterm,使用了 Qt 工具包 和 QtWebEngine

一个内嵌的 Electron(见图 1)

atom-domterm 以 Atom 文本编辑器(同样基于 Electron)包的形式运行 DomTerm,并和 Atom 面板系统集成在一起(见图 2)

一个为 JavaFX 的 WebEngine 包装器,这对 Java 编程十分有用(见图 4)

之前前端使用 Firefox-XUL ,但是 Mozilla 已经终止了 XUL

图 2:在 Atom 编辑器中的 DomTerm 终端面板。

目前,Electron 前端可能是更好的选择,紧随其后的是 Qt 前端。如果你使用 Atom,atom-domterm 也工作得相当不错。

后端服务器是用 C 写的。它管理着伪终端(PTY)和会话。它同样也是一个为前端提供 Javascript 和其它文件的 HTTP 服务器。domterm 命令启动终端任务和执行其它请求。如果没有服务器在运行,domterm 就会自己来服务。后端与服务器之间的通讯通常是用 WebSockets(在服务器端是libwebsockets)完成的。然而,JavaFX 的嵌入既不用 Websockets 也不用 DomTerm 服务器。相反 Java 应用直接通过 Java-Javascript 桥接进行通讯。

一个稳健的可兼容 xterm 的终端模拟器

DomTerm 看上去感觉像一个现代的终端模拟器。它处理鼠标事件、24 位色、Unicode、倍宽字符(CJK)以及输入方式。DomTerm 在 vttest 测试套件 上工作地十分出色。

其不同寻常的特性包括:

展示/隐藏按钮(“折叠”): 小三角(如上图 2)是隐藏/展示相应输出的按钮。仅需在提示符中添加特定的转义字符就可以创建按钮。

对于 readline 和类似输入编辑器的鼠标点击支持: 如果你点击输入区域,DomTerm 会向应用发送正确的方向键按键序列。(可以通过提示符中的转义字符启用这一特性,你也可以通过 Alt+点击 强制使用。)

用 CSS 样式化终端: 这通常是在 ~/.domterm/settings.ini 里完成的,保存时会自动重载。例如在图 2 中,设置了终端专用的背景色。

一个更好的 REPL 控制台

一个经典的终端模拟器基于长方形的字符单元格工作的。这在 REPL(命令行)上没问题,但是并不理想。这里有些通常在终端模拟器中不常见的 REPL 很有用的 DomTerm 特性:

一个能“打印”图片、图形、数学公式或者一组可点击的链接的命令: 应用可以发送包含几乎任何 HTML 的转义字符。(HTML 会被剔除部分,以移除 JavaScript 和其它危险特性。)

图 3 显示了来自 gnuplot 会话的一个片段。Gnuplot(2.1 或者跟高版本)支持 DormTerm 作为终端类型。图形输出被转换成 SVG 图片,然后被打印到终端。我的博客帖子在 DormTerm 上的 Gnuplot 展示在这方面提供了更多信息。

图 3:Gnuplot 截图。

Kawa 语言有一个创建并转换几何图像值的库。如果你将这样的图片值打印到 DomTerm 终端,图片就会被转换成 SVG 形式并嵌入进输出中。

图 4:Kawa 中可计算的几何形状。

富文本输出: 有着 HTML 样式的帮助信息更加便于阅读,看上去也更漂亮。图片 1 的下面面板展示 dormterm help 的输出。(如果没在 DomTerm 下运行的话输出的是普通文本。)注意自带的分页器中的 PAUSED 消息。

包括可点击链接的错误消息: DomTerm 可以识别语法 filename:line:column 并将其转化成一个能在可定制文本编辑器中打开文件并定位到行的链接。(这适用于相对路径的文件名,如果你用 PROMPT_COMMAND 或类似的跟踪目录。)

编译器可以侦测到它在 DomTerm 下运行,并直接用转义字符发出文件链接。这比依赖 DomTerm 的样式匹配要稳健得多,因为它可以处理空格和其他字符并且无需依赖目录追踪。在图 4 中,你可以看到来自 Kawa Compiler 的错误消息。悬停在文件位置上会使其出现下划线,file: URL 出现在 atom-domterm 消息栏(窗口底部)中。(当不用 atom-domterm 时,这样的消息会在一个浮层的框中显示,如图 1 中所看到的 PAUSED 消息所示。)

点击链接时的动作是可以配置的。默认对于带有 #position 后缀的 file: 链接的动作是在文本编辑器中打开那个文件。

结构化内部表示:以下内容均以内部节点结构表示:命令、提示符、输入行、正常和错误输出、标签,如果“另存为 HTML”,则保留结构。HTML 文件与 XML 兼容,因此你可以使用 XML 工具搜索或转换输出。命令 domterm view-saved 会以一种启用命令折叠(显示/隐藏按钮处于活动状态)和重新调整窗口大小的方式打开保存的 HTML 文件。

内建的 Lisp 样式优美打印: 你可以在输出中包括优美打印指令(比如,grouping),这样断行会根据窗口大小调整而重新计算。查看我的文章 DomTerm 中的动态优美打印以更深入探讨。

基本的内建行编辑,带着历史记录(像 GNU readline 一样): 这使用浏览器自带的编辑器,因此它有着优秀的鼠标和选择处理机制。你可以在正常字符模式(大多数输入的字符被指接送向进程);或者行模式(通常的字符是直接插入的,而控制字符导致编辑操作,回车键会向进程发送被编辑行)之间转换。默认的是自动模式,根据 PTY 是在原始模式还是终端模式中,DomTerm 在字符模式与行模式间转换。

自带的分页器(类似简化版的 less):键盘快捷键控制滚动。在“页模式”中,输出在每个新的屏幕(或者单独的行,如果你想一行行地向前移)后暂停;页模式对于用户输入简单智能,因此(如果你想的话)你无需阻碍交互式程序就可以运行它。

多路复用和会话

标签和平铺: 你不仅可以创建多个终端标签,也可以平铺它们。你可以要么使用鼠标或键盘快捷键来创建或者切换面板和标签。它们可以用鼠标重新排列并调整大小。这是通过 GoldenLayout JavaScript 库实现的。图 1 展示了一个有着两个面板的窗口。上面的有两个标签,一个运行 Midnight Commander;底下的面板以 HTML 形式展示了 dormterm help 输出。然而相反在 Atom 中我们使用其自带的可拖拽的面板和标签。你可以在图 2 中看到这个。

分离或重接会话: 与 tmux 和 GNU screen 类似,DomTerm 支持会话安排。你甚至可以给同样的会话接上多个窗口或面板。这支持多用户会话分享和远程链接。(为了安全,同一个服务器的所有会话都需要能够读取 Unix 域接口和一个包含随机密钥的本地文件。当我们有了良好、安全的远程链接,这个限制将会有所放松。)

domterm 命令 类似与 tmux 和 GNU screen,它有多个选项可以用于控制或者打开单个或多个会话的服务器。主要的差别在于,如果它没在 DomTerm 下运行,dormterm 命令会创建一个新的顶层窗口,而不是在现有的终端中运行。

与 tmux 和 git 类似,dormterm 命令有许多子命令。一些子命令创建窗口或者会话。另一些(例如“打印”一张图片)仅在现有的 DormTerm 会话下起作用。

命令 domterm browse 打开一个窗口或者面板以浏览一个指定的 URL,例如浏览文档的时候。

获取并安装 DomTerm

DomTerm 可以从其 Github 仓库获取。目前没有提前构建好的包,但是有详细指导。所有的前提条件在 Fedora 27 上都有,这使得其特别容易被搭建。

【编辑推荐】

【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0

html模拟终端,DomTerm:一款为Linux打造的终端模拟器相关推荐

  1. linux 命令行 常用软件,12款最佳Linux命令行终端工具

    12款最佳Linux命令行终端工具 如果你跟我一样,整天要花大量的时间使用Linux命令行,而且正在寻找一些可替代系统自带的老旧且乏味的终端软件,那你真是找对了文章.我这里搜集了一些非常有趣的终端软件 ...

  2. [转]12款最佳Linux命令行终端工具

    摘要 "工欲善其事必先利其器",作为菜鸟,也是从别人那里偷学来的一些东东.今天看到同事用到一个终端命令行工具,觉得自己弱爆了.然后在网上搜了下该工具.发现类似的工具还是挺多的,只是 ...

  3. linux top 命令可视化_12款最佳Linux命令行终端工具

    本文中,介绍了12款最佳Linux命令行终端工具,可以用来替代debian系的Linux原生终端.如果你每天需要花大量的时间使用Linux命令行,而且正在寻找一些可替代系统自带的老旧且乏味的终端软件, ...

  4. 21款最佳Linux命令行终端工具

    本文中,介绍了14款最佳Linux命令行终端工具,可以用来替代debian系的Linux原生终端.如果你每天需要花大量的时间使用Linux命令行,而且正在寻找一些可替代系统自带的老旧且乏味的终端软件, ...

  5. 首款鸿蒙系统终端n,首款搭载华为鸿蒙系统终端来了!荣耀智慧屏正式发布,3799元起售...

    原标题:首款搭载华为鸿蒙系统终端来了!荣耀智慧屏正式发布,3799元起售 文/图 羊城派记者 林曦 发自东莞 8月10日下午,全球首款采用华为鸿蒙OS的产品荣耀智慧屏正式发布! 荣耀智慧屏采用华为自主 ...

  6. 切换终端_首款搭载鸿蒙系统的终端来了:配自研芯片,能跟手机无缝切换

    功能类似于互联网智能电视的荣耀智慧屏正式发布. 8月10日下午,广东东莞篮球中心,荣耀发布了首款搭载华为鸿蒙OS操作系统的智能终端--荣耀智慧屏. 前一天,华为刚刚发布了自研的操作系统鸿蒙OS,这是华 ...

  7. Linux伪终端怎么退出,什么是linux里的终端和伪终端

    1).首先明确: 控制终端(/dev/tty) 这是个在应用程序中的一个概念,前台进程有个控制终端,就对应这个.不过它并不指任何物理意义上的终端,其实/dev/tty会映射到当前的设备(通过tty命令 ...

  8. linux 终端发出哔声,关闭Linux下Shell终端嘟嘟声和vi中错误提醒的Beep音(zz)

    很有用的东西 Q. This beep sound is annoying under Linux, how do I disable it forever? A. To be frank there ...

  9. 21款实用的Linux命令行终端工具

    本文中,介绍了14款最佳Linux命令行终端工具,可以用来替代debian系的Linux原生终端.如果你每天需要花大量的时间使用Linux命令行,而且正在寻找一些可替代系统自带的老旧且乏味的终端软件, ...

最新文章

  1. 智源神经元识别挑战赛发布:收获不只是10万元奖金
  2. KVM虚拟机文件优化导出最小化体积的qcow2镜像文件
  3. Android Service与Runnable整合并用
  4. cnc加工中心保养表_CNC加工中心有哪些日常保养方法?
  5. linux redhat 下让redis以服务方式运行
  6. 极简风海报作品合集|过目不忘的海报大片,越看越过瘾
  7. bert 是单标签还是多标签 的分类_标签感知的文档表示用于多标签文本分类(EMNLP 2019)...
  8. java numberformat_NumberFormat(数字格式化类)
  9. dtu阿里云自定义透传
  10. php简易微博系统,基于html、css、PHP开发一个简单的微型博客系统(微博)
  11. 技术经理、架构师、技术总监、VP、CTO,这些岗位都是如何挣出来
  12. python读书笔记2000_python高级编程读书笔记(一)
  13. 怎么用python编写个apk_【android】如何利用python做Android项目自动化构建,并一键实现构建结果发送到钉钉通知以及通过二维码下载apk或者其他处理等功能...
  14. 【数据结构】二叉树的节点总个数、叶子节点个数、第K层节点个数、二叉树的深度
  15. 如何免费开通微信公众号留言功能(下)
  16. Linux下搜狗拼音输入法无法输出中文以及显示界面异常
  17. 完全小白篇-使用Python爬取网络小说
  18. 液晶弹性自由能计算_加州理工学院白若冰博士、Bhattacharya教授:光敏液晶弹性体中的光-力耦合...
  19. VS2008上安装64位编译器工具
  20. node.js+vue.js+mysql实现登录注册的功能(前后端分离)

热门文章

  1. 中职计算机应用专业核心素养的,基于职业发展的中职学生核心素养的研究与培养...
  2. 计世资讯:大数据将使用户采购存储解决方案呈现两大新特征
  3. OpenCvSharp (C# OpenCV) OCR实现中英文识别 文字识别(附WinForm完整源码)
  4. NodeJS-框架express-Koa-Hapi的区别
  5. IT培训班有用吗?IT培训包就业是真的吗?
  6. 电信专家王煜全:手机监管面临三大困境
  7. VS中如何导入并且播放音乐
  8. 微信抢抢票服务器,2018微信上怎么老是正在抢票?在微信上抢火车票的经验
  9. 直播绿幕抠图的例子(绿幕抠图直播实例参考)
  10. 【BUUCTF】[Zer0pts2020]Can you guess it?