【问题标题】:How do I convert richtext pasteboard content to plaintext with hamerspoon?如何使用hammerspoon 将富文本粘贴板内容转换为纯文本?
【发布时间】:2019-04-09 13:29:41
【问题描述】:

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

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

local pasteboard = require("hs.pasteboard")

【问题讨论】:

    标签: lua hammerspoon


    【解决方案1】:

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

    【讨论】:

    • 所以,AppleScript,进入 Perl 脚本,进入 shell 程序,进入 Lua。有趣的。如果您只是阅读 the clipboard as text,那么您肯定不需要 Perl 或 textutil。但是,正如您所说,您可能不需要 AppleScript。我想如果一个人复制一些富文本然后使用hs.pasteboard.contentTypes()查看可用的内容类型,如果"public.rtf"在其中,那么"public.plain-text"可能也是,所以你应该只阅读那个尿路感染。我认为整个解决方案就是hs.pasteboard.readDataForUTI("public.plain-text")
    • 附带说明,如果您要使用 Lua 运行 AppleScript,最好使用 hs.osascript 函数而不是 hs.execute。我们的目标不应该是使用尽可能多的不同程序和语言,因为它很容易变得非常昂贵,并且会减慢速度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-04-13
    • 2018-02-02
    • 2015-09-08
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多