Skip to content

Latest commit

 

History

65 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Linnet

Linnet — Chinese and English, in one flow

Linnet(双韵)是一款为 macOS 打造的开源双语输入法。它把中文输入与 Smart English 放进同一个系统输入源:轻按 Shift 即可往返,Caps Lock 则随时进入不经过转换的原始 ASCII。

一个输入源,两种语言,一种连贯的输入体验。

Note

当前正式 Release 只提供一个完整安装包 Linnet.pkg。它没有使用 Apple Developer ID 签名,也未经过公证;macOS 会要求用户手动确认信任。SHA-256 直接写在同一 Release 的说明中,Core 与语言数据组件则位于同仓库、明确标注的更新频道,不再与普通用户下载混在一起。

下载最新版 Linnet.pkg

产品体验 · 安装 · 使用指南 · 设置 · 隐私 · 参与贡献

为什么选择 Linnet

  • 中英自然切换:中文与 Smart English 共用一个 macOS 输入源,不用在系统输入法列表里来回寻找。
  • 完整的中文体验:内置全拼与七种双拼方案,共用同一套中文候选、学习数据和本地语言模型。
  • 真正面向英文输入:Smart English 提供补全、拼写建议、IPA、中文释义、上下文预测与连续输入处理,同时始终保留原始输入。
  • 离线且可掌控:个人词、学习数据、Text Expander 和备份默认保存在本机;启用后,macOS 通过 Linnet 固定的 iCloud Drive/Linnet 目录同步 Rime 学习词。
  • 原生 macOS 产品:菜单栏状态、候选窗与 Settings 形成统一体验,并提供浅色、深色和多套候选主题。

基于成熟上游,由 Linnet 精校与增强

Linnet 复用 Squirrel、librime、万象、RIME-LMDG、rime-ice 与 Hallelujah 的成熟能力,但不把上游直接拼装成产品。上游版本和输入摘要会被锁定;每次更新先在本地生成、比较并通过候选、数据和交互测试,再进入发布版本。Linnet 目前在这些基础上完成了:

  • 中文精校:以万象词表和 LTS 语法模型为核心,保留八种全拼/双拼的一致词库与学习数据;通过可审计的审核表修正已确认的读音、错码与候选顺序,而不是运行时猜测或无差别合并其他中文词库。
  • 英文数据整理:从 Hallelujah 与 rime-ice 的锁定输入中选择词频、发音、中文释义和补充词条,经过确定性归一化、去重、格式检查和人工质量审核后生成 Linnet 的英文数据。
  • 双语排序与输入语义:在中文候选与明确英文单词发生碰撞时,结合当前拼音方案、完整编码、静态词频与学习结果决定顺序;补全、纠错、预测、大小写、Space/Return、数字键、方向键和原始输入都由 Linnet 的同一交互合同约束。
  • macOS 产品增强:在 Squirrel/librime 运行时之上提供单输入源三状态、光标旁状态提示、候选详情、七套主题、原生 Settings、个人数据管理,以及首次注销后无需再次注销的 Core 更新路径。

具体上游版本、选取范围、修改方式和许可证见第三方来源说明开发指南

产品体验

一个输入源,三个明确状态

状态 菜单栏 适合场景
中文 全拼或当前双拼、中文候选、本地语法模型
Smart English En 英文补全、纠错、释义、发音与上下文预测
原始 ASCII A 代码、密码、终端和任何不希望被转换的文本

独立轻按左 Shift 或右 Shift,在中文与 Smart English 之间切换;Caps Lock 进入或退出原始 ASCII。组合键、Shift 加字母以及长按 Shift 都不会误触发模式切换。 若切换前仍有未上位的拼音或英文,Linnet 会先原样提交这些字母,不会替用户选择中文候选或英文补全。

Linnet 中文、Smart English 与原始 ASCII 三种输入状态的真实光标提示

由当前 SquirrelPanel / SquirrelView 生成的真实光标旁状态提示;菜单栏同步显示 /EnA

中文输入

