2013-06-20 70 views
6

我不得不發送一份關於將一些剪貼板內容粘貼到網頁編輯器中的報告,我需要一種方法將剪貼板內容轉儲/恢復到(可能)HTML。如何從OS X粘貼板/剪貼板中獲取HTML數據?

我該怎麼做?

似乎pbcopy/pbpaste不要送花兒給人給我短信,即使我用pbpaste -P rtfpbpaste -P HTML

回答

6

我知道你已經發現了這一點,但對於人誰從谷歌在這裏摸到的利益,則在Getting RTF data out of Mac OS X pasteboard (clipboard)上爲RTF數據提供的解決方案也適用於將HTML從剪貼板中取出。

也就是說,命令

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

三年後,在更文明的時代,我們有Swift。您可以編寫一個簡短的Swift腳本來準確提取您需要的OS X粘貼板。

將下面的swift 3片段放到一個新的文本文件中。我將其命名pbpaste.swift

import Cocoa 
let type = NSPasteboardTypeHTML 
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) 
} 

然後,您放置文件的目錄中複製一些HTML,並運行swift pbpaste.swift

耶,html!呃,OS X增加了大量的自定義標記(和一個<meta>標記?!) - 但是,嘿,至少它不是純文本!

注:

  • NSPasteboardTypeHTML是一個特殊的全球計算結果爲字符串"public.html"
  • 顯然,這是HTML特殊,所以你可能想要麼:
    1. 將其命名爲pbpaste-html.swift,或
    2. 從命令行參數中讀取所需的類型
  • 這有點慢,因爲它正在被動態解釋,沒有被編譯和執行。編輯給我10倍的加速:

    xcrun -sdk macosx swiftc pbpaste.swift -o pbpaste-html 
    

    然後只需調用./pbpaste-html而不是swift pbpaste.swift

斯威夫特2版:

import Cocoa 
let type = NSPasteboardTypeHTML 
if let string = NSPasteboard.generalPasteboard().stringForType(type) { 
    print(string) 
} 
else { 
    print("Could not find string data of type '\(type)' on the system pasteboard") 
    exit(1) 
}