Featured image of post Text Tray:给复制文本一个临时工作台

Text Tray:给复制文本一个临时工作台

Text Tray 是一个开源 macOS 小工具,用来快速查看、编辑、清理、翻译、保存或重新复制临时文本,而不必把它变成一条笔记或一个正式文档。

作者: 小景

文章来源: https://jingyuan-zheng.github.io/zh/p/text-tray-macos-temporary-text-workspace/

本文介绍 Text Tray:一个开源 macOS 小工具,用来给复制出来或传入的一段临时文本提供一个可阅读、可编辑、可清理、可翻译、可保存的工作台。

我开源了 Text Tray。它解决的不是一个宏大的问题,而是每天都会遇到的那种小麻烦:你复制了一段文字,想看清楚一点、改几处、统计一下、清理一下 PDF 断行、翻译一下,或者让 AI 帮你提取待办,但又不想专门打开 Notes、文本编辑器、浏览器 AI 工具或翻译软件。

项目地址在这里:Jingyuan-Zheng/TextTray

它解决的是哪种小问题

有些文本任务太小,不值得变成一个正式文档;但在原 App 里处理,又很别扭。

比如邮件窗口太窄,复制出来想放大看;PDF 复制出来满是硬换行;表单要求字数限制,你想确认字符数;一段英文说明想快速翻译;一封邮件想提取日期和待办;一小段代码或 Markdown 想临时保存。

Text Tray 的定位就是这个中间地带。它不是笔记软件,也不是剪贴板历史工具。它只是打开一个干净的临时文本窗口,让你把这段文字处理完,然后离开。

Text Tray 主窗口,显示临时文本、行号和统计信息
图 1:Text Tray 给临时文本一个更大、更容易编辑的窗口。

临时,就是它的边界

Text Tray 最重要的设计选择,是把正文当作临时内容。

它不会保存剪贴板历史,不会在后台监听剪贴板,不会自动保存窗口里的正文,也不会在关闭时清空系统剪贴板。它会保存语言、字号、行号、自动换行、统计显示和置顶等偏好,但不会保存你正在处理的文本内容。

这让它更像一个临时托盘,而不是一个长期笔记本。你可以把合同条款、邮件草稿、表格片段或聊天内容放进去处理,不用担心自己又制造了一个之后还要清理的持久记录。

阅读、编辑和基本统计

主窗口很朴素:文本编辑区、行号、自动换行、字号调节,以及底部的简短状态信息。

状态信息包括字符数、词数、行数、选中长度、字号和光标位置。这些功能平时看起来不起眼,但当你真的需要提交一段限制长度的文本、检查选区范围或整理多行内容时,它们最好就在旁边,而不是藏在一个更重的编辑器里。

窗口也可以保持置顶。对于一边从网页或 PDF 里复制,一边整理文本的场景,这个小功能很实用。

PDF 复制文本的断行清理

Text Tray 里我很喜欢的一个动作是 合并 PDF 断行

从 PDF 复制文字时,很多时候复制出来的是视觉排版里的换行,而不是自然段落。Text Tray 会在本地做一次清理:普通段落会被重新合并,同时尽量保护项目符号、编号列表和缩进块这类结构。

Text Tray 清理 PDF 复制文本断行
图 2:PDF 断行处理把视觉换行整理回更自然的段落。

它还支持去除首尾空白、删除多余空行、统一换行符、去除每行末尾空格。对于这类一次性处理,Text Tray 只保留“撤销上一次处理”,足够简单,也不把界面做成复杂工作流。

不离开窗口的轻量 AI 动作

Text Tray 也有一个 AI 菜单,用来做一些很具体的结构化处理:提取待办、提取日期、提取金额、提取联系人、总结要求、解释文本、检查风险、草拟回复,以及整理成清单或表格。

在系统支持时,这些动作会调用 Apple 的 Foundation Models 框架。如果 Apple Intelligence 没启用、设备不符合要求或模型还没准备好,应用会给出明确提示。

Text Tray 从邮件里提取待办
图 3:AI 动作适合对已经放进托盘里的文本做快速结构化处理。

它不是要替代完整的 AI 聊天工具。它的价值在于少一次来回复制粘贴:文本已经在窗口里了,下一步最好就是一个菜单动作,而不是打开另一个工具、粘贴、写提示词、再复制回来。

系统写作工具和翻译

如果系统支持,Text Tray 的编辑器可以使用 macOS 的系统写作工具。这样它不是一个孤立的文本框,而是能接入原生 AppKit 文本编辑能力的普通 Mac 应用。

翻译部分则使用 Apple 的 Translation 框架。它可以翻译为中文、翻译为英文,也可以生成中英对照版本。

Text Tray 显示翻译结果
图 4:翻译结果仍然留在同一个临时文本窗口里。

基础应用目标是 macOS 13 或更新版本。Apple Intelligence 和系统翻译相关动作则取决于 Apple 对系统版本和设备的支持;旧系统上仍然可以使用核心的阅读、编辑、清理、统计、复制、保存和打印功能。

临时文本也可能需要保存

大多数临时文本处理完复制走就结束了。但有时一段草稿会变成值得保留的内容。

Text Tray 可以把当前文本保存为 .txt.md.json.csv.html.swift.py.js,也可以输入自定义后缀。默认文件名会使用 Text_YYYYMMDDHHMMSS.txt 这种时间戳格式,简单,也能避免误覆盖。

Text Tray 保存和导出选项
图 5:保存选项覆盖纯文本、Markdown、代码片段和自定义后缀。

它也支持打印。这个功能不一定每天用,但临时文本偶尔确实会需要离开屏幕。

通过快捷指令启动

Text Tray 可以正常打开,但如果配合 macOS 快捷指令,会更像一个系统级文本动作。

最简单的启动方式:

1
open -n "/Applications/Text Tray.app"

也可以把快捷指令输入直接通过标准输入传给它:

1
2
APP="/Applications/Text Tray.app"
printf '%s' "$SHORTCUT_INPUT" | "$APP/Contents/MacOS/TemporaryClipboardViewer" --stdin
macOS 快捷指令中启动 Text Tray 的设置
图 6:配合快捷指令后,Text Tray 更像一个可随手调用的系统文本动作。

项目源码也很直接:Swift、AppKit、SwiftUI,加上 Apple 的 Foundation Models 和 Translation 框架。构建脚本会生成普通 .app bundle,并打包成 TextTray.zip

它适合放在哪里

Text Tray 不适合长篇写作、项目笔记、知识库管理或剪贴板归档。这些事情已经有更专业的工具。

它适合那些三十秒的小文本任务:看清楚这段文字,数一下字数,清理一下断行,提取日期,草拟回复,翻译一段话,保存一个片段,然后继续做正事。

这个位置很小,但一天会出现很多次。Text Tray 做的就是把这个小位置补上。

相关阅读