终端仿真_Linux版DomTerm终端仿真器简介

终端仿真

DomTerm是一种现代的终端仿真器,它使用浏览器引擎作为“ GUI工具箱”。 这启用了一些简洁的功能,例如可嵌入的图形和链接,HTML RTF文本以及可折叠(显示/隐藏)命令。 否则,它的外观和感觉就像是功能齐全的独立终端仿真器,具有出色的xterm兼容性(包括鼠标处理和24位颜色)以及适当的“ chrome”(菜单)。 此外,还内置了对会话管理和子窗口(如tmuxGNU screen ),基本输入编辑(如readline )和分页(如less )的内置支持。

DomTerminal terminal emulator

图1:DomTerminal终端仿真器。 查看大图。

下面,我们将详细介绍这些功能。 我们假设您已安装domterm (如果需要获取并构建DomTerm,请跳至本文末尾)。 首先,这里是对该技术的快速概述。

前端与后端

大多数DomTerm用JavaScript编写,并在浏览器引擎中运行。 它可以是台式机Web浏览器,例如Chrome或Firefox(请参见图3 ),也可以是嵌入式浏览器。 使用常规的Web浏览器可以很好地工作,但是用户体验却不那么好(因为菜单是为常规浏览而设计的,而不是为终端仿真器而设计的),并且安全模型妨碍了使用,因此使用嵌入式浏览器更好。 。

