我正在编写一个包装器,ack
以便在本地搜索代码,并在管道中将一些额外的上下文行传递到寻呼机。
这是包装器脚本ackc
。在不同的示例之间,我将改变传递给ack
的内容--pager
。
#!/bin/sh
ack -C 20 -i \
--pager=most \
--heading \
--break \
--color \
--show-types \
"$@"
使用less
(不带-R)作为寻呼机,几乎所有转义序列都使用脱字符号表示(不知道这是什么。^[
例外。它ESC
以反转的背景色呈现(此处未复制颜色) 。
下面是一个输出的一个样品(通过产生ackc
与--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
不了解这个顺序?我可以配置它以正确处理它吗?
大多数人的行为都是硬编码的。源代码有几个类似这样的块,用于在接收到转义字符后进行解析:
if ((ch == 033) && (Most_V_Opt == 0))
{
while ((ch == 033)
&& (0 == most_parse_color_escape (&b, e, NULL))
&& (b < e))
ch = *b++;
}
基本上说如果找到转义字符(033
)-V
且未设置该选项,则查找ANSI颜色转义序列。
所有清除操作也都以转义字符开头,因此大多数不会执行所要求的操作。
顺便说一句,我看到戴维斯(Davis)在几天前做了更改,以作为一种解决方法。最终,它将以打包的版本...
作者:John E.Davis 2018-07-11 06:26:02 提交人:John E.Davis 2018-07-11 06:26:02 父:97befd7b984520e80475bb1cb857b35650755a15(pre5.1-20:增加了对Home / End键的支持) 分支:master,remotes / origin / master 遵循: 前提 : pre5.1-21:为使用不带行尾清除序列(ESC [K)的程序尝试对输出着色的程序增加了一种变通方法考虑isatty(fileno(sdout))的值。 +21。src / line.c:为尝试 使用行尾清除转义序列(ESC [K) +而不考虑isatty(fileno(sdout))的值对+输出着色的程序添加了一种变通方法)。 除非使用-v,否则大多数将+忽略ESC [K。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句