- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试在 Windows 上使用 node.js 将 ANSI 转义序列写入标准输出,但它似乎不起作用。
具体来说,我使用 ConEmu哪个support一个子集 ANSI 代码。我创建了一个测试文件,它应该重命名当前的控制台选项卡:
process.stdout.write('\x1b]9;3;"abc"\x1b\x5c');
但是,当我运行它时没有任何反应。如果我运行 node test > out.txt
,正确的字节将写入输出文件。
为什么转义序列不起作用?
最佳答案
当 Node 的标准输出连接到非交互式接收器(即通过管道或重定向到文件)时,写入 process.stdout
的字节将按原样写入。因此,运行 node test > out.txt
会产生预期的结果。
但是,当 Node 连接到 Windows 中的交互式终端时,它(通过 libuv)实际上是 parses all ANSI escape codes这样它就可以使用 Windows API 透明地模拟 unix TTY 终端。这就是使颜色和重新定位光标等功能在 Windows 中起作用的原因,因为 Windows 控制台不支持 ANSI 转义序列。
未知和不受支持的序列被静默忽略。
因此,在 JS 调用 process.stdout.write()
和对 WriteConsoleW()
的内部调用( Node 实际输出到终端)。
这可以通过在 fd 1 上打开原始文件系统流从用户代码解决。
var rawStdout = new fs.SyncWriteStream(1, { autoClose: false });
将 ANSI 转义序列写入 rawStdout
将正确地发送到终端。
rawStdout.write('\x1b]9;3;"abc"\x1b\x5c');
(当然,这不会赋予 Windows 控制台任何神奇的新功能;它只会逐字打印序列,看起来像垃圾。您实际上必须使用某种支持 ANSI 转义码的终端仿真器。)
为了更好地实现我的特定目标,我最终编写了一个模块——console-title —通过在 unix 上编写 ANSI 转义序列并调用 appropriate native API 来更改控制台的标题在 Windows 下。这允许我在 Windows 的默认控制台窗口和模拟器(如 ConEmu)中更改标题。
关于windows - ANSI 转义序列不会打印到 Windows 上的标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27575929/
我最近在读 CSAPP。在 10.9 节中,它说标准 I/O 不应该与 socket 一起使用,原因如下: (1) The restrictions of standard I/O Restricti
似乎是一个足够标准的问题,可以保证解决方案中的标准设计: 假设我想在文件中写入 x+2(或更少)个字符串。 x 字符串构成一个部分的内容,这两个字符串构成该部分的页眉和页脚。要注意的是,如果内容中没有
代码版本管理 在项目中,代码的版本管理非常重要。每个需求版本的代码开发在版本控制里都应该经过以下几个步骤。 在master分支中拉取该需求版本的两个分支,一个feature分支,
我有以下sql查询,我需要获取相应的hibernate条件查询 SELECT COUNT(DISTINCT employee_id) FROM erp_hr_payment WHERE payment
所以我正在编写一些代码,并且最近遇到了实现一些 mixin 的需要。我的问题是,设计混音的正确方法是什么?我将使用下面的示例代码来说明我的确切查询。 class Projectile(Movable,
我的环境变量包含如下双引号: $echo $CONNECT_SASL_JAAS_CONFIG org.apache.kafka.common.security.plain.PlainLoginModu
示例: /** * This function will determine whether or not one string starts with another string. * @pa
有没有办法在 Grails 中做一个不区分大小写的 in 子句? 我有这个: "in"("name", filters.tags) 我希望它忽略大小写。我想我可以做一个 sqlRestriction
我搜索了很长时间,以查找将哪些boost库添加到std库中,但是我只找到了一个新库的完整列表(如此处:http://open-std.org/jtc1/sc22/wg21/docs/library_t
我已经通过使用这个肮脏的黑客解决了我的问题: ' Filter managerial functions ActiveSheet.Range("$A$1:$BW$2211").Auto
因此,我很难理解我需要遵循的标准,以便我的 Java 程序能够嵌入 HTML。我是否只需将我的主类扩展到 Applet 类,或者我还需要做更多的事情吗?另外,在我见过的每个 Applet 示例中,它都
我对在 Hibernate 中使用限制有疑问。 我必须创建条件,设置一些限制,然后选择日期字段最大值的记录: Criteria query = session.createCriteria(Stora
我有标准: ICriteria criteria = Session.CreateCriteria() .SetFetchMode("Entity1", FetchMo
我很难编写条件来选择所有子集合或孙集合为空的实体。我可以将这些作为单独的条件来执行,但我无法将其组合成一个条件。 类结构: public class Component { p
@Entity class A { @ManyToMany private List list; ... } @Entity class B { ... } 我想使用条件(不是 sql 查询)从 A
我的数据库中有以下表结构: Table A: Table B: Table C: _______________
请帮助我: 我有下一张 table : 单位 ID 姓名 用户 ID 姓名 利率 单位 ID 用户 ID 我不明白如何从 SQL 创建正确的条件结构: 代码: SELECT * FROM Unit W
我正在构建一个包含项目的网站,每个项目都有一个页面,例如: website.com/book/123 website.com/film/456 website.com/game/789 每个项目都可以
我需要使用两个属性的组合来过滤结果列表。一个简单的 SQL 语句如下所示: SELECT TOP 10 * FROM Person WHERE FirstName + ' ' + LastName L
我有一个“ super 实体”SuperEntity 和三个扩展父类(super class)的实体 ChildEntity1、...、ChildEntity3。 搜索数据库中的所有实体很容易,即我们
我是一名优秀的程序员,十分优秀!