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
的行为*