Linnet 首次使用默认全拼,也可以在 Settings 中选择自然码、小鹤、微软、搜狗、智能 ABC、紫光或拼音加加。八种方案共享中文词库与学习数据,切换方案不需要重新建立个人词频。

中文候选支持横排或竖排、每页 3/5/7/9 项以及滚动或临时展开浏览。数字键可直接选择候选,鼠标、方向键、Page Up / Page Down 与候选窗按钮负责浏览;逗号、句号等遵循中英文标点状态,/+= 等普通运算符直接交给当前应用。

常用辅助入口包括:

  • Shift+V:符号命令;
  • U + 十六进制码点:Unicode 输入;
  • cC + 表达式:本地计算器;
  • uU + 全拼:部件拆字查询;
  • ;| + 当前拼音编码:在中文模式中反查英文。

Smart English

Smart English 适合连续英文写作,也适合在中文工作流中临时输入术语:

  • 前缀补全、拼写建议与下一词预测;
  • 可选 IPA 和中文释义;
  • 保留首字母大写或全大写;
  • Space、Return、数字键和方向键均可按当前候选状态提交;Space 上屏时是否自动附加空格可在 Settings 中配置;
  • URL、邮箱、路径、版本号和代码标识符尽可能保持原文;
  • 原始输入始终作为安全候选,不会被建议静默替换。

Tab 可以设为智能接受、候选导航,或完全交给当前应用。按 Esc 可关闭本次预测并清除当前英文上下文。

Linnet 拼音反查英文与 Smart English 的真实候选窗

由当前候选窗渲染链生成;输入串、候选、选中态和释义均使用真实产品布局。

外观与个性化

候选窗口提供宣纸、月华、青岩、陶印、雾青、原生玻璃和墨朱七套主题,每套都包含浅色与深色版本。中文与英文可以分别选择横排或竖排;字体、字号、候选数量和展开方式也可以独立调整。

Linnet 七套候选窗主题的 Light 与 Dark 实际渲染

由当前 data/squirrel.yaml 通过 SquirrelView 生成的 20pt 实际渲染;透明度和系统材质会随 macOS 外观及当前应用背景变化。

除了输入外观,Linnet 还支持:

  • 自定义词;
  • 按完整单词禁用英文候选;
  • x; 开头的 Text Expander,例如 x;addr
  • 中文、英文学习数据的独立开关与清理;
  • 个人数据导入、导出、自动备份与恢复。
  • 通过产品固定的 iCloud Drive/Linnet 目录增量同步中英文学习词,无需选择文件夹;自动检查严格限制为每小时最多一次,完整个人数据另以手动恢复归档传输。

系统要求

  • Apple Silicon Mac(arm64);
  • macOS 13 或更高版本;
  • Settings 支持 English 与简体中文;
  • 候选输出支持简体与繁体切换。

安装

获取社区版本

请从项目的 Latest Release 只下载一个文件:Linnet.pkg。进入下载目录后计算哈希:

shasum -a 256 Linnet.pkg

输出必须与同一 Release 说明中列出的 64 位 SHA-256 完全一致。Linnet 安装到当前用户目录,不需要管理员权限,也不会安装守护进程、启动项或特权辅助程序。

首次启用

  1. 在 Finder 中按住 Control 点击(或右键点击)已校验的 Linnet.pkg,选择 打开,再次确认 打开。若系统没有显示该选项,请打开 系统设置 → 隐私与安全性,在 Linnet 的拦截提示旁选择 仍要打开,然后返回安装器。
  2. 在 macOS 安装器中依次选择 继续 → 安装并等待“安装成功”。Linnet 只安装到当前用户的 ~/Library/Input Methods/Linnet.app;不要把 App 手工拖动或复制到其他目录。
  3. 保存工作,注销当前 macOS 账户并重新登录。这一步只在第一次安装时执行,用于让 macOS 完成输入源登记;以后安装 Core 更新不需要再次注销。
  4. 重新登录后打开 系统设置 → 键盘 → 文本输入 → 编辑。如果列表中已有 Linnet,确认它已启用;如果没有,点击 +,搜索或找到 Linnet,选择后点击 添加,并按 macOS 提示允许该输入源。
  5. 点击菜单栏输入菜单或按系统的输入源切换快捷键,选择带小鸟图标的 Linnet。这一步只选择 Linnet 输入源,不是在系统列表中分别添加中文和英文。
  6. 确认菜单栏显示 /,输入拼音可以提交中文候选;独立轻按 Shift 应显示 En 并输入英文,Caps Lock 应显示 A;输入菜单中的 Settings 应能打开设置窗口。

