github yuzeguitarist/Deck v1.3.7
v1.3.7 | fastidious

latest releases: v1.4.5, v1.4.4, v1.4.3...
3 months ago

Deck


Release Notes v1.3.7

TL;DR

  • Homebrew Cask
    brew tap yuzeguitarist/deck && brew install --cask deckclip — 两行命令安装,版本随 GitHub Release 自动更新。
    brew tap yuzeguitarist/deck && brew install --cask deckclip — two commands to install, versions auto-sync from GitHub Releases.
  • ⌃A / ⌃E
    历史列表支持 Emacs 风格快捷键,一键跳到数据库意义上的最新一页或最旧一页。
    History supports Emacs-style shortcuts to jump to the true newest or oldest page from the database.
  • 更干净的尾跳
    跳到末尾时单次定向拉取,避免在中间逐页加载;超大库下搜索尾跳会收紧候选上限。
    Tail jumps use one targeted fetch instead of paging through the middle; search tail jumps cap candidates on very large libraries.
  • 可靠性
    修复 ⌃E 连用失效,以及 ⌃E 后 ⌃A 困在尾页、较新记录需重开面板才出现的问题。
    Fixes ⌃E stopping on repeat use and ⌃A after ⌃E leaving you stuck on the tail until reopening the panel.
  • 暂停录制
    恢复录制后不会再把暂停期间复制的内容自动写进历史。
    Paused recording no longer ingests clipboard changes that happened during pause when you resume.
  • 设置内反馈弹窗
    从「关于 > 更新与反馈 > 提交反馈」打开的「选择反馈方式」面板中,取消与选项按钮可正常使用(与快捷键入口一致)。
    The feedback destination sheet opened from Settings › About works for Cancel and both options, matching the keyboard shortcut entry.
  • 关于页支持作者
    「关于」中新增支持区块:官网入口使用 Deck 图标并直达定价页「支持开发」;另提供 GitHub 入口(随应用语言打开中文或英文站点)。
    About adds a Support section: the Deck icon opens the pricing page at Support Development, plus GitHub; the website locale follows app language (Chinese vs English site).
  • 数据与安全(数据库 / 模板库 / iCloud / AI)
    数据库初始化状态更可靠;模板条目改为落盘存储并支持从旧版 UserDefaults 正确迁移与补救;iCloud 同步在加密、fileURL、元数据与崩溃恢复上更一致;Smart Rule 不再静默授权需网络的脚本插件;AI 认证文件与 Keychain 写入更安全。
    Stricter DB init semantics; template items stored on disk with legacy migration/repair; iCloud sync improvements for encryption, file URLs, metadata, and crash recovery; Smart Rule no longer auto-authorizes networked script plugins; tighter permissions and safer Keychain updates for AI auth.
  • 网络工具与局域网直连
    网页抓取/搜索在较大响应体下组包更快;移除局域网手动节点时同步清理出站连接调度状态,避免长期增删节点后无用条目占用内存。
    Web fetch/search assembles large bodies more efficiently; removing a LAN manual peer clears outbound scheduling state for that IP so stale map entries do not accumulate.

新增 / Added

  • Homebrew Cask 安装
    现在可以通过 Homebrew 安装 Deck:先 brew tap yuzeguitarist/deck,再 brew install --cask deckclip。后续版本随 GitHub Release 自动同步。
    Deck is now available via Homebrew: brew tap yuzeguitarist/deck then brew install --cask deckclip. Future releases auto-sync from GitHub Releases.
  • 右键「系统分享」子菜单
    卡片右键菜单新增「系统分享」二级子菜单,列出隔空投送、信息、邮件等所有 macOS 系统级分享服务,无需先拖到访达再操作。横版与竖版模式均支持。
    Card context menu adds a "System Share" submenu listing AirDrop, Messages, Mail, and all macOS sharing services — no need to drag to Finder first. Supported in both horizontal and vertical layout modes.
  • 历史列表 ⌃A / ⌃E(Emacs)
    在面板历史列表聚焦时,⌃A 从数据库重新加载「最新一页」并选中其中时间上最新的一条;⌃E 单次拉取「最旧一页」并选中时间上最旧的一条,与上下文排序下的视觉顺序解耦。
    With history focus, ⌃A reloads the newest page from the database and selects the chronologically newest item; ⌃E fetches the oldest page in one query and selects the chronologically oldest item, independent of context-aware visual order.
  • 关于页「支持作者」
    设置「关于」新增「支持作者」:一行使用应用图标打开官网定价页并定位到「支持开发」区块;另一行打开 GitHub 仓库页面。应用语言为中文时打开中文站,否则打开英文站。
    Settings › About adds Support the Author: one row with the app icon opens the pricing page at the Support Development section; another opens the GitHub repository. Chinese app language uses the Chinese site; otherwise the English site.

