Skip to content

Repository files navigation

InspIdea · 灵感卡片

InspIdea 6 套莫兰迪主题:首页速记 / 按日列表 / 全文搜索 / 按日预览 / 多端存储设置 / 存储槽切换

一款极简的跨平台灵感速记工具。一个热键呼出,写完回车即存,自动消失。

笔记以纯 Markdown 文件落盘到你自己指定的文件夹(本地目录 / Obsidian 库 / 网盘同步文件夹 / WebDAV),也可一键授权写入 Notion / Dropbox(OAuth,凭据存系统钥匙串),不上传任何服务器,不需要注册登录。


为什么用 InspIdea

对比 差异
vs 系统备忘录 全局热键秒级呼出,写完自动隐藏;文件是你自己的 .md,不锁在生态里
vs Obsidian Daily Notes 不用打开重型编辑器,几十 MB 内存、毫秒级唤起
vs Notion Quick Capture 不用登录、不用联网,隐私完全本地
vs 便签类工具 存的是标准 Markdown 文件,可被任意笔记软件二次消费

功能

  • 全局热键呼出:Windows Alt+Q / macOS Option+Q,可自定义
  • 回车即存:Enter 保存并隐藏,Esc 取消(中文输入法合成态不误触发)
  • 多存储槽位:同时写入本地文件夹 + WebDAV(坚果云等)+ Notion / Dropbox(OAuth 授权,Token 存系统钥匙串,不落盘)
  • 正文全文搜索:搜索命中后跳转到对应日期,自动定位到该条并居中高亮
  • 按日回看:列表按日期分组,每次加载 100 条,滑到 90% 自动加载下一批
  • 6 套莫兰迪主题:雾灰粉 / 鼠尾草绿 / 雾霾蓝 / 燕麦奶 / 灰豆紫 / 岩灰
  • 系统托盘常驻:点击托盘图标显隐,关闭窗口不退出
  • 失焦自动隐藏(Windows):点击其他窗口自动收回托盘
  • 呼出跟随光标(Windows):热键呼出时窗口出现在鼠标位置附近
  • 极小体积:Release 二进制 ~6 MB,MSI 安装包 ~3 MB

安装

Windows

Releases 下载:

  • InspIdea_x.x.x_x64_en-US.msi — 双击安装(推荐)
  • inspiration-idea.exe — 免安装直接运行(需系统已有 WebView2 Runtime,Win11 自带)

macOS

从 Releases 下载 .dmg,拖入 Applications。首次运行如提示"无法验证开发者":

xattr -cr /Applications/InspIdea.app

存储路径与数据格式

配置文件位置

平台 路径
Windows %APPDATA%\com.inspidea.app\settings.json
macOS ~/Library/Application Support/com.inspidea.app/settings.json

笔记文件

默认存储在 ~/Inspirations/,每条笔记一个独立文件:

Inspirations/
├── 20260803-a1b2c3d4.md
├── 20260803-e5f6a7b8.md
└── 20260804-c9d0e1f2.md

文件名格式 YYYYMMDD-<8位uuid>.md,内容格式:

[14:22] 周五前和供应商确认包装打样时间

为什么一条一个文件而不是按天追加? 单条独立文件写入后永不修改,网盘/Obsidian Sync 同步时零冲突;阅读器在 UI 层按日期聚合,体验上仍是"日记"形式。


