无法在 ConEmu 中启用 256 色
Posted
技术标签:
【中文标题】无法在 ConEmu 中启用 256 色【英文标题】:Can't enable 256 colors in ConEmu 【发布时间】:2012-10-06 11:25:07 【问题描述】:我正在尝试在奇妙的ConEmu-Maximus5 控制台中获得 256 种颜色。
更新:现在它只显示 8 种颜色。我知道是因为 '$tput colors' 输出是 '8'
我已关注instructions并激活:
TrueMod(24 位颜色)支持 注入 ConEmuHk ANSI x3.64 / xterm 256 色我不明白'检查是否缓冲/滑动。'
我在 Windows 7 中。 我使用自定义直接链接启动 ConEmu,因此它会加载 cygwin bash 文件。 "C:\Program Files\ConEmu\ConEmu64.exe" /cmd ""C:\cygwin\bin\bash.exe" --login -i" 在我的 bashrc 配置文件中,我有 -> export TERM=cygwin 这是我的自定义命令提示符: 功能提示 本地红=“\[\033[0;31m\]” 本地 GREEN="\[\033[0;32m\]" 本地冷却 =“\e[38;5;173m” 本地 COOLGREEN="\e[38;5;113m" PS1="$COOLRED\u@\h $LIGHT_COOLGREEN\$PWD \[\e[0m\] > " 迅速的 顺便说一下,ConEmuANSI 的值为 ON。我有一些屏幕截图:
如您所见,命令提示符看起来非常奢侈,因为它不喜欢 256 色设置。如果我将变量 COOLRED 和 COOLGREEN 替换为 RED 和 GREEN,那么它看起来没问题,但它不是 256 色。
更多设置截图:
最后一张是cygwin的薄荷糖。那里一切都很好。支持全 256 色。可惜薄荷没有标签。这主要是我尝试迁移到 ConEmu 的原因。
非常感谢您的帮助!!!
【问题讨论】:
向 nub 解释 ;) 我应该在 bash 中创建什么文件来重新定义提示? 只需在你的主目录中创建一个名为 .bashrc 的文件 很奇怪。 “.bashrc”不起作用,但“.profile”起作用。 更奇怪。 Bash 不会将 Esc 发送到控制台,而是尝试自己处理它们。给你 - 8 种颜色。 这个thread 解释了 .bashrc .bash_profile 和 .profile 【参考方案1】:Bash 不会将 ANSI 序列发送到控制台。它试图自己处理它们。而且,由于*nix终端一般只有8色(不考虑256色模式),所以bash使用8色调色板,而不是Windows终端常见的16色调色板。
我认为,256 色在 mintty 中有效,因为 _isatty
在该终端中返回零。但它在 ConEmu 下返回非零值。可能在未来的构建中我解决了这个难题(如何为某些应用程序创建具有 PTY 功能的真实终端)。
至于问题
事实上,你不需要 256 色。要重新定义提示调色板,您可以使用“使用背景扩展前景色”功能。在 breaf - 在 ConEmu 中设置颜色 16、17 等,将 bash 中的提示背景设置为 #5(可在 ConEmu 中配置),瞧。
ConEmu“扩展...”处理中有一个小错误。使用 build 121016 或更高版本。
PS1="\e[30;45m\u@\h \e[34;45m$PWD \[\e[0m\] > "
以下信息与问题不符,但可能有用
当前版本不支持“整个”控制台缓冲区中的 256 色模式(限制,是的,在计划中将其删除)。
所以,你可以走两条路
完全禁用回滚缓冲区(多种方式,例如“cmd -cur_console:h0”) 在滚动缓冲区的底部工作。【讨论】:
感谢您的辛勤工作。确实,我真的不需要 256 色。我只需要大约 16 个好看的,我可以在颜色部分做到这一点。干杯! @Maximus 我很高兴在 ConEmu 中看到 256 种颜色 - 例如,我希望能够看到 LS_COLORS 的全部容量Bash does not send ANSI codes to the console
你能详细说明一下吗?因为 afaik 是不正确的。【参考方案2】:
我也无法获得 256 色支持(颜色会显示,但它们看起来与 16 色调色板相同)。我切换到“xterm”配色方案,现在它可以在本机 Windows 可执行文件(例如 Python)中使用,但不适用于使用 Cygwin 的任何东西。 Cygwin 似乎具有您无法关闭的终端转义序列处理,这会破坏ConEmuHk
注入。
This is documented on the ConEmu wiki, here.
【讨论】:
【参考方案3】:我遇到了这个奇怪的问题和奇怪的解决方案,并且它以某种方式起作用。不知道其他人是否也这样,只是一些信息分享,以防万一这会有所帮助。
我喜欢为我的游戏机着色,并喜欢使用完整的 256 位 RGB 着色。 在 conemu/CMDer 中配置后(我使用了分叉的)instruction。我的 256 位着色测试看起来像这样。。经过一番折腾并使用我的 bash 256 位功能进行了测试。即运行此命令:
for i in 1..16384; do echo -en "\e[38;5;$imTest";done
*note 应该是 1..256,但我不得不强制它进行更长的彩色打印,所以只需要更长的随机数.. 给出结果:
但是运行了大约 2-3 次,我突然看到了这个干净的灰色阴影
然后它就起作用了..
很奇怪,但我得到了这个工作。会不会是因为优化原因 CMDer 不知何故没有使用完整的 256 位,并且在启动时被触发??,
PS:我用于控制台的 CMDer cmd:
-cur_console:fp -cur_console:d:"C:\WS":P:"<Cobalt>":t:"test":C:"C:\Arbeit\tools\Iconka-Buddy-Ninja.ico" set "PATH=%ConEmuDrive%\Program Files\Git\usr\bin;%PATH%" & "%ConEmuDrive%\Program Files\Git\git-bash.exe" --no-cd --command=%ConEmuBaseDirShort%\conemu-msys2-64.exe /usr/bin/bash.exe -l -i
【讨论】:
【参考方案4】:local COOLRED="\e[38;5;173m"
local COOLGREEN="\e[38;5;113m"
那些\e
s 可能来自例如Cprintf
字符串。您不希望它们在 shell 脚本中。坚持原来的\033
符号。你也错过了结束\]
。这些行现在应该是
local COOLRED="\[\033[38;5;173m\]"
local COOLGREEN="\[\033[38;5;113m\]"
【讨论】:
感谢您的回复。我尝试了你的变量,但仍然没有运气。我已经尝试删除我的自定义颜色提示,以防万一,当我打印 AnsiColors256.ans 时,它看起来只能显示 8 种颜色。\e
通常类似于转义字符,并且 确实是必需的。他们与printf
无关。以上是关于无法在 ConEmu 中启用 256 色的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Go 中检测当前终端是不是支持 16 色或 256 色?