优化 / Improvements

  • 尾页跳转更省路径
    跳到列表末尾时直接按时间升序取末段,避免为凑齐末尾而一页页从中间往后翻。
    Jumping to the list end reads the oldest slice directly by sort order instead of paging forward from the middle.
  • 大库下搜索跳转更克制
    在记录量很大时,为搜索结果的尾跳收紧单次候选上限,降低无谓扫描。
    When the library is very large, tail jumps in search mode use a tighter one-shot candidate cap to avoid excessive work.
  • 关于页支持入口展示
    支持区块内图标尺寸与左侧对齐统一,GitHub 标识更易辨认、边缘更顺滑。
    Support-section icons share consistent sizing and alignment, with a clearer, smoother GitHub mark.
  • 模板库持久化
    模板条目正文与预览写入 Application Support(UserDefaults 仅存索引);开启安全模式时对模板文件加密;删除/移动库或条目时仅更新索引,避免每次操作全量重写所有 payload。
    Template payloads live under Application Support with metadata indices in UserDefaults; security mode encrypts template files; remove/move operations update indices only instead of rewriting every payload.
  • iCloud 拉取结束时间
    lastSyncDate 在每次拉取流程结束时更新(含失败提前返回),与 serverChangeToken 是否前进解耦,便于展示「最近一次拉取结束」。
    lastSyncDate updates whenever a fetch attempt finishes (including early error exits), decoupled from whether the server change token advanced.
  • Web 工具大响应流式读取
    URLSession 异步字节流采用分块缓冲再合并到 Data,降低多 MB 响应下的 CPU 与分配开销(仍保留 5 MB 上限与超限语义)。
    Async response bytes are buffered in chunks before appending to Data, reducing CPU and allocation work for multi-megabyte bodies while keeping the 5 MB cap and overflow behavior.

