<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>剪贴板 on 小景</title>
        <link>https://jingyuan-zheng.github.io/zh/tags/%E5%89%AA%E8%B4%B4%E6%9D%BF/</link>
        <description>Recent content in 剪贴板 on 小景</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-Hans</language>
        <copyright>Jingyuan Zheng</copyright>
        <lastBuildDate>Thu, 09 Jul 2026 18:45:00 +0200</lastBuildDate><atom:link href="https://jingyuan-zheng.github.io/zh/tags/%E5%89%AA%E8%B4%B4%E6%9D%BF/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>Text Tray：给复制文本一个临时工作台</title>
            <link>https://jingyuan-zheng.github.io/zh/p/text-tray-macos-temporary-text-workspace/</link>
            <pubDate>Thu, 09 Jul 2026 18:45:00 +0200</pubDate>
            <guid>https://jingyuan-zheng.github.io/zh/p/text-tray-macos-temporary-text-workspace/</guid>
            <description>&lt;img src=&#34;https://jingyuan-zheng.github.io/img/text-tray/featured.jpg&#34; alt=&#34;Featured image of post Text Tray：给复制文本一个临时工作台&#34; /&gt;&lt;p&gt;本文介绍 Text Tray：一个开源 macOS 小工具，用来给复制出来或传入的一段临时文本提供一个可阅读、可编辑、可清理、可翻译、可保存的工作台。&lt;/p&gt;&#xA;&lt;p&gt;我开源了 &lt;strong&gt;Text Tray&lt;/strong&gt;。它解决的不是一个宏大的问题，而是每天都会遇到的那种小麻烦：你复制了一段文字，想看清楚一点、改几处、统计一下、清理一下 PDF 断行、翻译一下，或者让 AI 帮你提取待办，但又不想专门打开 Notes、文本编辑器、浏览器 AI 工具或翻译软件。&lt;/p&gt;&#xA;&lt;p&gt;项目地址在这里：&lt;a class=&#34;link&#34; href=&#34;https://github.com/Jingyuan-Zheng/TextTray&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Jingyuan-Zheng/TextTray&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;它解决的是哪种小问题&#34;&gt;它解决的是哪种小问题&#xA;&lt;/h2&gt;&lt;p&gt;有些文本任务太小，不值得变成一个正式文档；但在原 App 里处理，又很别扭。&lt;/p&gt;&#xA;&lt;p&gt;比如邮件窗口太窄，复制出来想放大看；PDF 复制出来满是硬换行；表单要求字数限制，你想确认字符数；一段英文说明想快速翻译；一封邮件想提取日期和待办；一小段代码或 Markdown 想临时保存。&lt;/p&gt;&#xA;&lt;p&gt;Text Tray 的定位就是这个中间地带。它不是笔记软件，也不是剪贴板历史工具。它只是打开一个干净的临时文本窗口，让你把这段文字处理完，然后离开。&lt;/p&gt;&#xA;&lt;div class=&#34;post-figure&#34;&gt;&#xA;    &lt;img src=&#34;https://jingyuan-zheng.github.io/img/text-tray/featured.jpg&#34; alt=&#34;Text Tray 主窗口，显示临时文本、行号和统计信息&#34;&gt;&#xA;    &lt;div class=&#34;caption&#34;&gt;图 1：Text Tray 给临时文本一个更大、更容易编辑的窗口。&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;临时就是它的边界&#34;&gt;临时，就是它的边界&#xA;&lt;/h2&gt;&lt;p&gt;Text Tray 最重要的设计选择，是把正文当作临时内容。&lt;/p&gt;&#xA;&lt;p&gt;它不会保存剪贴板历史，不会在后台监听剪贴板，不会自动保存窗口里的正文，也不会在关闭时清空系统剪贴板。它会保存语言、字号、行号、自动换行、统计显示和置顶等偏好，但不会保存你正在处理的文本内容。&lt;/p&gt;&#xA;&lt;p&gt;这让它更像一个临时托盘，而不是一个长期笔记本。你可以把合同条款、邮件草稿、表格片段或聊天内容放进去处理，不用担心自己又制造了一个之后还要清理的持久记录。&lt;/p&gt;&#xA;&lt;h2 id=&#34;阅读编辑和基本统计&#34;&gt;阅读、编辑和基本统计&#xA;&lt;/h2&gt;&lt;p&gt;主窗口很朴素：文本编辑区、行号、自动换行、字号调节，以及底部的简短状态信息。&lt;/p&gt;&#xA;&lt;p&gt;状态信息包括字符数、词数、行数、选中长度、字号和光标位置。这些功能平时看起来不起眼，但当你真的需要提交一段限制长度的文本、检查选区范围或整理多行内容时，它们最好就在旁边，而不是藏在一个更重的编辑器里。&lt;/p&gt;&#xA;&lt;p&gt;窗口也可以保持置顶。对于一边从网页或 PDF 里复制，一边整理文本的场景，这个小功能很实用。&lt;/p&gt;&#xA;&lt;h2 id=&#34;pdf-复制文本的断行清理&#34;&gt;PDF 复制文本的断行清理&#xA;&lt;/h2&gt;&lt;p&gt;Text Tray 里我很喜欢的一个动作是 &lt;strong&gt;合并 PDF 断行&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;从 PDF 复制文字时，很多时候复制出来的是视觉排版里的换行，而不是自然段落。Text Tray 会在本地做一次清理：普通段落会被重新合并，同时尽量保护项目符号、编号列表和缩进块这类结构。&lt;/p&gt;&#xA;&lt;div class=&#34;post-figure&#34;&gt;&#xA;    &lt;img src=&#34;https://jingyuan-zheng.github.io/img/text-tray/pdf-line-breaks.jpg&#34; alt=&#34;Text Tray 清理 PDF 复制文本断行&#34;&gt;&#xA;    &lt;div class=&#34;caption&#34;&gt;图 2：PDF 断行处理把视觉换行整理回更自然的段落。&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;它还支持去除首尾空白、删除多余空行、统一换行符、去除每行末尾空格。对于这类一次性处理，Text Tray 只保留“撤销上一次处理”，足够简单，也不把界面做成复杂工作流。&lt;/p&gt;&#xA;&lt;h2 id=&#34;不离开窗口的轻量-ai-动作&#34;&gt;不离开窗口的轻量 AI 动作&#xA;&lt;/h2&gt;&lt;p&gt;Text Tray 也有一个 AI 菜单，用来做一些很具体的结构化处理：提取待办、提取日期、提取金额、提取联系人、总结要求、解释文本、检查风险、草拟回复，以及整理成清单或表格。&lt;/p&gt;&#xA;&lt;p&gt;在系统支持时，这些动作会调用 Apple 的 Foundation Models 框架。如果 Apple Intelligence 没启用、设备不符合要求或模型还没准备好，应用会给出明确提示。&lt;/p&gt;&#xA;&lt;div class=&#34;post-figure&#34;&gt;&#xA;    &lt;img src=&#34;https://jingyuan-zheng.github.io/img/text-tray/ai-tasks.jpg&#34; alt=&#34;Text Tray 从邮件里提取待办&#34;&gt;&#xA;    &lt;div class=&#34;caption&#34;&gt;图 3：AI 动作适合对已经放进托盘里的文本做快速结构化处理。&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;它不是要替代完整的 AI 聊天工具。它的价值在于少一次来回复制粘贴：文本已经在窗口里了，下一步最好就是一个菜单动作，而不是打开另一个工具、粘贴、写提示词、再复制回来。&lt;/p&gt;&#xA;&lt;h2 id=&#34;系统写作工具和翻译&#34;&gt;系统写作工具和翻译&#xA;&lt;/h2&gt;&lt;p&gt;如果系统支持，Text Tray 的编辑器可以使用 macOS 的系统写作工具。这样它不是一个孤立的文本框，而是能接入原生 AppKit 文本编辑能力的普通 Mac 应用。&lt;/p&gt;&#xA;&lt;p&gt;翻译部分则使用 Apple 的 Translation 框架。它可以翻译为中文、翻译为英文，也可以生成中英对照版本。&lt;/p&gt;&#xA;&lt;div class=&#34;post-figure&#34;&gt;&#xA;    &lt;img src=&#34;https://jingyuan-zheng.github.io/img/text-tray/translation.jpg&#34; alt=&#34;Text Tray 显示翻译结果&#34;&gt;&#xA;    &lt;div class=&#34;caption&#34;&gt;图 4：翻译结果仍然留在同一个临时文本窗口里。&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;基础应用目标是 macOS 13 或更新版本。Apple Intelligence 和系统翻译相关动作则取决于 Apple 对系统版本和设备的支持；旧系统上仍然可以使用核心的阅读、编辑、清理、统计、复制、保存和打印功能。&lt;/p&gt;&#xA;&lt;h2 id=&#34;临时文本也可能需要保存&#34;&gt;临时文本也可能需要保存&#xA;&lt;/h2&gt;&lt;p&gt;大多数临时文本处理完复制走就结束了。但有时一段草稿会变成值得保留的内容。&lt;/p&gt;&#xA;&lt;p&gt;Text Tray 可以把当前文本保存为 &lt;code&gt;.txt&lt;/code&gt;、&lt;code&gt;.md&lt;/code&gt;、&lt;code&gt;.json&lt;/code&gt;、&lt;code&gt;.csv&lt;/code&gt;、&lt;code&gt;.html&lt;/code&gt;、&lt;code&gt;.swift&lt;/code&gt;、&lt;code&gt;.py&lt;/code&gt;、&lt;code&gt;.js&lt;/code&gt;，也可以输入自定义后缀。默认文件名会使用 &lt;code&gt;Text_YYYYMMDDHHMMSS.txt&lt;/code&gt; 这种时间戳格式，简单，也能避免误覆盖。&lt;/p&gt;&#xA;&lt;div class=&#34;post-figure&#34;&gt;&#xA;    &lt;img src=&#34;https://jingyuan-zheng.github.io/img/text-tray/export.jpg&#34; alt=&#34;Text Tray 保存和导出选项&#34;&gt;&#xA;    &lt;div class=&#34;caption&#34;&gt;图 5：保存选项覆盖纯文本、Markdown、代码片段和自定义后缀。&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;它也支持打印。这个功能不一定每天用，但临时文本偶尔确实会需要离开屏幕。&lt;/p&gt;&#xA;&lt;h2 id=&#34;通过快捷指令启动&#34;&gt;通过快捷指令启动&#xA;&lt;/h2&gt;&lt;p&gt;Text Tray 可以正常打开，但如果配合 macOS 快捷指令，会更像一个系统级文本动作。&lt;/p&gt;&#xA;&lt;p&gt;最简单的启动方式：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;open -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;/Applications/Text Tray.app&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;也可以把快捷指令输入直接通过标准输入传给它：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;APP&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/Applications/Text Tray.app&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;printf&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;%s&amp;#39;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SHORTCUT_INPUT&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$APP&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/Contents/MacOS/TemporaryClipboardViewer&amp;#34;&lt;/span&gt; --stdin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;div class=&#34;post-figure&#34;&gt;&#xA;    &lt;img src=&#34;https://jingyuan-zheng.github.io/img/text-tray/shortcut-setup.jpg&#34; alt=&#34;macOS 快捷指令中启动 Text Tray 的设置&#34;&gt;&#xA;    &lt;div class=&#34;caption&#34;&gt;图 6：配合快捷指令后，Text Tray 更像一个可随手调用的系统文本动作。&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;项目源码也很直接：Swift、AppKit、SwiftUI，加上 Apple 的 Foundation Models 和 Translation 框架。构建脚本会生成普通 &lt;code&gt;.app&lt;/code&gt; bundle，并打包成 &lt;code&gt;TextTray.zip&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;它适合放在哪里&#34;&gt;它适合放在哪里&#xA;&lt;/h2&gt;&lt;p&gt;Text Tray 不适合长篇写作、项目笔记、知识库管理或剪贴板归档。这些事情已经有更专业的工具。&lt;/p&gt;&#xA;&lt;p&gt;它适合那些三十秒的小文本任务：看清楚这段文字，数一下字数，清理一下断行，提取日期，草拟回复，翻译一段话，保存一个片段，然后继续做正事。&lt;/p&gt;&#xA;&lt;p&gt;这个位置很小，但一天会出现很多次。Text Tray 做的就是把这个小位置补上。&lt;/p&gt;&#xA;&lt;h2 id=&#34;相关阅读&#34;&gt;相关阅读&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;如果你要处理整份文档翻译，可以看 &lt;a class=&#34;link&#34; href=&#34;https://jingyuan-zheng.github.io/zh/p/translate-document-quick-action/&#34; &gt;Translate Document Quick Action：在 Finder 里一键翻译文档，并尽量保留原结构&lt;/a&gt;。&lt;/li&gt;&#xA;&lt;li&gt;如果你想在 Apple Silicon 上做本地 AI 翻译，可以看 &lt;a class=&#34;link&#34; href=&#34;https://jingyuan-zheng.github.io/zh/p/mac-lite-translator-local-ai-translation/&#34; &gt;Mac-Lite-Translator：Apple Silicon 上的本地 AI 翻译小工具&lt;/a&gt;。&lt;/li&gt;&#xA;&lt;li&gt;如果你想给 macOS 小工具做安装包，可以看 &lt;a class=&#34;link&#34; href=&#34;https://jingyuan-zheng.github.io/zh/p/dmg-maker-%e8%87%aa%e5%8a%a8%e5%8c%96%e5%88%9b%e5%bb%ba%e7%b2%be%e7%be%8e%e7%9a%84-macos-%e5%ae%89%e8%a3%85%e5%8c%85/&#34; &gt;DMG Maker：自动化创建精美的 macOS 安装包&lt;/a&gt;。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item></channel>
</rss>
