This commit is contained in:
2026-09-12 13:59:12 +08:00
commit 941ce4baab
71 changed files with 13037 additions and 0 deletions

99
README.md Normal file
View File

@@ -0,0 +1,99 @@
# 剪贴板
基于 Electron 的轻量剪贴板管理器,灵感来自 [Ditto](https://github.com/sabrogden/Ditto)。
## 快速开始
环境要求Windows 10 / 11 · Node.js ≥ 18
```bash
npm install
npm start
```
启动后程序常驻系统托盘。复制任意文本或图片即自动记录;单击托盘图标唤出窗口,选中条目后双击或按回车写入系统剪贴板,再切到目标窗口 `Ctrl+V` 粘贴。
如安装时 `better-sqlite3` 编译失败,可安装 [Visual Studio Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/) 后执行 `npm run rebuild`
## 功能
- **自动记录**:默认每秒轮询系统剪贴板,文本和图片都自动入库
- **收藏**:独立 Tab 永久存放,源记录被删除后仍可复制,上限 1000 条
- **搜索**:实时过滤文本,支持中文子串
- **置顶**:点过「复制」的项自动置顶,避免被自动清理或「清空历史」误删
- **全局唤起**:默认 `Ctrl+Alt+V`,设置里可改或禁用
- **主题**6 套主题 + 5 种强调色,支持跟随系统
- **开机自启动**、单实例、窗口置顶切换
## 快捷键
全局:默认 `Ctrl+Alt+V` 唤起或隐藏历史窗口(设置中可更改或禁用)。
主窗口内:
| 快捷键 | 行为 |
| --- | --- |
| `↑` `↓` | 上下选择 |
| `PageUp` `PageDown` | 翻页 |
| `Home` `End` | 跳到首项或末项 |
| `Enter` | 复制当前选中项 |
| `1` ~ `9` | 直接复制对应项 |
| `Ctrl+L` | 聚焦搜索框 |
| `F5` | 刷新列表 |
| `Esc` | 清空搜索或隐藏窗口 |
| `F12` | 开发者工具 |
设置窗口:`←` / `→` 切换标签页,`Esc` 关闭。
## 数据存储
默认存放在 `D:\Clipboard Data`,独立于项目目录:
```
D:\Clipboard Data\
├── config.json
├── history.db
└── favorites.db
```
- D 盘不可用时自动降级到 `%USERPROFILE%\Clipboard Data`
- 设置 → 「更改…」可迁到其他位置;「打开文件夹」直达目录
- 启动前设 `CLIPBOARD_APP_DATA_DIR=D:\some\dir` 可临时覆盖
- 首次启动会自动从 `%USERPROFILE%\.clipboard-app` 迁移历史数据
## 开发
```bash
npm test # 单元测试(自动发现 test/*.test.js
npm run test:ui # UI 测试(需 Electron 窗口)
npm run test:all # 上面两套一起跑
npm run rebuild # 重新编译 better-sqlite3 到当前 Electron ABI
npm run build # 打包为 NSIS 安装包
npm run build:dir # 仅生成解压目录
```
测试由 `test/run.js` 自动发现,新增用例放入 `test/<name>.test.js` 即可。
## 常见问题
**点选条目后没有自动粘贴**
设计如此:只写入系统剪贴板,需手动 `Ctrl+V`。避免隐藏窗口导致的焦点闪烁。
**全局快捷键无效**
组合键被其他程序占用。在设置中更换档位,或释放占用方后重启。
**看不到托盘图标**
Windows 11 默认折叠托盘图标,需在「设置 → 系统 → 通知」中开启。
**数据库占用或损坏**
可直接删除 `D:\Clipboard Data` 下的 db 文件,重启后自动重建(配置和收藏数据除外)。
## 已知限制
- 不自动粘贴,必须手动 `Ctrl+V`
- 收藏上限 1000 条
## 致谢
- 灵感来自 [Ditto](https://github.com/sabrogden/Ditto)
- 开发者:[关济寰](https://www.guanjihuan.com/about)