问题标签 [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.
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 无法处理。有没有办法阻止它们被显示?
javascript - 从字符串中删除所有 ANSI 颜色/样式
我使用一个将 ANSI 颜色/样式添加到字符串的库。例如:
当我做:
"Hello World"
将输出一条白色粗体消息。
有一个字符串,比如'\u001b[1m\u001b[38;5;231mHello World\u001b[0m\u001b[22m'
如何删除这些元素?
也许是一个好的正则表达式?还是有什么内置功能?
我正在考虑的工作是创建子进程:
但是输出是一样的...
c++ - 使用 ANSI 转义码 C++ 滚动
我正在尝试使用 c++ 中的 ANSI 转义码滚动屏幕,但我遇到了问题。我的代码是
当我运行程序时,如果我按向下箭头直到光标移动到最后一行,然后按向左箭头,屏幕向下滚动(这很好)。但是,如果我用向上箭头向上移动光标,然后按向右箭头,则不会再次出现“按 ESC 退出”字样。我该怎么做才能将屏幕向上滚动到上一行?
windows - 为 cmd 启用颜色输出
我无法在我的 cmd.exe(Windows 7、x64)上着色我的 casperjs 断言。我跟着ansicon。
如果我理解正确,如果安装了ansicon casperjs ,断言会自动着色
如果安装了 ansicon,Windows 用户将获得彩色输出。
有任何想法吗?
更新
指令:
python - 终端中的行与行
终端仿真器中似乎有一些行与行的概念,我想了解更多。
演示我所说的行与行的意思
下面的 Python 脚本显示三行“a”并等待,然后显示三行“b”。
如果在此中断期间将终端窗口宽度缩小一个字符,您会看到
这似乎很合理——每一行都被单独包装。当我们再次按回车键打印b
s 时,
一切都按预期工作。我使用了绝对光标定位,并写入了我之前写入的相同行——这当然不会覆盖所有的 a,因为它们中的许多都在其他行上。
但是,当我们将窗口再缩小一个字符时,换行的工作方式会有所不同:
为什么第二行和第三行b
wrap在一起,为什么'的最后一行a
和b'的第一行合并了?为什么在上面可见的顶部行中给出了一个提示——我们看到了两个a
,因为它们的两行仍然是链接的——当然,如果我们再次移动窗口,那一行将继续以相同的方式换行。即使对于我们替换了一整行的行,这似乎也在发生。
事实证明,之前包装的行现在链接到它们相应的父行;更明显的是,一旦我们将终端扩大很多,它们属于同一条逻辑线:
我的问题
实际上,我的问题是如何防止或预测这些行组合成行。清除整个屏幕可以消除这种行为,但如果可能的话,最好只对需要它的个别行执行此操作,这样我就可以按行保持缓存,这显着加快了我的应用程序。清除到行尾会取消该行与其下方行的链接,但清除到行首不会取消该行与其上方行的链接。
我很好奇 - 这些线是什么?我在哪里可以了解它们?我可以找出哪些行是同一行的一部分吗?
我已经使用 terminal.app 和 iterm 观察到了这种行为,使用和不使用 tmux。我想即使没有规范,深入研究其中任何一个都会产生答案——但我想某处有规范!
背景:我想制作一个终端用户界面,如果用户减小窗口宽度,它可以预测终端换行的方式。我知道全屏模式( ncurses 使用的 'tput smcup
或python -c 'print "\x1b[?1049h"
')之类的东西可以防止换行,但不想在这里使用它。
编辑:更清楚地表明我已经了解脚本的覆盖行为并想要解释包装行为。
macos - 可以让 Terminal.app 尊重 ANSI 转义码吗?
我注意到TERM
环境变量设置为xterm
或者xterm-256color
Mac 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 十进制字符7
或8
转义的八进制字节表示放在旁边(\0337
!= ESC
),因此可以使用环境变量来避免依赖tput
:
我不确定这是为什么。如果ESC
7
并且ESC
8
是 ANSI SCP 和 RCP 的某种专有或自定义代码,它有可能因终端实现而异,它会向我解释为什么tput
首先创建它。
不幸的是,我无法使用tput
我目前正在做的事情,因为我并不是专门在 bash 环境中工作。我更好奇原始字节是如何从终端解释到终端的,更具体地说,是否有办法让 Terminal.app 尊重我尝试过的所有其他终端模拟器相同的 ANSI 转义码似乎没有问题。那可能吗?在这一点上,我开始认为它可能根本不是,这很好,但很高兴知道肯定,也可能了解原因。
python - 将带有 ANSI 转义序列的字符串写入文件
我正在使用的一个 python 模块提供了一个钩子,允许在将用户键盘输入发送到 shell 终端之前捕获它。我面临的问题是它逐个字符地捕获输入,这使得当用户执行退格或移动光标等操作时难以捕获输入命令。
例如,给定字符串exit\x1b[4D\x1b[Jshow 我自己 out,将发生以下情况:
less 命令显示原始命令(exit\x1b[4D\x1b[Jshow 我自己出来),而实际上我希望它“干净”地存储,因为它在使用打印功能时显示(展示自己)。
打印结果,或者'cat'ing文件显示了我想要显示的内容,但我在这里猜测终端正在转换输出。
有没有办法使用一些 python 模块或一些 bash 实用程序来实现对文件的“干净”写入?肯定有一些模块可以为我做到这一点吗?
ruby - 在 Ruby 中执行进程时如何保留输出颜色?
我正在使用帮助脚本来执行rspec
测试。
这很好用,除了我丢失了rake rspec
输出中的所有颜色。适当的 ANSI 代码似乎不包含在output
字符串中。
如何执行一个过程,以便它返回包含文本颜色的输出?
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 转义序列将不起作用。