如何从OS X粘贴板/剪贴板中获取HTML数据?

sor*_*rin 10 macos clipboard pasteboard

我必须发送一份关于将一些剪贴板内容粘贴到一个富Web编辑器的报告,我需要一种方法来将剪贴板内容转储/恢复到(可能)HTML.

我怎样才能做到这一点?

似乎pbcopy/pbpaste总是给我文本,即使我使用pbpaste -P rtfpbpaste -P HTML

chb*_*own 9

三年后,在更文明的时代,我们有斯威夫特.您可以编写一个简短的Swift脚本来准确提取OS X的粘贴板所需的内容.

将以下Swift 4片段放入新的文本文件中.我命名我的pbpaste.swift:

import Cocoa
let type = NSPasteboard.PasteboardType.html
if let string = NSPasteboard.general.string(forType:type) {
  print(string)
}
else {
  print("Could not find string data of type '\(type)' on the system pasteboard")
  exit(1)
}
Run Code Online (Sandbox Code Playgroud)

然后,复制一些html,并swift pbpaste.swift从放置该文件的目录运行.

好的,HTML!Uggh,OS X增加了大量的自定义标记(和<meta>标签?!) - 但是嘿,至少它不是纯文本!

笔记:

  • NSPasteboard.PasteboardType.html 是一个特殊的全局,它计算字符串 "public.html"
  • 显然这是特定于html的,所以你可能想要:
    1. 命名pbpaste-html.swift,或
    2. 从命令行参数中读取所需的类型
  • 它有点慢,因为它是在动态解释,而不是编译和执行.编译给我10倍的加速:

    xcrun -sdk macosx swiftc pbpaste.swift -o pbpaste-html
    
    Run Code Online (Sandbox Code Playgroud)

    然后打电话./pbpaste-html而不是swift pbpaste.swift.

  • PS 这个基本方法演变成一个简单的(但稍微灵活一点——你可以将数据类型指定为参数)命令行工具,发布在 https://github.com/chbrown/macos-pasteboard (5认同)
  • 为了满足我的需要,我只是添加了 `#!/usr/bin/env swift` 作为第一行,并使文件可执行,并且它在我的 M1 Macbook 上对我来说响应足够快。 (3认同)

fre*_*top 8

我意识到你已经发现了这一点,但为了从谷歌出现在这里的人们的利益,从Mac OS X粘贴板(剪贴板)获取RTF数据的 RTF数据解决方案可以很好地将HTML从剪贴板中取出也是.

也就是说,命令

osascript -e 'the clipboard as «class HTML»' |   perl -ne 'print chr foreach unpack("C*",pack("H*",substr($_,11,-3)))'
Run Code Online (Sandbox Code Playgroud)