配置 WebDAV(坚果云示例)

  1. 登录坚果云 → 账户信息 → 安全选项 → 添加应用密码
  2. InspIdea 设置 → 存储 → 点击槽位 2 → 选择 "WebDAV(坚果云等)"
  3. 填入:
    • 服务器地址:https://dav.jianguoyun.com/dav/你的文件夹/
    • 账号:坚果云登录邮箱
    • 应用密码:上一步生成的密码(不是登录密码
  4. 点保存 — 会先做一次连接验证,通过后才写入配置

接入 Notion

Notion 是"授权 + 选页面"两步走,比 WebDAV 多一步页面授权,照做即可:

第一步:在应用里发起授权

  1. InspIdea 设置 → 存储 → 点击一个空槽位 → 选择 "Notion"
  2. 在「Notion 父页面 URL」框中粘贴你想让笔记写入的那个页面的链接
    • 打开该页面 → 右上角「···」→ 「复制链接」,粘贴进来即可
    • 笔记会以子页面的形式写在这个页面下面,所以请选一个专门收纳灵感的页面(比如新建一个叫"灵感收件箱"的页面)
  3. 点「授权并接入」→ 浏览器会打开 Notion 授权页

第二步:在浏览器里完成授权(最容易漏的一步)

授权页会要求你明确勾选允许访问哪些页面,Notion 不会自动把整个工作空间交给应用:

  1. 在「Add pages & databases」搜索框中,找到并选中第一步填的那个父页面
    • Recents 列表里通常能直接找到最近编辑过的页面
  2. 确认它出现在 "Allow inspidea to access the following pages" 列表里
  3. 点蓝色允许按钮 → 页面提示授权成功 → 回到 InspIdea,槽位显示你的账号名即接入完成

为什么保存报 404? 九成是父页面没被授权。Notion 的访问控制以页面为单位:换父页面、或换个工作空间授权,都需要重新走一遍上面的页面选择。也可以随时在 Notion 里打开父页面 →「···」→「连接」→ 添加本应用来补授权。

工作空间说明

授权页左上角会显示当前工作空间(如"青阳轩辕's Notion")。如果你想写入另一个工作空间的页面,先在授权页右上角切换工作空间,再选页面——应用只能拿到你在授权时选中的那个工作空间里被勾选的页面。


接入 Dropbox

比 Notion 简单:无需选页面、无需复制链接,授权一次即可。

  1. InspIdea 设置 → 存储 → 点击一个空槽位 → 选择 "Dropbox" → 点「授权并接入」
  2. 浏览器登录 Dropbox 并允许 → 回到应用即接入完成
  3. 笔记以 .md 文件写入 Dropbox 的应用专属文件夹:Apps/InspIdea/(应用文件夹对其他应用隔离,只有 InspIdea 能读写)

macOS 首次保存时系统可能弹出钥匙串授权,输入开机密码点"始终允许"即可——这是应用把你的授权凭据安全存入系统钥匙串,Token 不会落盘到任何明文文件。


开发

# 前置:Node 22+、Rust stable、平台构建工具链
# Windows 需要 VS Build Tools (C++)
# macOS 需要 Xcode Command Line Tools

npm install
npm run tauri dev        # 开发模式
npm run tauri build      # 生产构建(出安装包)

测试

cargo test --manifest-path src-tauri/Cargo.toml   # Rust 单元测试(13 项)
npx tsc --noEmit                                   # TypeScript 类型检查
node test-slot.mjs                                 # 槽位逻辑验证

项目结构

src/                      前端 (React + TypeScript)
├── App.tsx               路由与状态编排
├── platform.ts           平台差异抽象层
├── components/           页面组件
│   ├── CardPage.tsx      主输入卡片
│   ├── ListPage.tsx      列表 + 搜索 + 懒加载
│   ├── ReaderPage.tsx    阅读器 + 定位高亮
│   └── SettingsPage.tsx  设置
└── hooks/                数据层
    ├── useSettings.ts    配置读写
    ├── useNotes.ts       笔记分页/搜索
    └── useAppWindow.ts   窗口行为

src-tauri/src/            后端 (Rust)
├── main.rs               装配 + 托盘 + 命令注册
├── config.rs             配置持久化 + schema 迁移
├── storage.rs            笔记落盘 + 分页 + 搜索 + WebDAV
├── hotkey.rs             全局热键注册与解析
└── window.rs             窗口显隐(平台条件编译)

Windows 适配经验总结

以下经验来自将本项目从 macOS 单平台扩展到 Windows 的过程,供跨平台 Tauri 项目参考:

平台差异处理原则

  • 所有平台差异用条件编译隔离:Rust 用 #[cfg(target_os = "windows")],前端用 IS_WINDOWS 运行时标志,CSS 用 .is-windows 作用域。不删除任何 macOS 逻辑。
  • 新增 tauri.windows.conf.json:Tauri 2 的平台覆盖配置机制,自动合并到主配置。用于设置 resizable: falseshadow: true、NSIS/MSI 打包参数等 Windows 专属项。

关键踩坑

问题 根因 解决方案
Cmd+Option+A 在 Windows 注册为 Win+Alt+A 与系统冲突 hotkey normalize 把 Cmd 映射为 Super(= Win 键) 按平台给不同默认值 + schema 迁移自动替换旧默认
无边框窗口顶部拖拽"变形" resizable: true 时,Windows 在无装饰窗口顶部保留了隐藏的 resize 边框 resizable: false,尺寸切换走 setSize API
data-tauri-drag-region 在 WebView2 上不可靠 WebView2 对 HTML 属性式拖拽支持不如 WKWebView 显式调用 appWindow.startDragging(),且必须在 mousedown 同步栈内调用(不能 await/preventDefault)
拖拽热区太窄难命中 隐藏标题栏后只留了 10px 热区 用负 margin 让顶栏撑满整个窗口顶部宽度,高度提到 36/44px
失焦隐藏与拖拽/对话框冲突 原生拖拽和文件选择器会短暂夺焦,触发 blur→hide draggingRef + dialogOpenRef 在特定操作期间屏蔽 blur 处理器
渐隐关闭闪白底 transparent: true + 无背景色 = WebView2 短暂渲染白色底图 Windows 覆盖配置用 transparent: false + backgroundColor 指定底色
输入法候选框位置异常 WebView2 的 IME 候选框定位依赖 textarea 的 CSS 上下文 给 textarea 加 position: relative; transform: translateZ(0)
字体回退到宋体 系统字体栈中 macOS 字体优先 + WebView2 不识别时回退 serif Microsoft YaHei UI 提前到 -apple-system 之前
阅读器等宽字体渲染差 SF Mono 只存在于 macOS 改为 font-family: inherit,走系统无衬线字体
单实例:调试时新 exe 打不开 single-instance 插件让旧实例拦截了新进程 测试新构建前先 kill 旧进程;生产上是预期行为

配置迁移最佳实践

  • Settings 结构体加 schema_version 字段(#[serde(default)] 确保旧 JSON 反序列化不崩)
  • load_settings 时调 migrate() 逐级迁移,迁移后自动回写磁盘
  • 对"是否为旧默认值"的判断要穷举所有历史变体(如 Cmd+Option+ASuper+Alt+A⌘ ⌥ A 都是同一个快捷键的不同表示)

性能

  • 笔记列表不要全量读正文:只读文件名 + 首行预览做元数据分页(每页 100 条),滚动到 90% 再拉下一页
  • 搜索设结果上限(200 条)保护超大目录
  • Release profile 全开 lto + codegen-units=1 + panic=abort + strip + opt-level=s,二进制从 18MB 压到 ~6MB

隐私声明

  • 所有笔记只写入你自己指定的本地目录你自己配置的 WebDAV 服务器
  • 不收集任何遥测数据,不上报使用行为,不需要账号
  • WebDAV 密码存储在本地 settings.json(明文,请勿在共享设备上使用)
  • 应用无任何对外网络请求,除你主动配置的 WebDAV 上传

已知限制

  • 登录 / 注册、语雀 / Notion / OneDrive / Dropbox 接入为 UI 占位,尚未实现
  • 搜索结果上限 200 条(超大目录性能保护)
  • 阅读器为只读,暂不支持编辑或删除单条
  • macOS 未做代码签名公证,首次运行需手动信任
  • NSIS 安装包构建需从 GitHub 下载 nsis_tauri_utils.dll,国内网络可能超时(MSI 不受影响)

License

MIT

About

极简跨平台灵感速记工具 · 一个热键呼出,回车即存 · 纯 Markdown 本地落盘,支持 Notion / Dropbox / WebDAV · Tauri 2 + React (Minimal cross-platform quick capture tool)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages