问题标签 [ansi-escape]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1696 浏览

shell - 运行 Emacs shell 时可见的 ANSI 转义序列(这些不是 ANSI 颜色)

当我在 Emacs 中运行 shell 命令时,我经常看到看起来像 ANSI 代码的内容。它们似乎发生在 shell 进程产生一个新进程时。

这是在 Emacs shell 中运行 Stata 的示例。ANSI 代码(如果是这样的话)在底部可见:

注意:关于 ANSI 颜色转义序列有很多类似的 SO 问题。这不是我的问题!我已经要求ansi-color, 和ansi-color-for-comint-mode-on, 和 ANSI 颜色正在工作。此外,使用 ansi-term 解决了这个问题,但我更喜欢标准 shell 的类似缓冲区的特性。eshell 稍微好一点,但仍然显示一些转义码。

我的猜测是这些是屏幕模式/光标移动代码,但我不知道如何让 emacs 忽略或处理它们。TERM 设置为 xterm-256color。

更新:我了解到 h 和 l 代码用于设置终端/显示模式,我认为 Emacs 无法处理。有没有办法阻止它们被显示?

0 投票
3 回答
17626 浏览

javascript - 从字符串中删除所有 ANSI 颜色/样式

使用一个将 ANSI 颜色/样式添加到字符串的库。例如:

当我做:

"Hello World"将输出一条白色粗体消息。

有一个字符串,比如'\u001b[1m\u001b[38;5;231mHello World\u001b[0m\u001b[22m'如何删除这些元素?

也许是一个好的正则表达式?还是有什么内置功能?


我正在考虑的工作是创建子进程:

但是输出是一样的...

0 投票
0 回答
682 浏览

c++ - 使用 ANSI 转义码 C++ 滚动

我正在尝试使用 c++ 中的 ANSI 转义码滚动屏幕,但我遇到了问题。我的代码是

当我运行程序时,如果我按向下箭头直到光标移动到最后一行,然后按向左箭头,屏幕向下滚动(这很好)。但是,如果我用向上箭头向上移动光标,然后按向右箭头,则不会再次出现“按 ESC 退出”字样。我该怎么做才能将屏幕向上滚动到上一行?

0 投票
1 回答
252 浏览

