0

我正在寻找一种解决方案,将复制到剪贴板(粘贴板)的富文本自动转换为 Hammerspoon(lua 代码)中的纯文本。

我知道如何在 lua 中访问粘贴板,但不知道如何将此操作绑定到复制或粘贴事件以使其自动化(也不知道如何将内容转换为纯文本)。

local pasteboard = require("hs.pasteboard")
4

1 回答 1

0

最简单的方法是使用此处描述的答案来获取粘贴板中的 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 数据。

于 2019-04-09T05:29:41.603 回答