已经完成过上述首次安装的用户,后续只使用对应 core-v<version> 页面的 Core 安装包;更新不会删除或重新添加输入源,也不需要再次注销。安装程序只更新磁盘文件,不停止正在运行的 Host,因此不会断开 TextEdit、Teams、浏览器或其他应用的输入连接,也不要求退出这些应用。安装后打开 Settings → 数据 → 版本,可分别查看“已安装”和“正在运行”的版本与 revision。可以继续使用当前 Host;若页面提供“应用已安装的更新”,可按提示先从 macOS 菜单切换到其他输入法并关闭本次登录期间使用过 Linnet 的其他应用,再由用户主动应用。Linnet 不会替用户关闭应用或程序化切换输入源;无法证明安全时会保留当前 Host,新 Core 在下次登录或重启后生效。

Linnet 不会自动点击系统授权或替用户选择输入源。社区安装包没有 Apple Developer ID 签名或公证,因此“无法验证开发者”是预期提示;手动信任只应在文件名和同一 Release 说明中的 SHA-256 都校验成功后进行。不要关闭 Gatekeeper、不要清除隔离属性,也不要执行来源不明的安装命令。若系统报告校验和不一致、文件损坏或恶意软件,请停止安装。

使用指南

切换输入状态

  • 中文 ↔ Smart English:独立轻按左 Shift 或右 Shift;
  • 任意模式 ↔ 原始 ASCII:Caps Lock;
  • 当前有组词时,Linnet 会按标准输入规则处理现有内容后再切换;
  • Shift+字母、带 Command/Option/Control 的 Shift 组合键与长按 Shift 不切换模式。

系统输入菜单中的小鸟代表唯一的 Linnet 输入源;EnA 才是当前输入状态。

拼音反查英文

在中文模式中,先输入 Settings 选择的触发键,再输入当前全拼或双拼编码。默认触发键是 ;,备用触发键是 |

;suanfa  → algorithm

选择自然码后,同一示例可以写成 ;srfa。Smart English 中也可直接输入纯字母拼音编码查看英文候选;普通英文候选仍排在前面,拼音结果不会取代原始输入。

自定义词与 Text Expander

  • 自定义词由显示文本和小写 Rime code 组成,会进入正常候选和学习流程。
  • 禁用英文词按大小写不敏感的完整词隐藏静态、学习、纠错、发音和预测候选。
  • Text Expander触发器必须以 x; 开头;未知触发器按原文保留,展开值不会再经过大小写、空格或释义处理。

设置

从 macOS 输入菜单选择 Settings。设置窗口内嵌在 Linnet.app 中,不会作为独立应用安装,也不会常驻 Dock。

标签 可以管理的内容
外观 七套主题、浅色/深色、字体、字号、候选数量、横排/竖排与候选展开方式
输入 全拼/双拼、中文学习、简繁、Emoji、标点、辅助码和拼音反查触发键
词典 自定义词、禁用英文词、Text Expander,以及带自动备份的安全应用
英文 自动大写、IPA、中文释义、上下文预测、拼写建议、英文学习、Space 尾随空格和 Tab 行为
数据 组件版本、iCloud Drive 学习词同步、完整恢复归档、数据导入导出、学习数据清理、备份恢复与隐私处理后的诊断

外观预览会使用所选主题、字号与布局;需要改变输入行为的选项在点击 Apply Changes 后生效。请不要手工编辑 Linnet 生成的 linnet_user.custom.yamlsquirrel.custom.yamldefault.custom.yaml 或 schema custom 文件。

