Files
Quick-Paste/README.md
2026-09-16 21:19:32 +08:00

118 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Quick Paste
桌面悬浮的剪贴板工具:按分组管理常用句子,点一下就粘贴到当前正在输入的窗口。
写代码、做客服、写文案时总有几句话要重复敲——问候、结束语、固定回复、常用代码片段。把它做成常驻桌面的悬浮窗,分组整理好,一键贴到任意正在输入的窗口。
- 不抢焦点,点完继续干活
- 不挑场景浏览器、记事本、Office、微信、QQ、IDE 都能用
## 快速开始
需要 Node.js 18+。
```bash
npm install
npm start # 启动
npm run dist # 打包 NSIS 安装包到 dist/
```
`npm start` 走的是 `scripts/start.js` 而不是直接 `electron`Git Bash 等终端会把 `ELECTRON_RUN_AS_NODE=1` 注入子进程,让 Electron 退化成普通 Node.js 卡住。启动脚本会先清掉这个变量再 spawn。
## 主要功能
- 悬浮窗无边框、可拖拽;标题栏一键切换「始终置顶」
- 分组管理:右键重命名 / 删除 / 清空,分组与短语都可拖动重排,把短语拖到左侧分组即可换组
- 一键粘贴:点击 → 写剪贴板 → 自动 Ctrl+V
- 收藏 / 最近 / 使用计数;「最近」列表与使用计数都能在设置面板一键清空
- 实时模糊搜索,命中片段高亮
- 占位符:`{date}` `{time}` `{datetime}` `{weekday}` `{clipboard}`,编辑时实时预览;`\{xxx}` 反斜杠保留字面量
- 明暗主题、窗口透明度60100%)、粘贴时是否隐藏悬浮窗
- 侧栏可折叠(`Ctrl+B`
- JSON 导入导出:整库替换 或按 ID 合并
- 单实例锁
## 快捷键
弹窗打开时只响应 `Esc` / `Ctrl+Enter`;焦点在输入框时只响应 `Ctrl` / `Alt` 组合键和 `Esc`,普通字符不会触发。
| 类别 | 快捷键 | 作用 |
|---|---|---|
| 全局 | `Ctrl+Shift+V` | 唤出 / 收起悬浮窗 |
| 列表 | `↑` / `↓` | 上下移动选中项 |
| 列表 | `1` ~ `9` | 粘贴当前可见顺序的前 9 条 |
| 列表 | `Enter` | 粘贴选中的短语 |
| 列表 | `Alt+↑` / `Alt+↓` | 调整顺序 |
| 过滤 | `g` / `f` / `r` | 切换 全部 / 收藏 / 最近 |
| 过滤 | `/``Ctrl+F` | 聚焦搜索框 |
| 过滤 | `Esc` | 清空搜索 / 关闭弹窗 / 隐藏窗口 |
| 操作 | `Ctrl+N` / `Ctrl+G` | 新建短语 / 新建分组 |
| 操作 | `Ctrl+B` | 折叠 / 展开分组栏 |
| 操作 | `Ctrl+,` | 打开设置 |
| 操作 | `Ctrl+Enter` | 保存短语编辑 |
## 占位符
| 标签 | 展开为 |
|---|---|
| `{date}` | 当前日期,如 `2026-09-11` |
| `{time}` | 当前时间,如 `14:32` |
| `{datetime}` | 日期 + 时间,如 `2026-09-11 14:32` |
| `{weekday}` | 中文星期,如 `周四` |
| `{clipboard}` | 当前剪贴板内容 |
`{clipboard}` 的短语粘贴时会先快照原剪贴板再覆盖,避免读到自身写出去的内容。
想教别人用占位符时,写成 `\{date}` 会保留成字面量 `{date}`,不会被展开。
## 数据存储
| 系统 | 路径 |
|---|---|
| Windows | `%APPDATA%\quick-paste\data.json` |
| macOS | `~/Library/Application Support/quick-paste/data.json` |
| Linux | `~/.config/quick-paste/data.json` |
设置面板 → 数据 → 「打开」一键定位。写盘采用「先写临时文件再 rename」的原子化策略畸形 JSON 会自动尝试修复。
## 常见问题
**粘贴后窗口消失了?**
默认不会。走「隐藏 → 粘贴 → 重新显示」兜底有三种识别不到目标窗口、开了「粘贴时隐藏悬浮窗」、目标窗口拒绝被拉到前台。200ms 后会自动回来,嫌慢改 `main.js``PASTE_RESTORE_DELAY_MS`
**某些应用粘贴不上?**
部分 Electron / Chrome 内核应用为安全考虑忽略 SendKeys。普通应用都没问题。
**`Ctrl+Shift+V` 不起作用?**
可能被其它程序占用了。注册失败时主进程只会在终端打一行 warn应用照常运行——改用托盘图标唤出即可。要换快捷键设置面板 → 快捷键 → 录制。
**拖到副屏的窗口下次启动不见了?**
不会丢。启动时会按窗口中心点找最近的显示器,把窗口整体夹回该显示器的工作区;副屏拔掉 / 分辨率改了也能正常恢复。
**怎么完全退出?**
关闭按钮只隐藏到托盘。真正退出请右键托盘图标 → 退出。
## 项目结构
```
.
├── package.json
├── main.js # 主进程:窗口 / 托盘 / 模拟粘贴 / 单实例锁 / IPC
├── preload.js # contextBridge 暴露 window.api
├── renderer/
│ ├── index.html
│ ├── styles.css
│ └── renderer.js
├── scripts/
│ └── start.js # 清掉 ELECTRON_RUN_AS_NODE 后启动 Electron
├── icon.ico # 托盘 / 标题栏 / 安装包共用
├── .gitignore # 忽略 node_modules/ 与 dist/
└── README.md
```
`npm run dist` 会用 `electron-builder` 走 NSIS 打包,产物落在 `dist/` 下(`快速粘贴 Setup x.y.z.exe` 安装包 + `win-unpacked/` 免安装目录),仓库已通过 `.gitignore` 忽略。
## 许可证
MIT