diff --git a/.github/workflows/PR-test.yml b/.github/workflows/PR-test.yml index d90fab7a..224018a8 100644 --- a/.github/workflows/PR-test.yml +++ b/.github/workflows/PR-test.yml @@ -5,7 +5,7 @@ # | Mikachu2333 # | # Created On : <2025-06-19> -# Last Modified : <2025-08-07> +# Last Modified : <2025-08-11> # # Test PR # --------------------------------------------------------------- @@ -14,11 +14,12 @@ name: 测试PR on: pull_request: - types: [opened, - synchronize, # 后续提交 - ready_for_review, # draft PR 转为正式 PR - review_requested, - reopened] + types: [ + opened, + ready_for_review, # draft PR 转为正式 PR + review_requested, + reopened, + ] paths: - "src/**" - "lib/**" @@ -50,6 +51,12 @@ jobs: - name: 检出代码 uses: actions/checkout@v4 + - name: 创建测试文件 + shell: powershell + run: | + New-Item -Path "$env:USERPROFILE\Documents\Powershell\Microsoft.PowerShell_profile.ps1" -ItemType File -Force + New-Item -Path "$env:USERPROFILE\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1" -ItemType File -Force + - name: 安装依赖 run: | choco install just diff --git a/lib/xy.h b/lib/xy.h index 50915bfc..687be415 100644 --- a/lib/xy.h +++ b/lib/xy.h @@ -9,7 +9,7 @@ * | Mikachu2333 * | * Created On : <2023-08-28> - * Last Modified : <2025-08-09> + * Last Modified : <2025-08-10> * * xy: 襄阳、咸阳 * Corss-Platform C11 utilities for CLI applications in mixed @@ -19,7 +19,7 @@ #ifndef XY_H #define XY_H -#define _XY_Version "v0.1.5.5-2025/08/09" +#define _XY_Version "v0.1.5.5-2025/08/10" #define _XY_Maintain_URL "https://github.com/RubyMetric/chsrc/blob/dev/lib/xy.h" #define _XY_Maintain_URL2 "https://gitee.com/RubyMetric/chsrc/blob/dev/lib/xy.h" @@ -66,6 +66,7 @@ bool xy_enable_color = true; #define xy_on_bsd false #define xy_os_devnull "nul" #include + #include #define xy_useutf8() SetConsoleOutputCP (65001) #elif defined(__linux__) || defined(__linux) @@ -784,21 +785,55 @@ _xy_os_home () return home; } + +static char * +_xy_win_documents () +{ +#ifdef _WIN32 + char documents_path[MAX_PATH]; + HRESULT result = SHGetFolderPathA (NULL, CSIDL_MYDOCUMENTS, NULL, + SHGFP_TYPE_CURRENT, documents_path); + + if (SUCCEEDED (result)) + return xy_strdup (documents_path); + + return xy_2strjoin (xy_os_home, "\\Documents"); +#else + return NULL; +#endif +} + #define xy_win_powershell_profile _xy_win_powershell_profile () #define xy_win_powershellv5_profile _xy_win_powershellv5_profile () + +// 更新 PowerShell 配置文件路径函数 static char * _xy_win_powershell_profile () { - return xy_2strjoin ( - xy_os_home, "\\Documents\\PowerShell\\Microsoft.PowerShell_profile.ps1"); + if (xy_on_windows) + { + char *documents_dir = _xy_win_documents (); + char *profile_path = xy_2strjoin (documents_dir, "\\PowerShell\\Microsoft.PowerShell_profile.ps1"); + free (documents_dir); + return profile_path; + } + else + return NULL; } -char * + +static char * _xy_win_powershellv5_profile () { - return xy_2strjoin ( - xy_os_home, - "\\Documents\\WindowsPowerShell\\Microsoft.PowerShell_profile.ps1"); + if (xy_on_windows) + { + char *documents_dir = _xy_win_documents (); + char *profile_path = xy_2strjoin (documents_dir, "\\WindowsPowerShell\\Microsoft.PowerShell_profile.ps1"); + free (documents_dir); + return profile_path; + } + else + return NULL; } #define xy_zshrc "~/.zshrc" diff --git a/test/xy.c b/test/xy.c index 7c644141..325e9b5c 100644 --- a/test/xy.c +++ b/test/xy.c @@ -2,11 +2,12 @@ * SPDX-License-Identifier: MIT * ------------------------------------------------------------- * File Name : xy.c - * File Authors : Aoran Zeng - * Contributors : Nil Null + * File Authors : Aoran Zeng + * Contributors : Nil Null + * | Mikachu2333 * | * Created On : <2023-08-30> - * Last Modified : <2025-08-08> + * Last Modified : <2025-08-11> * * Test xy.h * ------------------------------------------------------------*/ @@ -97,6 +98,8 @@ main (int argc, char const *argv[]) assert (xy_dir_exist ("~")); if (xy_on_windows) { + say (xy_win_powershell_profile); + say (xy_win_powershellv5_profile); assert (xy_file_exist (xy_win_powershell_profile)); assert (true == xy_file_exist (xy_win_powershellv5_profile)); assert (xy_dir_exist ("C:\\Users"));