问题描述
我对这篇文章做了以下说明:export-ls-colors-apply-the-rule-for-every-file-beginning-by-readme
我简要总结一下这个问题:
eval `/opt/local/libexec/gnubin/dircolors ~/.dircolors`
export LS_COLORS="${LS_COLORS}*README=00;37;44"
但现在,我想应用规则并对以 README 开头的每个文件名(如 README_something
、README_important
)执行相同的操作。
为此,我尝试放置:
export LS_COLORS="${LS_COLORS}*README*=00;37;44"
但没有如上图显示(只有白色)。
潜在的解决方案
一个潜在的解决方案是从 ls
源包重新编译 coreutils
命令(我使用的是 MacOS Big Sur 11.2.3)。
修改位于此处:
https://github.com/wertarbyte/coreutils/blob/master/src/ls.c#L4206
如果我希望文件 README_string
其中 string
是任何类型的字符串被命令“l
”着色,我正在研究需要哪些修改~/.zshrc
:
alias l='grc -es --colour=auto ls --color -Gh -C -lrt'
如何进行重新编译?
编辑
在管理文件着色的部分代码下方(https://github.com/wertarbyte/coreutils/blob/master/src/ls.c#L4206):
/* Check the file's suffix only if still classified as C_FILE. */
ext = NULL;
if (type == C_FILE)
{
/* Test if NAME has a recognized suffix. */
len = strlen (name);
name += len; /* Pointer to final \0. */
for (ext = color_ext_list; ext != NULL; ext = ext->next)
{
if (ext->ext.len <= len
&& strncmp (name - ext->ext.len,ext->ext.string,ext->ext.len) == 0)
break;
}
}
我希望对没有扩展名的文件进行着色。我对 C 语言有一些概念,但不足以理解这部分代码中发生的事情。
我可以申请哪些修改以获得无需扩展的着色?
解决方法
除了它正在做什么之外,您还可以使用 grc
为 README 文件着色
现在。由于您已经设置了别名,只需将正则表达式/颜色对添加到
grc
的 ls
配置文件的副本:
mkdir ~/.grc/
{
cat /usr/local/share/grc/conf.ls
cat << here
-
# README
regexp=(README[^.]*$)
colours=white on_blue blink
here
} > ~/.grc/conf.ls
如果您仍想尝试更改 ls
的来源,您需要几个
修改。根据您链接中的来源,您似乎需要...
将第 551 行更改为:
C_CLR_TO_EOL,C_README
在第 593 行之后添加:
{ LEN_STR_PAIR ("37;44") },
将第 4231 行 (return false;
) 更改为:
{
if (startsWith(name,"README"))
{
if (is_colored (C_NORM))
restore_default_color ();
put_indicator (&color_indicator[C_LEFT]);
put_indicator (&color_indicator[C_README]);
put_indicator (&color_indicator[C_RIGHT]);
return true;
}
else
return false;
}
并在 print_color_indicator
函数之前的某处添加此函数:
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;
}
所有这些 C
代码都完全未经测试(而且我的 C
非常生疏)。这也是
不推荐 - 如评论中所述,这将难以实施
并支持。