terminal - ANSI 转义码 ESC[0E 无法按预期工作

我正在尝试此答案中的示例代码。

预期的行为是这样的进度条:

这将在同一行更新三次,最终为:

3 秒后。

虽然每个进度条都按预期擦除,但下一个进度条会向下绘制一条线,而不是像我期望的那样在同一条线上。

答案(Wikipedia)中链接的文档说CSI n E( ESC[nE) wheren是一个整数:

将光标移动到第 n 行(默认为 1)行的开头。

所以我希望CSI 0 E( ESC[0E) 将光标移动到当前行的开头(0行向下)。

为什么不呢?另外,我怎样才能实现预期的行为?


Terminal.app在 OS X 上使用来运行这个程序。

0 投票
2 回答
2987 浏览

windows - 为 cmd 启用颜色输出

我无法在我的 cmd.exe(Windows 7、x64)上着色我的 casperjs 断言。我跟着ansicon

如果我理解正确,如果安装了ansicon casperjs ,断言会自动着色

如果安装了 ansicon,Windows 用户将获得彩色输出。

有任何想法吗?

更新

指令

0 投票
2 回答
2132 浏览

python - 终端中的行与行

终端仿真器中似乎有一些行与行的概念,我想了解更多。

演示我所说的行与行的意思

下面的 Python 脚本显示三行“a”并等待,然后显示三行“b”。

在此处输入图像描述

如果在此中断期间将终端窗口宽度缩小一个字符,您会看到

在此处输入图像描述

这似乎很合理——每一行都被单独包装。当我们再次按回车键打印bs 时,

在此处输入图像描述

一切都按预期工作。我使用了绝对光标定位,并写入了我之前写入的相同行——这当然不会覆盖所有的 a,因为它们中的许多都在其他行上。

但是,当我们将窗口再缩小一个字符时,换行的工作方式会有所不同:

在此处输入图像描述

为什么第二行和第三行bwrap在一起,为什么'的最后一行a和b'的第一行合并了?为什么在上面可见的顶部行中给出了一个提示——我们看到了两个a,因为它们的两行仍然是链接的——当然,如果我们再次移动窗口,那一行将继续以相同的方式换行。即使对于我们替换了一整行的行,这似乎也在发生。

事实证明,之前包装的行现在链接到它们相应的父行;更明显的是,一旦我们将终端扩大很多,它们属于同一条逻辑线:

在此处输入图像描述

我的问题

实际上,我的问题是如何防止或预测这些行组合成行。清除整个屏幕可以消除这种行为,但如果可能的话,最好只对需要它的个别行执行此操作,这样我就可以按行保持缓存,这显着加快了我的应用程序。清除到行尾会取消该行与其下方行的链接,但清除到行首不会取消该行与其上方行的链接。

我很好奇 - 这些线是什么?我在哪里可以了解它们?我可以找出哪些行是同一行的一部分吗?

我已经使用 terminal.app 和 iterm 观察到了这种行为,使用和不使用 tmux。我想即使没有规范,深入研究其中任何一个都会产生答案——但我想某处有规范!


背景:我想制作一个终端用户界面,如果用户减小窗口宽度,它可以预测终端换行的方式。我知道全屏模式( ncurses 使用的 'tput smcuppython -c 'print "\x1b[?1049h"')之类的东西可以防止换行,但不想在这里使用它。

编辑:更清楚地表明我已经了解脚本的覆盖行为并想要解释包装行为。

0 投票
1 回答
10456 浏览

macos - 可以让 Terminal.app 尊重 ANSI 转义码吗?

我注意到TERM环境变量设置为xterm或者xterm-256colorMac OS X 的 Terminal.app 实用程序尊重大多数 ANSI 转义码,至少当这些转义码与更改文本颜色有关时。

例如:

产生:

截屏

但是,我对 ANSI 转义码提供的光标位置操作功能更感兴趣。不幸的是,从我收集到的信息来看,这种类型的代码在 Terminal.app 中似乎不太好用。例如,我想做的是这样的:

ESC[s保存当前光标位置,同时ESC[u恢复上次保存的位置。由于运行上面的脚本,我希望“G'day”中的五个字符在光标重新定位后覆盖“Hello”的五个字符,产生以下结果:

事实上,这正是我使用 iTerm2.app、ConEmu for Windows(运行 MinGW 或 MSYS Git 的 bash.exe 副本)等所得到的。然而,我在 Terminal.app 中看到的是:

除了 Terminal.app 只是缺乏对这些代码的支持之外,这是否有原因?有没有办法启用这个功能?有没有可能我配置错误?我的学期设置?还有什么?

我一直在到处搜索,但没有找到任何与 Terminal.app 相关的东西,特别是。我觉得奇怪的是它会通过 ANSI 转义码支持彩色文本,但不支持通过完全相同的技术重新定位光标。这似乎是一个相当明确的标准的一个相当任意的子集。这就是让我觉得我配置错误的原因,而不是 Terminal.app 是罪魁祸首……但是,我想它可能根本无法完成。(可能iTerm2首先存在的原因之一?)

如果有人能对这种情况有所了解,将不胜感激!

更新

所以,我做了更多的阅读和实验,发现了以下奇怪之处:

在查看了下面 nm 的答案后,我决定将返回的字节写出tput到文件中,看看它们与常规 ANSI 指令有何不同。

ESC 7如果我将序列和发送给它,似乎一切都按预期工作ESC 8,但如果我发送它ESC [s,则ESC [u一切正常)。由于不可能将 ASCII 十进制字符78转义的八进制字节表示放在旁边(\0337!= ESC),因此可以使用环境变量来避免依赖tput

我不确定这是为什么。如果ESC 7并且ESC 8是 ANSI SCP 和 RCP 的某种专有或自定义代码,它有可能因终端实现而异,它会向我解释为什么tput首先创建它。

不幸的是,我无法使用tput我目前正在做的事情,因为我并不是专门在 bash 环境中工作。我更好奇原始字节是如何从终端解释到终端的,更具体地说,是否有办法让 Terminal.app 尊重我尝试过的所有其他终端模拟器相同的 ANSI 转义码似乎没有问题。那可能吗?在这一点上,我开始认为它可能根本不是,这很好,但很高兴知道肯定,也可能了解原因。

0 投票
1 回答
1585 浏览

python - 将带有 ANSI 转义序列的字符串写入文件

我正在使用的一个 python 模块提供了一个钩子,允许在将用户键盘输入发送到 shell 终端之前捕获它。我面临的问题是它逐个字符地捕获输入,这使得当用户执行退格或移动光标等操作时难以捕获输入命令。

例如,给定字符串exit\x1b[4D\x1b[Jshow 我自己 out,将发生以下情况:

less 命令显示原始命令(exit\x1b[4D\x1b[Jshow 我自己出来),而实际上我希望它“干净”地存储,因为它在使用打印功能时显示(展示自己)。

打印结果,或者'cat'ing文件显示了我想要显示的内容,但我在这里猜测终端正在转换输出。

有没有办法使用一些 python 模块或一些 bash 实用程序来实现对文件的“干净”写入?肯定有一些模块可以为我做到这一点吗?

0 投票
3 回答
596 浏览

ruby - 在 Ruby 中执行进程时如何保留输出颜色?

我正在使用帮助脚本来执行rspec测试。

这很好用,除了我丢失了rake rspec输出中的所有颜色。适当的 ANSI 代码似乎不包含在output字符串中。

如何执行一个过程,以便它返回包含文本颜色的输出?

0 投票
1 回答
1181 浏览

ansi-escape - 最佳 Ansi Escape 开头

哪个 Ansi 转义序列是最便携和/或最好的,为什么?

出于习惯,我一直在使用printf "\x1B[32;1mgreen\x1B[0m"(例如,这是 unix bash 脚本中的一个示例),但我想知道是否有任何理由使用其中一个。一个比其他的更便携吗?那将是我的假设。

此外,如果您知道任何其他 Ansi Escape 序列,请随时在评论或答案末尾分享。

如果您不知道 Ansi Escape 序列是什么或想要更熟悉它,那么您可以前往:http ://en.wikipedia.org/wiki/ANSI_escape_code

笔记:

上面所有的转义序列都适用于我使用过的所有 Unix 系统,但是仍然必须依靠系统本身来解释转义码。例如,Windows不允许任何类型的转义码,除了四个(BEL、LF 或换行、CR 或回车,当然还有 BS 或退格),因此 Ansi 转义序列将不起作用。