Settings 每次打开时会从同一 GitHub 仓库读取一个经过校验的小型 Catalog,并在“数据 → 版本”中安静显示“已是最新”、Core 更新或语言数据更新;同一区域还会比较磁盘上已安装的 Core 与当前 Host 的版本、build 和 revision,避免把“安装成功”误报成“新代码已经运行”。输入进程始终离线;检查不会下载大型词库,也不会弹出系统通知。只有用户明确点击语言数据更新后,Settings 才会下载并校验语言包,再通过现有事务原子激活。

升级与卸载

Linnet 0.1 系列不在后台静默安装未经过 Apple Developer ID 签名和公证的 Core/App。Settings 会检查并提醒新版本;点击 View Core Update / 查看核心更新 会打开同仓库对应的 Core 页面,由用户核对 SHA-256 并按 macOS 提示确认安装。 App 内部使用长期固定的免费 CMS 身份;旧 ad-hoc 版完成一次迁移后,后续同一 身份的 Core 更新无需再次注销或重新添加输入法。安装与更新永远不会要求发布 Keychain 密码;若看到此类提示,应取消并向项目报告。正式 版本页只保留完整安装包;core-v<version> 预发布页服务已有用户免注销更新, data-<sequence> 预发布页服务 Settings 的语言数据频道。两者都不会成为 Latest Release,也不会干扰首次安装下载。

已经完成首次安装和一次注销的用户,打开同版本 core-v<version> 页面,只下载:

  • Linnet-<version>-arm64-Core-community-beta.pkg
LINNET_VERSION='X.Y.Z'
shasum -a 256 "Linnet-${LINNET_VERSION}-arm64-Core-community-beta.pkg"

输出必须与 Core 更新页说明中的 SHA-256 完全一致。随后在 Finder 中按住 Control 点击 Core 安装包并选择 打开。Core 只更新 App,保持已安装语言包、个人数据、输入源状态和现有应用的输入连接,不重新注册输入源,也不要求再次注销或退出正在使用的应用。安装结束后在 Settings → 数据 → 版本 检查“已安装”和“正在运行”的身份;两者暂时不同是预期状态。可以继续使用当前 Host,也可以按页面提示主动应用;安全条件不满足时不会退出 Host,新 Core 在下次登录或重启后生效。已有安装不要使用 Linnet.pkg;Complete 会拒绝覆盖并提示改用 Core。若 Core 报告身份、版本或安装状态不一致,请停止,不要手工复制 App 或改用 Complete 绕过检查。

卸载工具也在对应的 core-v<version> 更新页。下载并核对页面中的 SHA-256 后,先查看计划:

LINNET_VERSION='X.Y.Z'
"./Linnet-${LINNET_VERSION}-Uninstall.command" --print-plan
"./Linnet-${LINNET_VERSION}-Uninstall.command"

默认卸载会删除应用、语言包和生成数据,但保留个人词、学习数据、Text Expander、备份与偏好。完成后注销并重新登录。

只有确定不再需要任何 Linnet 用户数据时,才使用不可恢复的完整清理:

"./Linnet-${LINNET_VERSION}-Uninstall.command" --purge-user-data

故障排查

系统找不到 Linnet

  • 确认安装位置是 ~/Library/Input Methods/Linnet.app
  • 完成一次真正的注销并重新登录;
  • 系统设置 → 键盘 → 文本输入 → 编辑 中手动添加并允许 Linnet;
  • Control-Space 只会轮换 macOS 已启用的输入源,Linnet 不接管这个系统快捷键。

只能输入字母

  • 菜单栏为 A:关闭 Caps Lock;
  • 菜单栏为 En:轻按 Shift 返回中文;
  • 没有 /:在 Settings → 输入选择中文方案并应用,再重新选择 Linnet。

Settings 无法应用

不要手工修改生成的 YAML。前往 数据 → Diagnostics 刷新并复制诊断;公开前仍需人工检查文本与截图,避免包含个人信息。

报告问题

请提供 macOS 版本、Mac 芯片、Linnet 版本、下载文件 SHA-256、当前状态、Rime 方案、发生问题的应用和最小复现输入。不要提交个人词典、学习数据库、私钥、证书密码或完整用户目录。

