我正在编写一个包装器ack
以在本地搜索代码,并将一些额外的上下文行通过管道传输到寻呼机。
这是包装脚本ackc
。在不同的示例之间,我将改变传递ack
给--pager
.
#!/bin/sh
ack -C 20 -i \
--pager=most \
--heading \
--break \
--color \
--show-types \
"$@"
使用less
(没有-R)作为寻呼机,几乎所有的转义序列都使用插入符号表示(不知道这叫什么。^[
是例外。它被渲染为ESC
使用倒置的背景颜色(此处未复制颜色) .
这是输出示例(由ackc
with--pager=less
和环境变量(如LESS
,LESSPIPE
等清除)产生)
ESC[1;32m.local/lib/python2.7/site-packages/markupsafe/_speedups.cESC[0m
...
ESC[1;33m19ESC[0m:#define PY_SSIZE_T_MAX ESC[30;43mINTESC[0m_MAXESC[0mESC[K
ESC[1;33m20ESC[0m:#define PY_SSIZE_T_MIN ESC[30;43mINTESC[0m_MINESC[0mESC[K
这里重要的转义序列是^[[K
每行末尾包含突出显示的项目的序列。由 适当处理less -R
。
.local/lib/python2.7/site-packages/markupsafe/_speedups.c
...
19:#define PY_SSIZE_T_MAX INT_MAX
20:#define PY_SSIZE_T_MIN INT_MIN
most
但是,似乎并没有很好地处理它。
.local/lib/python2.7/site-packages/markupsafe/_speedups.c
1-/**
...
19:#define PY_SSIZE_T_MAX INT_MAX^[[K
20:#define PY_SSIZE_T_MIN INT_MIN^[[K
它按原样通过^[[K
序列。
这个序列是CSI (n) K -- EL -- Erase in Line
。如果没有给出参数,它会擦除到行尾。如果匹配的术语出现在行尾,则可能需要清除背景颜色的杂散位。
有没有理由most
不理解这个序列?我可以配置它以正确处理它吗?
大多数的行为是硬编码的。源代码有几个这样的块,用于在收到转义字符后进行解析:
基本上它说如果找到转义字符 (
033
) 并且-V
未设置该选项,则查找 ANSI 颜色转义序列。所有的清理操作也都以转义字符开头,因此大多数人不会按照要求进行操作。
顺便说一句,我看到戴维斯几天前做了一个改变作为一种解决方法。最终这将是一个打包的版本......