修复 / Fixes

  • ⌃E 可反复使用
    不再与「加载更多」共用的加载标志误挡后续 ⌃E;分页任务只在异步块内标记加载中,避免长时间占住状态。
    Subsequent ⌃E presses are no longer blocked by the shared loading flag used for “load more”; pagination marks loading only inside its async work.
  • ⌃E 后再按 ⌃A 回到真实最新
    先前仅在当前内存列表中选「第一项」,在尾页场景下并非全局最新,且向左/向新方向看不到更早加载过的记录;现改为与 ⌃E 对称的「真·首屏」重载。
    After ⌃E, ⌃A previously selected the first item of the in-memory tail slice, not the global newest, and newer items seemed missing until reopening; it now reloads the true head page symmetrically to ⌃E.
  • 暂停期间复制不再在恢复时被记录
    暂停后若在系统里复制过内容,恢复录制时不会再把当时剪贴板里的那一条当作新事件写入历史;只有恢复之后的新复制才会进入记录。
    Clipboard captures made while recording is paused are no longer saved the moment you resume; only copies after resuming are recorded.
  • 设置中打开的反馈选择面板
    将反馈对话框推迟到下一轮主循环再进入 AppKit 模态会话,避免从设置页 SwiftUI 按钮同步弹出时内容区无法点击(仅标题栏关闭可用)的问题。
    Feedback destination dialog is presented on the next main-loop turn so AppKit modal sessions started from Settings SwiftUI actions receive clicks in the content area, not only the title-bar close control.
  • 数据库初始化
    仅在完整性检查通过且自定义函数、建表、迁移均就绪后置 isInitialized;完整性无法恢复时不再误标为已初始化,避免半初始化卡死。
    isInitialized flips true only after integrity, custom SQL functions, table creation, and migrations succeed; failed integrity recovery no longer leaves a false “ready” flag.
  • 模板库迁移
    仅在实际解码成功并落盘后才升级存储版本;解码失败会保留旧数据并重试。若曾错误升级版本导致「只剩库壳」,启动时会尝试从遗留的 templateItems JSON 自动补救。
    Storage version advances only after a successful legacy decode and payload write; decode failures keep legacy data for retry. Orphan legacy blobs are repaired when indices are empty but old JSON remains.
  • 模板 fileURL 图片
    保存到模板库时,若已从文件物化为图片字节,剪贴板类型会改为具体图片类型,与 payload 一致。
    When a file-URL image is materialized to bytes for the template library, the stored pasteboard type matches the image payload.
  • iCloud:fileURL 同步
    仅当本地能解析出与路径字符串不同的实际内容时才上传;图片类会以具体图片类型写入记录;无法物化时跳过上传并记日志,避免跨设备只剩路径串。
    fileURL items upload only when local resolution yields real content (not just the path string); images use concrete image types; unresolvable items are skipped with logging.
  • iCloud:加密元数据
    开启端侧加密时,appPath / appName 与预览、搜索文案等一致:加密失败则置空并记录警告,不再静默明文上云;encryptAppMeta 语义与接收端解密对齐。
    With iCloud encryption, app path/name follow the same rules as other fields: encrypt-or-omit with warnings, no silent plaintext; encryptAppMeta matches receiver decryption.
  • iCloud:上传崩溃恢复
    批量上传完成后,仅从持久化「进行中」列表里移除已成功或已取消的条目;失败并重入队的记录名保留,避免在下次 flush 前崩溃后无法被启动恢复逻辑发现。
    Persisted in-flight upload names are cleared only for succeeded or cancelled records; failed records pending re-queue stay listed until the next successful completion path.
  • iCloud:Server change token
    解码失败时清除损坏的 UserDefaults 数据,避免长期反复失败。
    Corrupt server change token data in UserDefaults is removed after a decode failure.
  • Smart Rule 与网络脚本插件
    Smart Rule 下需要网络且未授权的脚本插件不再自动授权,需用户在插件设置中手动授权。
    Smart Rule no longer auto-authorizes script plugins that require network access; users must approve in plugin settings.
  • ChatGPT / AI 认证文件与 Keychain
    auth.json 目录与文件权限收紧(700 / 600);API Key 优先 SecItemUpdate,避免先删后加导致更新失败时旧密钥丢失。
    Tighter POSIX permissions on auth.json (700/600); API keys prefer SecItemUpdate over delete-then-add to avoid losing the previous secret on add failure.
  • 直连:移除手动节点后的出站状态
    删除节点时从出站连接世代映射中移除对应 IP(不再仅自增计数保留键),在反复添加/删除不同设备时减少无用字典条目。
    Removing a manual peer drops the outbound-connect epoch entry for that IP instead of retaining the key with an incremented counter, trimming stale entries when peers are added and removed over time.

兼容性与行为说明 / Compatibility & Behavior Notes

  • 快捷键环境
    需在 macOS 上使用 Control 组合键;历史区域需处于列表焦点(非搜索框内编辑等)。
    Shortcuts use the Control modifier on macOS; the history list must have focus (not while typing in search, etc.).
  • 尾跳后的列表范围
    执行 ⌃E 后,当前可见列表仅为该次拉取的末尾一页,直到 ⌃A 拉回最新一页或关闭再开面板等重新加载首屏的操作。
    After ⌃E, the visible list is that tail page until ⌃A reloads the newest page or another action reloads the head (e.g. reopening the panel).
  • 模板库数据位置
    首次从旧版本升级时,模板条目会从 UserDefaults 大包迁移至 ~/Library/Application Support/Deck/TemplateItems/;若曾遇迁移异常,新版会尽量从遗留 JSON 自动修复。
    On first launch after upgrade, template items migrate from the legacy UserDefaults blob to ~/Library/Application Support/Deck/TemplateItems/; a repair pass may recover from a partially migrated state.

Don't miss a new Deck release

NewReleases is sending notifications on new releases.