你在 macOS 上用第三方输入法时,大概率遇到过这个场景:打完一长串英文,抬头一看全是拼音。macOS 经常悄无声息地把输入法从搜狗/鼠须管切回 ABC,而你毫无察觉 — 除非你把菜单栏那枚图标盯出个洞来。

于是花了几个晚上写了 typeNow

它干什么

输入法一切换,屏幕中央弹出一个半透明浮层,告诉你当前输入法名字。1.5 秒后自动淡出,不抢焦点,不用你操作任何东西。看一眼就够了。

支持中/英/日/韩四种标识: EN ,在状态栏也能看到缩写。

更多细节

位置记忆。 你可以拖动浮层到屏幕任意位置,下次它还会出现在那里。九宫格锚点定位也支持 — 上/下/左/右/四个角/居中,九选一。

跟随输入框。 开启后通过 Accessibility API 定位当前输入光标位置,浮层会出现在你正在打字的地方正上方。没授权辅助功能权限时自动降级为鼠标位置。

应用切换感知。 从微信切到终端、从浏览器切到 VS Code,浮层会弹出当前输入法状态。再也不用在每个窗口切换后先敲两个字试试是中文还是英文。

偏好设置

设置 默认值
显示时长 1.5s
浮层大小
透明度 70%
九宫格位置 居中
跟随输入框
聚焦时显示
开机自启
菜单栏显示
跟随系统外观

技术实现

纯 Swift + AppKit,没有第三方依赖。核心机制是利用 macOS 分布式通知中心监听 com.apple.Carbon.TISNotifySelectedKeyboardInputSourceChanged 通知 — 这是系统级输入法切换事件,延迟极低。

浮层用 NSPanel 实现,设置 nonactivating 避免抢焦点。淡入淡出动画用 NSAnimationContext,60fps 流畅。

项目结构精简,七个文件各司其职:

1
2
3
4
5
6
7
8
Sources/typeNow/
├── main.swift # 入口
├── AppDelegate.swift # 组装模块
├── InputMonitor.swift # 输入法监听
├── OverlayController.swift # 浮层控制
├── SettingsWindow.swift # 偏好设置
├── StatusBarManager.swift # 状态栏
└── ...

安装

1
2
3
git clone https://github.com/wlxweb/typeNow
cd typeNow
make app

把生成的 typeNow.app 拖入 /Applications。macOS 13+ 可用,Intel 和 Apple Silicon 都支持。

开源的初衷

这个需求说大不大 — 就是个浮层提醒。但如果你每天在中文和代码之间来回切输入法,这个小东西省下的纠错时间积少成多。而且,它不弹窗不打扰、不联网不收集数据、内存占用不到 20MB。

GitHub: wlxweb/typeNow · MIT License