Skip to content

[Request]: 我写了一个vscode的插件 可以直接改变光标颜色 #271

@momoca

Description

@momoca

描述这个功能请求

InputTip Cursor Sync

InputTip Cursor Sync 是一个运行在 Windows 上的 VS Code 扩展,用于根据当前输入状态自动切换编辑器光标颜色。

  • CN:中文输入状态
  • EN:英文输入状态
  • CapsCaps Lock 已开启

扩展本身不直接读取 IME 状态,而是监听系统临时目录中的一个状态文件,并在状态变化时更新 workbench.colorCustomizations.editorCursor.foreground

工作原理

  1. 外部脚本将当前输入状态写入 %TEMP%\inputtip-vscode-state.txt
  2. 扩展持续监听这个文件
  3. 当文件内容变成 CNENCaps 时,扩展立即更新光标颜色

这种设计把 IME 检测交给更适合处理 Windows 输入法状态的外部工具,VS Code 扩展侧只负责读取状态并应用颜色。

运行要求

  • Windows
  • VS Code 1.85.0 或更高版本
  • 一个持续写入 %TEMP%\inputtip-vscode-state.txt 的后台脚本

安装

  • 打开 VS Code
  • 打开扩展管理器(Ctrl + Shift + X),搜索 InputTip Cursor Sync 并安装

配置项

扩展提供以下三个配置项:

  • inputTipCursorSync.cnColor:输入状态为 CN 时的光标颜色
  • inputTipCursorSync.enColor:输入状态为 EN 时的光标颜色
  • inputTipCursorSync.capsColor:输入状态为 Caps 时的光标颜色

默认值如下:

{
  "inputTipCursorSync.cnColor": "#ff4d4f",
  "inputTipCursorSync.enColor": "#4096ff",
  "inputTipCursorSync.capsColor": "#52c41a"
}

与 InputTip 集成

如果你正在使用 InputTipAutoHotkey,可以创建一个 plugins/custom-ime-sync.ahk 文件,然后在主插件文件中引入它。

示例:

global __sync_last_state := ""
global __sync_file := A_Temp "\inputtip-vscode-state.txt"

SetTimer(BroadcastImeState, 50)

BroadcastImeState() {
    global __sync_last_state, __sync_file

    try {
        if (GetKeyState("CapsLock", "T")) {
            state := "Caps"
        } else {
            state := isCN() ? "CN" : "EN"
        }

        if (state = __sync_last_state) {
            return
        }

        __sync_last_state := state

        if FileExist(__sync_file) {
            FileDelete(__sync_file)
        }

        FileAppend(state, __sync_file, "UTF-8")
    }
}

然后在 InputTip.plugin.ahk 中加入:

#Include custom-ime-sync.ahk

注意事项

  • 扩展会更新全局配置 workbench.colorCustomizations
  • 如果其他扩展或你自己的设置也在修改 editorCursor.foreground,则以最后一次写入为准
  • 如果状态文件不存在,扩展不会报错,只会等待有效状态出现
  • 当前只识别 CNENCaps

故障排查

光标颜色没有变化

请检查以下几点:

  1. %TEMP%\inputtip-vscode-state.txt 是否存在
  2. 文件内容是否严格等于 CNENCaps
  3. 外部脚本是否仍在运行
  4. 扩展是否已在 VS Code 中安装并启用

License

当前仓库还没有包含 LICENSELICENSE.mdLICENSE.txt。如果你准备公开发布,建议先补齐许可证文件。

你正在使用什么 Windows 系统版本?

Windows 11

还有其他你想要补充的信息吗?

希望大家用的开心。

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions