我正在寻找一种解决方案,将复制到剪贴板(粘贴板)的富文本自动转换为 Hammerspoon(lua 代码)中的纯文本。
我知道如何在 lua 中访问粘贴板,但不知道如何将此操作绑定到复制或粘贴事件以使其自动化(也不知道如何将内容转换为纯文本)。
local pasteboard = require("hs.pasteboard")
我正在寻找一种解决方案,将复制到剪贴板(粘贴板)的富文本自动转换为 Hammerspoon(lua 代码)中的纯文本。
我知道如何在 lua 中访问粘贴板,但不知道如何将此操作绑定到复制或粘贴事件以使其自动化(也不知道如何将内容转换为纯文本)。
local pasteboard = require("hs.pasteboard")
最简单的方法是使用此处描述的答案来获取粘贴板中的 RTF 数据并将数据通过管道传输到已经可用的
textutil
命令,以将其转换为纯文本到标准输出:
osascript -e 'the clipboard as «class RTF »' | \
perl -ne 'print chr foreach unpack("C*",pack("H*",substr($_,11,-3)))' | \
textutil -stdin -stdout -convert txt
然后我们可以在 Hammerspoon 环境中使用hs.execute
来运行 shell 命令并返回转换后的值,所以在你的 Lua 代码中它很简单:
local text = hs.execute([[
osascript -e 'the clipboard as «class RTF »' | \
perl -ne 'print chr foreach unpack("C*",pack("H*",substr($_,11,-3)))' | \
textutil -stdin -stdout -convert txt
]])
仅供参考,Hammerspoon API确实允许您hs.pasteboard.readDataForUTI
使用"public.rtf"
UTI 从粘贴板上检索 RTF 数据,因此从技术上讲,您可以在 Lua 中完成所有这些操作,但您必须自己手动转换 RTF 数据。