如何使用Hamerspoon将富文本粘贴板内容转换为纯文本?

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

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

local pasteboard = require("hs.pasteboard")
点赞
用户5197105
用户5197105

最简单的方法是使用这里所描述的答案,获取粘贴板中的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-09 05:29:41