@@ -2,19 +2,22 @@ package ohMyRime
22
33import (
44 "fmt"
5- "github.com/goccy/go-yaml"
65 "os"
6+ "os/exec"
77 "path/filepath"
88 "rime-mate/util"
99 "runtime"
1010 "slices"
11+ "strings"
12+
13+ "github.com/goccy/go-yaml"
1114)
1215
1316func loadResourceURLs () (string , string ) {
1417 rimeDir , err := getCrossPlatformRimeDir ()
1518 if err != nil {
16- util .Error ("获取RIME配置目录失败 : " + err .Error ())
17- rimeDir = util . TransformPath ( "~/Library/Rime/" )
19+ util .Error ("获取 Rime 配置目录失败 : " + err .Error ())
20+ os . Exit ( 1 )
1821 }
1922
2023 langModelPath := filepath .Join (rimeDir , "wanxiang-lts-zh-hans.gram" )
@@ -31,7 +34,11 @@ func getCrossPlatformRimeDir() (string, error) {
3134
3235 switch runtime .GOOS {
3336 case "darwin" :
34- return filepath .Join (home , "Library/Rime" ), nil
37+ path := filepath .Join (home , "Library/Rime" )
38+ if _ , err := os .Stat (path ); err == nil {
39+ return path , nil
40+ }
41+ return "" , fmt .Errorf ("未找到 macOS 下的 Rime 配置目录" )
3542 case "linux" :
3643 paths := []string {
3744 filepath .Join (home , ".config/ibus/rime" ),
@@ -42,7 +49,50 @@ func getCrossPlatformRimeDir() (string, error) {
4249 return p , nil
4350 }
4451 }
45- return "" , fmt .Errorf ("未找到Linux下的RIME配置目录,请检查是否安装IBus-RIME/Fcitx5-RIME" )
52+ return "" , fmt .Errorf ("未找到 Linux 下的 Rime 配置目录,请检查是否安装 iBus-Rime/Fcitx5-Rime" )
53+ case "windows" :
54+ cmd := exec .Command (
55+ "reg" ,
56+ "query" ,
57+ `HKCU\Software\Rime\Weasel` ,
58+ "/v" ,
59+ "RimeUserDir" ,
60+ )
61+ output , err := cmd .Output ()
62+ if err == nil {
63+ lines := strings .Split (string (output ), "\n " )
64+ for _ , line := range lines {
65+ line = strings .TrimSpace (line )
66+ if line == "" || ! strings .Contains (line , "RimeUserDir" ) {
67+ continue
68+ }
69+ // Typical format: RimeUserDir REG_SZ C:\Path\To\Directory
70+ parts := strings .Fields (line )
71+ if len (parts ) < 2 {
72+ continue
73+ }
74+ valueType := parts [1 ]
75+ typeIndex := strings .Index (line , valueType )
76+ if typeIndex == - 1 {
77+ continue
78+ }
79+ valuePart := strings .TrimSpace (line [typeIndex + len (valueType ):])
80+ if valuePart == "" {
81+ continue
82+ }
83+ regPath := valuePart
84+ if _ , err := os .Stat (regPath ); err == nil {
85+ return regPath , nil
86+ }
87+ }
88+ }
89+
90+ path := filepath .Join (home , "AppData" , "Roaming" , "Rime" )
91+ if _ , err := os .Stat (path ); err == nil {
92+ return path , nil
93+ }
94+
95+ return "" , fmt .Errorf ("未找到 Windows 下的小狼毫 (Weasel) Rime 配置目录" )
4696 default :
4797 return "" , fmt .Errorf ("不支持的系统: %s" , runtime .GOOS )
4898 }
0 commit comments