Add support for list

This commit is contained in:
Aoran Zeng 2023-08-31 21:40:32 +08:00
parent 84f2119fd7
commit b3c0d3be06
2 changed files with 62 additions and 4 deletions

57
chsrc.c
View File

@ -567,9 +567,11 @@ static const char const
},
*wr_tex[] = {"tex", "latex", "ctan", NULL, NULL},
*wr_tex[] = {"latex", "ctan", "tex", NULL, NULL},
*wr_anaconda[] = {"conda", "anaconda", NULL, NULL},
*wr_emacs[] = {"emacs", NULL, NULL},
**wr_softwares[] = {wr_tex};
**wr_softwares[] = {wr_tex, wr_anaconda, wr_emacs};
#undef chsrcfunc
@ -603,6 +605,51 @@ call_cmd (void* cmdptr, const char* arg)
}
void
print_available_mirrors ()
{
// xy_info ("chsrc: 可用以下镜像站,所有的致谢属于这些站点以及它们的开发/维护者们");
for (int i=0; i<Array_Size(available_mirrors); i++)
{
mirror_info* mir = available_mirrors[i];
printf ("%-14s ", mir->abbr);
puts (mir->name);
}
}
void
print_supported_targets_ (const char const*** array, size_t size)
{
for (int i=0; i<size; i++)
{
const char ** target = array[i];
const char* alias = target[0];
for (int k=1; alias!=NULL; k++)
{
printf ("%s\t", alias);
alias = target[k];
}
puts("");
}
puts("");
}
void
print_supported_targets ()
{
xy_info ("chsrc: 支持对以下目标换源 (同一行表示这几个命令兼容)");
xy_warn ("编程语言开发");
print_supported_targets_ (pl_packagers, Array_Size(pl_packagers));
xy_warn ("操作系统");
print_supported_targets_ (os_systems, Array_Size(os_systems));
xy_warn ("软件");
print_supported_targets_ (wr_softwares, Array_Size(wr_softwares));
}
int
print_help ()
{
@ -637,9 +684,11 @@ main (int argc, char const *argv[])
else if (xy_streql(command, "list"))
{
if (argc < 2) {
puts("chsrc: 列出所有支持的软件,以及所有可用源");
print_available_mirrors();
puts("");
print_supported_targets();
} else {
puts("chsrc: 列出所有可用镜像站");
puts("chsrc: 列出该软件所有可用镜像站");
}
return 0;
}

View File

@ -54,6 +54,15 @@ mirror_info
NugetOrg = {"NuGet Org", "https://www.nuget.org/"};
mirror_info*
available_mirrors[] = {
&Tuna, &Sjtug_Zhiyuan, &Zju, &Lzuoss, &Jlu, &Bfsu, &Pku, &Bjtu, &Sustech, &Ustc, &Nju, &Cqu,
&Ali, &Tencent, &Netease, &Sohu,
&RubyChina, &GoProxyCN, &GoProxyIO
// 暂不支持 NugetOrg
};
typedef struct {
const mirror_info* mirror;
const char* url;