当前支持以下内容:

  • qtdomterm ,它使用Qt工具包和QtWebEngine
  • Electron嵌入(参见图1
  • atom-domtermAtom文本编辑器 (也基于Electron)中作为软件包运行DomTerm,并与Atom窗格系统集成(请参见图2
  • JavaFX的WebEngine包装,对于用Java编写的代码很有用(请参见图4
  • 以前,首选的前端使用Firefox-XUL ,但是Mozilla自此删除了XUL。
DomTerm terminal panes in Atom editor

图2:Atom编辑器中的DomTerm终端窗格。 查看大图。

当前,电子前端可能是最好的选择,紧随其后的是Qt前端。 如果使用Atom, atom-domterm效果很好。

后端服务器用C编写。它管理伪终端(PTY)和会话。 它也是一个HTTP服务器,用于向前端提供JavaScript和其他文件。 domterm命令启动终端作业并执行其他请求。 如果没有服务器在运行, domterm将其自身domterm进程。 后端和服务器之间的通信通常使用WebSockets(服务器上带有libwebsockets )完成。 但是,JavaFX嵌入既不使用WebSocket也不使用DomTerm服务器。 相反,Java应用程序使用Java–JavaScript桥直接通信。

可靠的xterm兼容终端仿真器

DomTerm的外观和感觉就像现代的终端模拟器。 它处理鼠标事件,24位颜色,Unicode,全角(CJK)字符和输入方法。 DomTerm在vttest测试套件上做得很好。

不寻常的功能包括:

显示/隐藏按钮(“折叠”):小三角形(如上图2所示)是隐藏/显示相应输出的按钮。 要创建按钮,只需在提示文本中添加某些转义序列

readline和类似的输入编辑器的鼠标单击支持:如果在(黄色)输入区域中单击,DomTerm将向您的应用程序发送正确的箭头键序列。 (这是通过提示符中的转义序列启用的;您也可以使用Alt + Click强制执行。)

使用CSS为终端设置样式:通常在~/.domterm/settings.ini ,保存后会自动重新加载。 例如,在图像2中 ,设置了终端特定的背景色。

更好的REPL控制台

经典的终端模拟器可在字符单元的矩形网格上工作。 这适用于REPL(命令外壳),但不是理想的。 以下是一些对于REPL有用的DomTerm功能,这些功能通常在终端仿真器中找不到:

命令可以“打印”图像,图形,数学公式或一组可单击的链接:应用程序可以发送包含几乎所有HTML的转义序列。 (清理了HTML以删除JavaScript和其他危险功能。)

图像3显示了来自gnuplot会话的片段。 Gnuplot(2.1或更高版本)支持domterm作为终端类型。 图形输出将转换为SVG图像 ,然后将其打印到终端。 我在DomTerm显示的博客文章Gnuplot提供了有关此方面的更多信息。

Image 3: Gnuplot screenshot

图3:Gnuplot屏幕截图。 查看大图。

Kawa语言具有一个用于创建和转换几何图片值的库。 如果将这样的图片值打印到DomTerm终端,则图片将转换为SVG并嵌入到输出中。

Image 4: Computable geometry in Kawa

图片4:Kawa中的可计算几何。 查看大图。

输出中的富文本格式:帮助消息更具可读性,并且HTML样式看起来更好。 图1的下部窗格显示了domterm help的输出。 (如果未在DomTerm下运行,则输出为纯文本。)请注意内置寻呼机发出的PAUSED消息。

错误消息可能包含可单击的链接: DomTerm识别语法filename : line : column:并将其转换为链接,该链接在可配置的文本编辑器中打开文件和行。 (如果您使用PROMPT_COMMAND或类似名称跟踪目录,则此方法适用于相对文件名。)

编译器可以检测到它在DomTerm下运行,并以转义序列直接发出文件链接。 这比依赖于DomTerm的模式匹配更健壮,因为它可以处理空格和其他特殊字符,并且不依赖于目录跟踪。 在图4中 ,您可以看到来自Kawa编译器的错误消息。 将鼠标悬停在文件位置上会使它带有下划线,并且file: URL显示在atom-domterm消息区域(窗口底部)中。 (当不使用atom-domterm ,这样的消息将显示在覆盖框中,如图像1中PAUSED消息所示。)

单击链接时的操作是可配置的。 file:的默认操作file:带有#position后缀的链接是在文本编辑器中打开文件。

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

内置的Lisp样式漂亮打印:您可以在输出中包括漂亮打印指令(例如,分组),以便在调整窗口大小时重新计算换行符。 请参阅我的文章《 DomTerm中的动态漂亮打印》以进行更深入的讨论。

具有历史记录的基本内置行编辑 (例如GNU readline ):它使用浏览器的内置编辑器,因此具有出色的鼠标和选择处理能力。 您可以在正常字符模式之间切换(大多数键入的字符直接发送到进程); 或行模式(在控制字符引起编辑动作时插入了常规字符,使用Enter键将已编辑的行发送到过程)。 默认设置为自动模式,DomTerm会根据PTY是原始模式还是规范模式在字符模式和行模式之间切换

内置的寻呼机 (如简化的less ):键盘快捷键将控制滚动。 在“分页模式”下,输出在每个新屏幕(如果逐行向前移动,则为一行)之后暂停。 分页模式对用户输入而言并不显眼且聪明,因此您可以(如果愿意)运行它,而不会干扰交互式程序。

多路复用和会话

标签和平铺:您不仅可以创建多个终端标签,还可以平铺它们。 您可以使用鼠标或键盘快捷键在窗格和选项卡之间移动以及创建新的窗格和选项卡。 可以使用鼠标重新排列它们并调整其大小。 这是使用GoldenLayout JavaScript库实现的。 图1显示了一个带有两个窗格的窗口。 最上面的一个有两个选项卡,其中一个正在运行Midnight Commander 。 底部窗格将domterm help输出显示为HTML。 但是,在Atom上,我们改为使用其内置的可拖动磁贴和选项卡。 您可以在图2中看到这一点。

分离并重新连接到会话: DomTerm支持会话安排,类似于tmux和GNU screen 。 您甚至可以将多个窗口或窗格附加到同一会话。 这支持多用户会话共享和远程连接。 (为了安全起见,同一服务器上的所有会话都必须能够读取Unix域套接字和包含随机密钥的本地文件。当我们有了一个很好的,安全的远程访问实例时,将解除此限制。)

domterm 命令也像tmux或GNU screen在具有控制或开始管理一个或多个会话的服务器的多个选项。 主要区别在于,如果尚未在DomTerm下运行,则domterm命令将创建一个新的顶层窗口,而不是在现有终端中运行。

domterm命令具有许多子命令,类似于tmuxgit 。 一些子命令创建窗口或会话。 其他(例如“打印”图像)只能在现有的DomTerm会话中使用。

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

获取和安装DomTerm

DomTerm可从其GitHub存储库中获得 。 当前,没有预构建的软件包,但是有详细的说明 。 Fedora 27提供了所有先决条件,这使其特别易于构建。

翻译自: https://opensource.com/article/18/1/introduction-domterm-terminal-emulator

终端仿真

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值