diff --git a/README.md b/README.md index 729ab34..8e7199f 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ > - [查看 v1 老版本](./src/v1/README.md) (此版本已经没啥用了,不再更新) -**如果 `InputTip` 对你有所帮助,请考虑给它一个 Star ⭐** +[**如果 `InputTip` 对你有所帮助,请考虑给它一个 Star ⭐**](#stars) ### 新的变化 @@ -143,6 +143,10 @@ > [!Tip] > 你可以自行查看源代码并编译 `InputTip` +> [!Warning] +> +> 如果修改了项目代码,需要先编译 `InputTip.JAB.JetBrains.ahk`,再编译 `InputTip.ahk` + 1. 克隆项目仓库到本地 ```shell @@ -323,6 +327,7 @@ - 如果正在使用 **讯飞**输入法,你需要选择它 - `手心输入法` - 如果你正在使用 **手心**输入法,你需要选择它 + - 兼容性一般,因为获取到的输入法状态可能有误,导致基于此的相关功能都可能有问题。 - `自定义` - [关于设置输入法模式中的自定义](https://inputtip.pages.dev/FAQ/about-input-mode-custom) @@ -343,8 +348,19 @@ - 之后看到了 [RedDot - Autumn-one](https://github.com/Autumn-one/RedDot) 和 [language-indicator - yakunins](https://github.com/yakunins/language-indicator) 的设计,通过不同颜色加上小符号来判断不同输入法状态 - InputTip 也参照了这样的设计,因为这样的实现很简单,其实就是 [InputTip v1](./src/v1/README.md) 中带文字的方块符号,去掉文字,加上不同的背景颜色 +### Stars + +**如果 `InputTip` 对你有所帮助,请考虑给它一个 Star ⭐** + + + + + stargazer-widget + + + ### 赞赏支持 -Buy Me a Coffee at ko-fi.com +Buy Me a Coffee at ko-fi.com ![赞赏支持](https://abgox.pages.dev/support.png) diff --git a/src/v2/CHANGELOG.md b/src/v2/CHANGELOG.md index 612bd54..3c57379 100644 --- a/src/v2/CHANGELOG.md +++ b/src/v2/CHANGELOG.md @@ -4,6 +4,14 @@ - 没有特别说明的版本都是修复问题 +## 2.28.6 + +- 完善了自动切换的逻辑 +- 修复了当设置快捷键切换状态后,频繁按下多次快捷键,状态切换有误的问题 +- 优化了「指定窗口自动切换状态」配置菜单 + - 当添加应用进程时,如果白名单中不存在,则同步添加到白名单中 +- 其他的修复和优化 + ## 2.28.5 - 限制同一个配置菜单只能存在一个,避免出现多个相同菜单,导致修改冲突 @@ -39,16 +47,6 @@ > [!warning] > > `v2.28.0` 会默认使用白名单机制 -> -> 由于配置迁移的问题,旧版本更新后,需要根据情况手动调整。(在 `v2.28.1` 中已修复) -> -> - 使用新的白名单机制: `托盘菜单` => `符号显示黑/白名单` => `设置「白」名单` -> - 继续使用黑名单机制: `托盘菜单` => `符号显示黑/白名单` => `使用「黑」名单` -> - 推荐使用白名单机制,精确指定应用进程,可以减少一些特殊窗口的兼容性问题 -> -> 白名单机制下,你需要先将 `InputTip.exe` 加入白名单,符号相关的配置更改才会实时生效 -> -> 如果是通过源代码运行 `InputTip.ahk`,就需要将启动 `InputTip.ahk` 的 AHK 进程加入白名单 - 托盘菜单中的配置项变化 - `暂停软件运行` 修改为 `暂停/运行` diff --git a/src/v2/InputTip.JAB.JetBrains.exe b/src/v2/InputTip.JAB.JetBrains.exe index 2fcb6ba..0baf881 100644 Binary files a/src/v2/InputTip.JAB.JetBrains.exe and b/src/v2/InputTip.JAB.JetBrains.exe differ diff --git a/src/v2/InputTip.ahk b/src/v2/InputTip.ahk index c0138de..cd707a1 100644 --- a/src/v2/InputTip.ahk +++ b/src/v2/InputTip.ahk @@ -64,7 +64,6 @@ gc := { } ; 配置菜单的字体大小 - fz := "s12" if (A_ScreenHeight < 1000 || A_ScreenWidth < 2000) { fz := "s10" diff --git a/src/v2/utils/IME.ahk b/src/v2/utils/IME.ahk index ec5d5bd..4041a9d 100644 --- a/src/v2/utils/IME.ahk +++ b/src/v2/utils/IME.ahk @@ -135,8 +135,11 @@ class IME { /** * 判断当前输入法状态是否为中文 - * 需要: DetectHiddenWindows 1 * @returns {Boolean} 输入法是否为中文 + * @example + * DetectHiddenWindows 1 ; 前置条件(不为1,可能判断有误) + * ;... + * MsgBox isCN() */ isCN() { return IME.GetInputMode().isCN @@ -145,8 +148,13 @@ isCN() { /** * 将输入法状态切换为中文 * @Tip 外部必须提供变量 useShift(是否使用 Shift 切换输入法状态) + * @example + * SetStoreCapsLockMode 0 ; 前置条件,确保大写锁定可切换 + * ; ... + * switch_CN() */ switch_CN(*) { + isShift := GetKeyState("Shift", "P") if (GetKeyState("CapsLock", "T")) { SendInput("{CapsLock}") } @@ -155,15 +163,25 @@ switch_CN(*) { IME.SetInputMode(1) } } - if (!GetKeyState("Shift", "P") && !isCN()) { - SendInput("{Shift}") + Sleep(50) + if (!isShift && !isCN()) { + SendInput("{LShift}") + Sleep(50) + if (!isCN()) { + SendInput("{RShift}") + } } } /** * 将输入法状态切换为英文 * @Tip 外部必须提供变量 useShift(是否使用 Shift 切换输入法状态) + * @example + * SetStoreCapsLockMode 0 ; 前置条件,确保大写锁定可切换 + * ; ... + * switch_EN() */ switch_EN(*) { + isShift := GetKeyState("Shift", "P") if (GetKeyState("CapsLock", "T")) { SendInput("{CapsLock}") } @@ -172,12 +190,21 @@ switch_EN(*) { IME.SetInputMode(0) } } - if (!GetKeyState("Shift", "P") && isCN()) { - SendInput("{Shift}") + Sleep(50) + if (!isShift && isCN()) { + SendInput("{LShift}") + Sleep(50) + if (isCN()) { + SendInput("{RShift}") + } } } /** * 将输入法状态切换为大写锁定 + * @example + * SetStoreCapsLockMode 0 ; 前置条件,确保大写锁定可切换 + * ; ... + * switch_Caps() */ switch_Caps(*) { if (!GetKeyState("CapsLock", "T")) { diff --git a/src/v2/utils/options.ahk b/src/v2/utils/options.ahk index 355399b..a2b1006 100644 --- a/src/v2/utils/options.ahk +++ b/src/v2/utils/options.ahk @@ -9,9 +9,8 @@ ListLines 0 KeyHistory 0 DetectHiddenWindows 1 InstallKeybdHook -InstallMouseHook CoordMode 'Mouse', 'Screen' SetStoreCapsLockMode 0 -;@AHK2Exe-SetVersion 2.28.5 -currentVersion := "2.28.5" +;@AHK2Exe-SetVersion 2.28.6 +currentVersion := "2.28.6" diff --git a/src/v2/utils/tray-menu.ahk b/src/v2/utils/tray-menu.ahk index f4adbf1..b9b0466 100644 --- a/src/v2/utils/tray-menu.ahk +++ b/src/v2/utils/tray-menu.ahk @@ -200,6 +200,7 @@ makeTrayMenu() { g.OnEvent("Close", yes) yes(*) { g.Destroy() + last := mode + 1 try { gc.mode.Value := mode + 1 } @@ -429,6 +430,7 @@ makeTrayMenu() { global useWhiteList := value restartJetBrains() } + g.AddEdit("xs Disabled", "如果使用「黑」名单,你需要承担未知的可能存在的窗口兼容性代价") _c := g.AddButton("xs w" bw, "设置「白」名单") _c.OnEvent("Click", set_white_list) _c.Focus() @@ -1478,6 +1480,20 @@ makeTrayMenu() { } else { writeIni(config, RowText) } + + ; 同步添加到白名单 + global app_show_state + _app_show_state := readIni("app_show_state", "") + if (!InStr(app_show_state, ":" RowText ":")) { + if (_app_show_state) { + _app_show_state .= ":" RowText + } else { + _app_show_state := RowText + } + app_show_state := ":" _app_show_state ":" + writeIni("app_show_state", _app_show_state) + } + global app_CN := ":" readIni('app_CN', '') ":" global app_EN := ":" readIni('app_EN', '') ":" global app_Caps := ":" readIni('app_Caps', '') ":" @@ -1489,6 +1505,7 @@ makeTrayMenu() { g_1.AddLink(, "要将进程") g_1.AddLink("yp cRed", RowText) g_1.AddLink("yp", "添加到哪一个自动切换列表中?") + g_1.AddLink("xs cRed", "如果选择添加且此应用不在白名单中,则会同步添加到白名单中") fn_CN(*) { _handle("CN") } @@ -1640,7 +1657,7 @@ makeTrayMenu() { gc.LV_add.ModifyCol(2, "AutoHdr") gc.LV_add.ModifyCol(3, "AutoHdr") tab.UseTab(2) - g.AddLink(, "如何使用这个管理面板?`n`n- 最上方的列表页显示的是当前系统正在运行的应用进程(仅前台窗口)`n- 双击列表中任意应用进程,就可以将其添加到下方任意列表中。`n- 如果需要更多的进程,请点击右下角的「显示更多进程」以显示后台和隐藏进程。`n- 也可以点击右下角的「通过输入进程名称手动添加」直接添加进程名称。`n- 下方分别是中文、英文、大写锁定这三个自动切换列表。`n- 在自动切换列表中的应用窗口被激活时,会自动切换到对应的输入法状态。`n- 双击列表中任意应用进程,就可以将它移除或者添加到其他列表中。`n`n- 举个例子: `n - 你可以双击上方正在运行的应用进程列表中的其中一个应用进程。`n - 然后在弹出的操作窗口中,选择将其添加到哪一个列表中。`n - 添加完成后,会在下方对应列表中显示,并实时生效。`n - 你也可以双击下方列表中的其中一个应用进程进行同样的操作。") + g.AddLink(, "如何使用这个管理面板?`n`n- 最上方的列表页显示的是当前系统正在运行的应用进程(仅前台窗口)`n- 双击列表中任意应用进程,就可以将其添加到下方任意列表中。`n- 如果需要更多的进程,请点击右下角的「显示更多进程」以显示后台和隐藏进程。`n- 也可以点击右下角的「通过输入进程名称手动添加」直接添加进程名称。`n- 下方分别是中文、英文、大写锁定这三个自动切换列表。`n- 在自动切换列表中的应用窗口被激活时,会自动切换到对应的输入法状态。`n- 双击列表中任意应用进程,就可以将它移除或者添加到其他列表中。`n- 如果选择添加且此应用不在白名单中,则会同步添加到白名单中。`n`n- 举个例子: `n - 你可以双击上方正在运行的应用进程列表中的其中一个应用进程。`n - 然后在弹出的操作窗口中,选择将其添加到哪一个列表中。`n - 添加完成后,会在下方对应列表中显示,并实时生效。`n - 你也可以双击下方列表中的其中一个应用进程进行同样的操作。") g.OnEvent("Close", fn_close) fn_close(*) {