隐私

Linnet 没有账户体系、遥测、广告或分析 SDK,也不调用在线翻译、在线拼写或生成式模型。键入内容与个人输入数据留在本机:

~/Library/Application Support/Linnet/

只有用户在 Settings 中明确选择导入时,Linnet 才会读取其他 Rime 或 Hallelujah 数据。导出文件可能包含用户主动选择的个人数据,需由用户自行妥善保存与删除。

iCloud Drive 学习词同步由用户显式启用,但目录固定为 iCloud Drive/Linnet,不提供目录选择器。Linnet 把其中的 Linnet-Rime-Sync 配置为 Rime 的标准 sync_dir,由 Rime 按设备导出并增量合并中英文学习词,同时明确关闭 Rime 的自动配置备份;自动周期最多每小时一次,输入框或数据事务忙时会延后,用户也可主动点按“立即同步”。Linnet 不实现第二套词频或冲突算法,也不直接访问 iCloud 账户;云端传输由 macOS 的 iCloud Drive 完成。

自定义词、停用词、Text Expander 和设置不属于 Rime 学习词同步。需要迁移这些数据时,可手动上传或审阅 Linnet-Full-Backup.linnet-data;导入仍需确认,并会先创建本地备份。

只有 Settings 会联网:打开设置时向 GitHub 请求固定 Catalog 以检查版本,用户明确点击数据更新后才下载语言包。第三方下载镜像可能看到 IP、请求时间与公开文件 URL,但 Linnet 不会向 GitHub 或镜像发送个人词典、学习数据、备份、诊断或凭据。

参与贡献

构建 Linnet 需要 Apple Silicon Mac、macOS 13+、完整 Xcode、Git 和 ripgrep。项目主要使用 Swift/SwiftUI、C++、Shell 与 Ruby,不携带 Python 运行时。

./action-build.sh release
tests/verify_development.sh

已有完整依赖缓存时,可以离线构建:

no_download=1 ./action-build.sh release

普通开发不需要签名证书,也不需要把本地构建注册为系统输入法。目录结构、数据生成、上游同步、测试层级与本机验收方法请阅读开发指南;打包、签名和公开发布流程请阅读发布指南

版本、来源与许可证

当前版本是 0.1.9(2026-08-28)。完整的用户可见变化见版本记录

Linnet 是从 Squirrel 修改而来的独立社区发行版,不代表任何上游项目的官方发行。本仓库已修改上游代码与数据;首个公开修改版日期为 2026-08-20。主要关系如下:

上游来源 Linnet 的使用与修改 许可证摘要
Squirrel / librime macOS 输入法与 Rime 运行时基础;修改了产品身份、单输入源双语工作流、候选交互、原生 Settings 与发行打包 GPL-3.0-only(Squirrel);BSD-3-Clause(librime)
Rime Wanxiang 中文词典核心与八种全拼/双拼布局;锁定上游表,并应用经过审核的读音、错码与排序修正 CC BY 4.0
RIME-LMDG 锁定并离线打包 Wanxiang LTS 语法模型 CC BY 4.0
rime-ice / HallelujahIM 选取英文、部件、符号、Emoji/OpenCC、Lua、词频、发音与释义输入;经确定性归一化和人工审核生成 Linnet 数据 GPL-3.0-only;精确适用范围见第三方声明
librime-lua、librime-octagram、librime-predict 及其他运行时依赖 随 App 静态集成或嵌入,未作为第二套产品来源 以第三方声明、发行 NOTICE 与 SBOM 为准

完整的来源范围、修改说明和许可证关系见第三方来源、修改与许可证,许可证文本见 LICENSES/。正式发行包还会携带绑定到精确版本与提交的 NOTICE.mdSBOM.spdx.jsonVERSION.json 和许可证文件,避免 README 摘要与实际交付内容漂移。

Linnet 自有源码采用 GPL-3.0-or-later 许可证。

About

Linnet (双韵) — native offline Chinese & Smart English input method for macOS, powered by Rime/Squirrel, with pinyin, shuangpin and Shift switching. 原生离线中英双语输入法。

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages