BlobleD:具有高级终端接口API的诅咒库,用于Node.js

2021-04-02 09:44:24

祝福超过16,000行代码和终端良好。它在JavaScript中完全实现了它的'它的目标由两件事组成:

通过解析和编译terminfo和termcap完全重新实现ncurses,并揭示可以输出任何终端兼容的转义序列的程序对象。

祝福的渲染器利用CSR(更改滚动区域)和BCE(背颜色擦除)。它使用画家&#39绘制屏幕' S算法,并用智能光标运动和屏幕损坏缓冲区发出。这种申请的这种途径将非常有效:只有在屏幕上绘制更改(损坏)。

祝福是作为NCurses准确的,但在立方英中甚至更加优化。窗口小部件库为您提供了一个可以让DOM的API .ANYONE能够使令人敬畏的终端应用程序。对于其他平台(主要是Python和Perl),那里有areterminal小工具库(主要是Python和Perl),但祝福是最多的(敢于我说对手用户友好?)。

祝福已被习惯于实施其他流行的库和程序。示例包括:拍打文本编辑器和祝福。祝福API本身已继续激发Termui。

这将渲染一个带有线边框的框,其中包含文本'你好世界!',水平和垂直完美居中。

注意:建议您使用SmartCSR或FastCSR作为Blessed.Screen选项。这将使CSR启用在操作时滚动Elementsor中的文本时。

var blessed =要求('祝福'); //创建屏幕对象。 var屏幕=祝福。屏幕({smartcsr:true});屏幕 。标题='我的窗口标题' ; //创建一个完美居中垂直的框。 var box =祝福。盒子({top:'中心'左:'中心'宽度:' 50%',高度:' 50%' ,内容:' hello {bold}世界{/ bold}!',标签:true,边框:{类型:'线'},style:{fg:' White',BG:'洋红色'边框:{FG:'#F0F0F0'悬停:{BG:'绿色'}}); //将我们的框附加到屏幕上。屏幕 。附录(框); //将PNG图标添加到框VAR图标=祝福。图像({父:盒子,Top:0,左:0,类型:'覆盖'宽度:'收缩',高度:'缩小',文件: __dirname +' / my-program-icon.png',搜索:false}); //如果单击我们的框,请更改内容。盒子 。 (' click'函数(数据){box。setContent(' {center}一些不同的{red-fg}内容{/ red-fg}。{/ centre}' );屏幕。渲染();}); //如果框重点,请处理`ENTER` /`RETURN`并给我们一些内容。盒子 。键('输入'函数(ch,key){box。setContent(' {右}甚至是不同的{black-fg}内容{/ black-fg}。{/右} \ n& #39;);盒子。装置(1,'酒吧');框。插入夹(1,' foo'); render();}; //退出Escape,Q或Control-C。屏幕 。键(['逃生'' q'' c-c'],函数(ch,key){返回过程。退出(0);}) ; //焦点我们的元素。盒子 。重点 ( ) ; //渲染屏幕。屏幕 。使成为 ( ) ;

祝福了许多高级别的小部件,因此您可以避免所有繁多的低级终端内容。

当节点直接连接到屏幕上,在其祖先的位置连接到屏幕时,收到。

分离 - 当节点从屏幕直接分离出来的血面上时收到的。

Emitdescendants(类型,args ...,[迭代器]) - 为元素发出事件,并发出所有后代的相同事件。

程序 - 与之相关的祝福计划。如果没有提供,将是美丽的。

SmartCSR - 尝试在所有可能的元件上执行CSR优化(不仅是全宽度的元素,具有均匀细胞到它们的侧面的元素)。这是已知的,导致与不是全宽的元素闪烁,但是,它更为最佳终端渲染。

FastCSR - 在屏幕边缘的20个COL内的任何元件上执行CSR。比SmartCSR更快,但可能会导致闪烁,取决于元素的每一侧。

udingbce - 尝试对TerminalSthat执行返回_color_erase优化支持它。它还可以与Don' t支持它的终端,在与默认背景颜色的线条上的行为。由于它具有当前模仿,它'不确定终端性能,这在节点内的开销的结果增加了多少。

ResizeTimeout - 在修改后重绘屏幕的时间量(在MS中)(默认值:300)。

AutoPadding - 在MINE上自动定位与边境和普通的子元素(注意:这是一个推荐的选择。它可能会在未来变得偏离)。

转储 - 将所有输出和输入转储到所需文件。如果设置为布尔,可以一起使用log选项。

调试 - 调试模式。启用使用调试方法。还会创建Adebug控制台,按F12将显示。它将显示所有Logand Debug消息。

