Colors 重新编译ls命令以获取文件的所需颜色,该文件以README_u*开头,即以字符串扩展
我对这篇文章作如下评论: 我简要总结一下这个问题:Colors 重新编译ls命令以获取文件的所需颜色,该文件以README_u*开头,即以字符串扩展,colors,ls,gnu-coreutils,Colors,Ls,Gnu Coreutils,我对这篇文章作如下评论: 我简要总结一下这个问题: eval `/opt/local/libexec/gnubin/dircolors ~/.dircolors` export LS_COLORS="${LS_COLORS}*README=00;37;44" 然后,当创建自述文件时,我将得到: 但是现在,我想应用这个规则,并对每个以自述文件开头的文件名执行相同的操作(比如README\u something,README\u important) 为此,我试图提出: e
eval `/opt/local/libexec/gnubin/dircolors ~/.dircolors`
export LS_COLORS="${LS_COLORS}*README=00;37;44"
然后,当创建自述文件时,我将得到:
但是现在,我想应用这个规则,并对每个以自述文件开头的文件名执行相同的操作(比如README\u something
,README\u important
)
为此,我试图提出:
export LS_COLORS="${LS_COLORS}*README*=00;37;44"
但它不显示为上图(仅白色)
势解
一个可能的解决方案是从coreutils
sources包重新编译ls
命令(我在MacOS Big Sur 11.2.3上)
修改位于此处:
如果我想要文件README\u string
,string
是任何类型的字符串,可以通过命令“l
”在~/.zshrc
中使用以下别名进行着色,我正在研究需要进行哪些修改:
alias l='grc -es --colour=auto ls --color -Gh -C -lrt'
我如何进行重新编译
编辑
下面是管理文件()着色的代码部分:
/*仅当仍分类为C_文件时,才检查文件的后缀*/
ext=NULL;
if(type==C_文件)
{
/*测试名称是否具有可识别的后缀*/
len=strlen(名称);
name+=len;/*指向最终\0的指针*/
对于(ext=color\u ext\u list;ext!=NULL;ext=ext->next)
{
如果(ext->ext.len ext.len,ext->ext.string,
ext->ext.len)==0)
打破
}
}
我想不带扩展名的文件被着色。我对C语言有一些概念,但不足以理解这段代码中发生的事情
在没有扩展名的情况下,我可以应用哪些修改来实现着色?除了对自述文件进行着色外,还可以使用grc
对自述文件进行着色
现在。由于您已经设置了别名,只需将正则表达式/颜色对添加到
ls
的grc
配置文件副本:
mkdir ~/.grc/
{
cat /usr/local/share/grc/conf.ls
cat << here
-
# README
regexp=(README[^.]*$)
colours=white on_blue blink
here
} > ~/.grc/conf.ls
将此添加到第593行之后:
{ LEN_STR_PAIR ("37;44") },
将第4231行(返回false;
)更改为:
并将此功能添加到print\u color\u指示器
功能之前的某个位置:
bool startsWith(const char *pre, const char *str)
{
size_t lenpre = strlen(pre), lenstr = strlen(str);
return lenstr < lenpre ? false : memcmp(pre, str, lenpre) == 0;
}
bool startsWith(常量字符*pre,常量字符*str)
{
尺寸(lenpre=strlen(pre),lenstr=strlen(str);;
返回lenstr
所有这些C
代码都没有经过测试(我的C
非常生锈)。它也是
不推荐-如评论中所述,这将很难实施
和支持。除了自述文件的功能外,您还可以使用grc
对自述文件进行着色
现在。由于您已经设置了别名,只需将正则表达式/颜色对添加到
ls
的grc
配置文件副本:
mkdir ~/.grc/
{
cat /usr/local/share/grc/conf.ls
cat << here
-
# README
regexp=(README[^.]*$)
colours=white on_blue blink
here
} > ~/.grc/conf.ls
将此添加到第593行之后:
{ LEN_STR_PAIR ("37;44") },
将第4231行(返回false;
)更改为:
并将此功能添加到print\u color\u指示器
功能之前的某个位置:
bool startsWith(const char *pre, const char *str)
{
size_t lenpre = strlen(pre), lenstr = strlen(str);
return lenstr < lenpre ? false : memcmp(pre, str, lenpre) == 0;
}
bool startsWith(常量字符*pre,常量字符*str)
{
尺寸(lenpre=strlen(pre),lenstr=strlen(str);;
返回lenstr
所有这些C
代码都没有经过测试(我的C
非常生锈)。它也是
不推荐-如评论中所述,这将很难实施
和支持。您是否尝试过exa
?( ). 它支持LS_颜色的全局模式,默认情况下有一些自述文件的高亮显示。@Gairfowl我尝试过它,但一个有趣的功能似乎不存在:作为大小函数的彩色化我做了一个exa-l
。此外,我必须修改我的所有LS_颜色,因为与LS
@youpilat13相比,exa
的渲染颜色不同:只是好奇:你试图避免为exa
重写LS_颜色设置的任务,这是一项公认的繁琐任务,但是你想经历所有的麻烦来重新编译ls
,包括测试你的更改和不再获取ls
的更新,这最终可能会花费你更多的精力?@user1934428。别担心,我不反对exa
,但这有点棘手,因为我不只是使用LS\u CLORS:我正在使用另一层grc
命令(grc-es--color=auto-ls--color-Gh-C-lrt
这是两者的结合,而不仅仅是ls_颜色。这就是为什么我想稍微修改ls
对于以自述文件*开头且扩展名之间没有点分隔的文件的行为。您尝试过exa
?)。它支持LS_颜色的全局模式,默认情况下有一些自述文件的高亮显示。@Gairfowl我尝试过它,但一个有趣的功能似乎不存在:作为大小的函数的彩色化我做了一个exa-l
。此外,我必须修改我的所有LS_颜色,因为呈现的颜色与exa
不一样与ls
@youpilat13相比:只是出于好奇:你试图避免为exa
重写ls\u颜色设置的任务,但你想经历所有的麻烦来重新编译ls
,这包括测试你的更改和不再获得ls
的更新,这在总的来说,最终可能会花费您更多的精力?@user1934428。别担心,我不反对exa
,但这有点棘手,因为我不只是使用LS\u CLORS:我正在使用另一层grc
命令(grc-es--color=auto-ls--color-Gh-C-lrt
这是两者的结合,而不仅仅是ls_颜色。这就是为什么我想对自述文件开头的文件稍微修改ls
的行为*