diff --git a/src/chsrc-main.c b/src/chsrc-main.c index 84c30b6..50280d5 100644 --- a/src/chsrc-main.c +++ b/src/chsrc-main.c @@ -303,25 +303,69 @@ cli_print_target_features (Target_t *target, const char *input_target_name) } { - char *msg = CHINESE ? " Scope: 换源作用域 " - : " Scope: scope of the recipe"; - char *scope_msg = xy_strcat (3, msg, "| chsrc set -scope=default|project|user|system ", input_target_name); + char *scope_msg = NULL; - switch (target->cap_local) + for (int i=0; icap_local_explain ? target->cap_local_explain : "");br(); - break; - default: - xy_unreached(); + ScopeCapability_t cap = target->scope_caps[i]; + char *scope_name; + if (i == 0) + { + scope_name = CHINESE ? " 项目级换源" : " project scope"; + scope_msg = xy_strcat (3, scope_name, " | chsrc set -scope=project ", input_target_name); + } + else if (i == 1) + { + scope_name = CHINESE ? " 用户级换源" : " user scope"; + scope_msg = xy_strcat (3, scope_name, " | chsrc set -scope=user ", input_target_name); + } + else if (i == 2) + { + scope_name = CHINESE ? " 系统级换源" : " system scope"; + scope_msg = xy_strcat (3, scope_name, " | chsrc set -scope=system ", input_target_name); + } + else + { + xy_unreached(); + } + + switch (cap) + { + case ScopeCap_Unknown: + printf (" %s%s (%s)\n", bdred(NoMark), purple(scope_msg), "是否支持该作用域尚不了解,欢迎贡献"); + break; + case ScopeCap_Unable: + printf (" %s%s (%s)\n", bdred(NoMark), purple(scope_msg), "不支持的作用域"); + break; + case ScopeCap_Able_But_Not_Implemented: + printf (" %s%s (%s)\n", bdyellow(HalfYesMark), purple(scope_msg), "支持但未实现"); + break; + case ScopeCap_Able_And_Implemented: + printf (" %s%s (%s)\n", bdgreen(YesMark), purple(scope_msg), "支持且已实现"); + break; + default: + xy_unreached(); + } } + Scope_t default_scope = target->default_scope; + char *default_scope_name = NULL; + switch (default_scope) + { + case ProjectScope: + default_scope_name = CHINESE ? "项目级" : "Project Scope"; + break; + case UserScope: + default_scope_name = CHINESE ? "用户级" : "User Scope"; + break; + case SystemScope: + default_scope_name = CHINESE ? "系统级" : "System Scope"; + break; + default: + xy_unreached(); + } + print (bdblue (" = ")); + printf ("默认作用域 | chsrc set -scope=default %s (= %s)\n", input_target_name, default_scope_name); + br(); } { diff --git a/src/framework/struct.h b/src/framework/struct.h index 8f2e87a..b99332b 100644 --- a/src/framework/struct.h +++ b/src/framework/struct.h @@ -7,7 +7,7 @@ * Contributors : @livelycode36 * | * Created On : <2023-08-29> - * Last Modified : <2026-02-22> + * Last Modified : <2026-02-24> * * chsrc struct * ------------------------------------------------------------*/ @@ -107,12 +107,14 @@ typedef enum Scope_t } Scope_t; +#define NumberOfScopeType 3 + typedef enum ScopeCapability_t { - ScopeCap_Unknown, /* 未知,缺乏对该 target 的细致了解 */ - ScopeCap_Unable, /* 不支持该作用域 */ - ScopeCap_Able_But_NotImplemented, /* 支持但chsrc尚未实现 */ - ScopeCap_Able_And_Implemented /* 支持且chsrc已经实现 */ + ScopeCap_Unknown, /* 未知,缺乏对该 target 的细致了解 */ + ScopeCap_Unable, /* 不支持该作用域 */ + ScopeCap_Able_But_Not_Implemented, /* 支持但chsrc尚未实现 */ + ScopeCap_Able_And_Implemented /* 支持且chsrc已经实现 */ } ScopeCapability_t; @@ -162,8 +164,14 @@ typedef struct Target_t Capability_t cap_local; /* 是否支持 local mode */ char *cap_local_explain; /* local mode 的说明 */ - Scope_t default_scope; /* 默认作用域 */ - ScopeCapability_t scope_caps[3]; /* 各作用域的支持情况 */ + /** + * 各作用域的支持情况 + * 0: project scope + * 1: user scope + * 2: system scope + */ + ScopeCapability_t scope_caps[NumberOfScopeType]; + Scope_t default_scope; /* 默认作用域 */ char *note; /* 备注 */