Ignorelocked - 以完整格式(例如C-C)以忽略锁定或抓住时的全格式(例如C-C)键。无论键是否被锁定,都适用于创建将alwaysexit的键。

Dockborders - 自动"码头"与其他元素的边界而不是overlappapping,具体取决于位置(实验)。例如:这些边界重叠的元素:

┌──────────────────│box2│└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

┌──────────────────│box2│└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

IgnOryockContrast - 通常,如果Thecolors或属性不同,可停靠的边框不会停靠。此选项将允许它们进行DockRegartless。它可能会产生一些奇数看的多彩色边框。

Fullunicode - 允许东亚双宽度,UTF-16代理对和Unicode组合字符。这允许您在基本的多语言平面上方绘制文本。这是一个选择,因为它可能会影响略微消极的性能。如果没有此opcopedElebabled,所有双宽度,代理对和组合字符都将由'''''''''''''分别。 (注意:iterm2无法正确显示Commited字符。祝福只是从元素&#39删除它们;如果检测到iterm2,则Scontent)。

即使未检测到Via Terminfo,ENV变量或Windows代码页,ForeCuenicode - 强制使用Unicode使用Unicode。如果Value是真正的Unicodeis强制。如果Value是错误的非Unicode被强制(默认值:null)。

输入/输出 - 输入和输出流。 Process.Stdin / process.stdoutby default,但是,如果要使编程在Telnet或本性的其他内容中,它可能是Net.socket。

