From 9ffd6c414808baf79c85c6b82ba35c427000b3c2 Mon Sep 17 00:00:00 2001 From: amzxyz Date: Wed, 7 Jan 2026 00:46:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=B0=83=E6=95=B4=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/wanxiang.lua | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/lua/wanxiang.lua b/lua/wanxiang.lua index 11cf1ba..83fe241 100644 --- a/lua/wanxiang.lua +++ b/lua/wanxiang.lua @@ -142,19 +142,40 @@ end ---按照优先顺序获取文件:用户目录 > 系统目录 ---@param filename string 相对路径 ---@retur string | nil -function wanxiang.get_filename_with_fallback(filename) - local _path = filename:gsub("^/+", "") -- 去掉开头的斜杠 +-- 辅助函数:检测路径是否为绝对路径(以 / 或盘符开头) +local function is_absolute_path(path) + if not path then return false end + if path:sub(1, 1) == "/" or path:sub(1, 1) == "\\" then + return true + end + if path:match("^[a-zA-Z]:[\\/]") then + return true + end + return false +end - local user_path = rime_api.get_user_data_dir() .. '/' .. _path +function wanxiang.get_filename_with_fallback(filename) + local _path = filename:gsub("^[\\/]+", "") + local user_dir = rime_api.get_user_data_dir() + + if not is_absolute_path(user_dir) then + return filename + end + + local user_path = user_dir .. "/" .. _path if wanxiang.file_exists(user_path) then return user_path end - local shared_path = rime_api.get_shared_data_dir() .. '/' .. _path + local shared_dir = rime_api.get_shared_data_dir() + + if not is_absolute_path(shared_dir) then + return filename + end + local shared_path = shared_dir .. "/" .. _path if wanxiang.file_exists(shared_path) then return shared_path end - return nil end