用于Terminfo解析的终端名称。 默认情况下,$术语env变量已被视为。 tput - 祝福的tport对象(只有在通过tpute:trueTo程序构造函数时可用 焦点,模糊 - 当终端窗口聚焦/模糊时收到。 需要Aterminal支持焦点协议和焦点需要通过Toprogram.enableMouse()。 警告 - 当祝福通知时收到的东西不知所措(输出是nota tty,terminfo没有找到等等)。 调试(msg,...) - 与日志方法相同,但仅在设置调试选项时才被调用。 Render() - 渲染所有子元素,将所有数据写入屏幕缓冲器并绘制屏幕。 FillRegion(attr,ch,x1,x2,y1,y2) - 填充任何具有特定属性的字符的区域。

spawn(文件,args,选项) - 在前景中生成一个过程,退出后返回Tooblessed应用程序。 EXEC(文件,args,选项,回调) - 在前台生成一个进程,退出后返回祝福应用程序。 执行错误或退出回调。 Insertine(n,y,top,bottom) - 将一行插入屏幕(使用CSR:绕过输出缓冲区)。 Deleteline(n,y,top,bottom) - 从屏幕中删除一行(使用CSR:这绕过输出缓冲区)。 EnableMouse([EL]) - 使屏幕的鼠标事件能够为屏幕和可选的AnElement(当绑定时自动调用('鼠标')时)。 EncaseKeys([EL]) - 启用屏幕的按键事件和选项an元素(当绑定时自动调用('按键')界定时)。 CopyToclipboard(文本) - 尝试使用Iterm2&#39将文本复制到剪贴板;血液序列。 如果成功返回true。

Cursorshape(形状,眨眼) - 试图改变光标形状。不会工作所有终端(参见此解决方案的人工游标)。如果成功,则会回报。

屏幕截图([xi,xl,yi,yl]) - 采用该地区的屏幕的SGR屏幕截图。返回仅包含字符和SGR代码的字符串。通过简单地在终端中将其呼出来显示扫描。

destroy() - 销毁屏幕对象并从全局列表中删除它.ALSO删除与屏幕对象相关的所有全局事件。如果所有ScreenObjects都被销毁,则节点进程基本上重置为其InitialState。

{FG:'蓝色' ,bg:'黑色' ,边框:{FG:'蓝色' },滚动条:{bg:'蓝色' },焦点:{BG:'红色' },悬停:{BG:'红色' }}

填充 - 元素内部的填充量。可以是包含属性的对象:左,右,顶部和底部。

宽度,高度 - 元素的宽度/高度,可以是数字,百分比(0-100%)或关键字(半或缩小)。百分比也可以占用(50%+ 1,50%-1)。

左,右,顶部,底部 - 元素相对于术语的偏移。可以是一个数字,百分比(0-100%)或关键字(中心)。右侧和底部不接受关键字。百分比也可以占用(50%+ 1,50%-1)。

onscreenevent(类型,处理程序) - 与El.on('屏幕' ...)相同,除了默认追踪侦听器绑定到screenObject。与removescreenevent(),free()和destroy()一起使用。

removescreenevent(类型,处理程序) - 与el.removelistener相同('屏幕' ......),除此之外,它将自动跟踪屏幕对象的侦听器。与onscreenevent(),free()和destroy()一起使用。

免费() - 释放元素。自动取消绑定可能绑定到屏幕对象的事件。这可以防止内存泄漏。 for onscreenevent(),removescreenevent()和destroy()。

销毁() - 与分离()方法相同,除了它将自动释放()和取消绑定任何屏幕事件以防止内存泄漏。 for onscreenevent(),removescreenevent()和free()。

sethover(text /选项) - 设置一个悬停文本框以遵循游标与"标题" dom属性在浏览器中.Example选项:{text:' foo'}

EnableMouse() - 为元素启用鼠标事件(自动调用在on('鼠标')的形式被绑住)。

EncaseKeys() - 启用元素的按键事件(当绑定ON('按键&#39)时自动配置)。

屏幕截图([xi,xl,yi,yl]) - 采用该区域的元素的SGR屏幕截图。返回仅包含字符和SGR代码的字符串。通过简单地在终端中将其呼出来显示扫描。

处理文本内容的方法,按行顺序处理。适用于编写atext编辑器,IRC客户端等。

注意:所有这些方法都处理预先对齐的预包文本。如果您在顶部的包裹线上的盒子上使用了(),则可能会删除3-4" Real"线条(行),具体取决于原始线路的时间。

行参数可以是字符串或字符串数​​组。 LineParameter必须是字符串。

setContent(文本) - 设置内容。注意:当输入文本时,它将最符合所有非SGS转义代码,选项卡将用8个空格替换,并且标签将用SGR代码(如果已启用)替换。

strwidth(文本) - 获取字符串' s显示宽度,采用代理双宽,代理对,组合字符,标签和SGS escapecodes。

填充 - 使用所选BG填充整个行,直到父BG结束,即使是不够的文本填充整个宽度。 (弃用)

类型,BG,FG,CH处理与边界对象相同。(属性可以包含在风格中)。 alwaysscroll - 一种选项,导致忽略子步骤。 TIMIN旋转导致ChildBase每次滚动元素时都会更改。 一个可滚动的文本框,可以显示和滚动文本,以及Handerpre-现有的纽丁和转义代码。 FONT - BDF-> JSON字体文件使用(请参阅编译BDFS到JSON的TTYSTUDIO FORINSTERIONS)。 fontbold - bdf-> json粗体字体文件使用(请参阅编译BDFS到JSON的TTYSTUDIOFOR指令)。 搜索 - 启用VI模式时调用的函数并按键/按下。 此函数接受回调函数,这些函数应与搜索字符串一起使用。 然后使用搜索字符串跳转到在项目中找到的ANITEM。 倒置 - 是否在选中时自动覆盖标记并反转FG ofItem(默认值:true)。

removeItem(child) - 从列表中删除项目。 孩子可以是Anelement,索引或字符串。 InsertItem(i,child) - 将项目插入列表。 孩子可以是Anelement,索引或字符串。 getItemindex(child) - 从列表中返回项目索引。 Child CAN元素,索引或字符串。 刷新([CWD],[Callback]) - 刷新文件列表(在CWDAND上执行READDIR更新列表项)。 垫 - 要尝试垫在每个单元的侧面的空间。 2默认情况下:每侧的一个空格(如果宽度缩小,则仅用)。 命令/项目 - 使用具有键的对象设置为单个标题的按钮,包含包含键和回调键的对象。 键 - 使用预定义的键(I或Ensert for Insert,E为Enitor,E插入时为编辑器)。

ReadInput(回调) - 获取密钥事件并从键盘开始阅读文本。 拍摄收到最终值的回调。 ReadEditor(回调) - $编辑器中的打开文本编辑器,请从生成的文件中读取输出。 拍摄收到最终值的回调。 文本 - 复选框旁边的文本(不要使用setContent,使用check.text ='')。 输入/ setInput / readInput(文本,值,回调) - 显示文本框的结果的提示符。 设置文本和初始值。 日志/显示(文本,[时间],回调) - 显示一段时间的消息(默认为3秒)。 将时间设置为0,以获得在按键上isdismiss的永久消息。 加载(文本) - 显示带有邮件的装载框。 将锁定键,直到调用停止。 进度条允许各种风格。 这也可以用作表单输入。

ScrollOnInput - 即使用户具有滚动状态,也会滚动到底部输入。默认值:false。

ScrollOnInput - 即使用户具有滚动状态,也会滚动到底部输入。默认值:false。

垫 - 要尝试垫在每个单元的侧面的空间。 2默认情况下:每侧的一个空格(如果宽度缩小,则仅用)。

一个盒子旋转伪终端并使输出呈现。有用的替换终端多路复用器,或类似于类似MC的FileManager的东西。需要安装术语.js和pty.js。有关示例终端多路复用器的示例/ multiplex.js。

屏幕截图([xi,xl,yi,xl]) - 几乎与元素.CEREENSHOT几乎相同,但是,指定的区域包括终端' s的整个滚动,而不是屏幕上可见的。

在终端(JPEG,PNG,GIF)中显示图像,使用BLOESTED' SINTERNAL PNG / GIF到终端渲染器(使用ANSIIMAGE元素)原因W3MIMGDisplay(使用OvervalyImage元素)。

类型 - ANSI或叠加。是否将文件呈现为ANSI艺术以W3M覆盖。请参阅Ansiimage元素Formore信息/选项。 (默认值:ANSI)。

将任何.png文件(或.gif,请参阅下面)转换为ANSI映像并显示ITA元素。这与覆盖层元素不同,因为它使用它的内部PNG / GIF解析器,不需要外部依赖性。

祝福使用内部刮擦PNG / GIF阅读器,因为没有其他JavaScriptPng读者支持Adam7隔行扫描图像(远远不少通过PNG TestSuite)。

祝福的PNG阅读器支持ADAM7去隔行,动画(APNG),AllColor类型,位深度1-32,Alpha,Alpha调色板,并输出符号位图(CellMaps),以便有效地渲染到屏幕缓冲区。它来自libcaca / libcucul的一些代码,以添加密度ASCII字符,以便在终端中提供更详细的图像。

如果通过损坏的PNG或非PNG,则Blode将显示Error Mette Inthe Element。

.gif文件也通过JavaScript实现支持(它们正常转换为位图并馈送到PNG渲染器)。仅当用户安装了ImageMagick(转换和识别)时,才支持任何其他ImageFormat。

宽度/高度 - 这与其他元素的不同之处' S宽度或高度inthat只需要其中一个:祝福将保持图像的宽高比,因为它将其缩小到正确数量的细胞。注意:PNG / GIF'如果没有给出宽度或高度,莎拉总是自动缩小到大小(基于尺度)。

ASCII - 添加各种"密度"渲染上的ASCII字符到Givethe图像更详细,类似于Libcaca / libcucul(终端中的库Mplayer useSto显示视频)。

Animate - 如果图像是APNG /动画GIF,是否会动画。 iffalse,只显示第一帧或idat(默认值:true)。

速度 - 设置动画的速度。较慢:0.0-1.0。更快:1-1000。不能比每毫秒的1帧更快,所以1000是最快的。(默认:1.0)

优化 - MEM或CPU。如果为内存进行优化,则使用较少的内存呈现动画框架框架作为动画播放的位图。使用较少的内存。对于CPU优化将预先将所有位图预先编译,这可能会舍出,但也可能会在大图像上的过程。 (默认:MEM)。

setImage(文件) - 将框中的图像设置为新路径。文件可以是Apath,URL或缓冲区。

使用w3mimgdisplay显示终端(JPEG,PNG,GIF)中的图像。需要安装W3M。 X11必填:在XTerm,URXVT和可能的其他终端工作。

ANSI - 将文件呈现为ANSI ART,而不是使用W3M覆盖Intallayally使用Ansiimage元素。请参阅Ansiimage元素Formore信息/选项。 (默认值:true)。

W3M - W3MimgDisplay的路径。如果没有出现正确的W3MIMGDisplay路径,则祝福将搜索二进制的整个磁盘。

注意:只要主机版本支持SpawnSync,就可以同步地同步。 一个盒子旋转伪终端,以便通过MPlayer -Vo Caca或MPV -V -VO CACA渲染视频。 需要使用mplayer或mpv来安装withlibcaca支持。 可以基于渲染器方法自动定位儿童的布局(实验 - 在实验中可以在未能改变该元素的机制!)。 默认情况下,布局元素会自动定位子子,就像显示它们:内联块; 在CSS中。 渲染器 - 在子项逐渐呈现之前调用的回调。 应该返回每个子元素的迭代器回调,该迭代器回调在每个子元素上都有:迭代器(el,i)。 布局 - 使用默认渲染器,它提供了两个布局:内联,andgrid。 内联是默认值,并将类似于内联块呈现。 GridWill基于元素尺寸创建自动网格。 网格细胞'宽度和高度总是 ......