2013-06-20 9 views
6

Ich muss einen Bericht über Einfügen von Zwischenablage Inhalt in einen Web-Rich-Editor senden, und ich brauche eine Möglichkeit zum Dump/Wiederherstellen der Zwischenablage Inhalt (wahrscheinlich) HTML.Wie bekomme ich HTML-Daten aus der OS X Pasteboard/Zwischenablage?

Wie kann ich das tun?

Es scheint, dass pbcopy/pbpaste Sie mir alle Tage selbst geben Sie Text, wenn ich die pbpaste -P rtf oder pbpaste -P HTML

Antwort

6

verwende ich Sie erkennen, haben dies bereits gefunden, aber zum Wohle der Menschen, die hier von Google auftauchen, die Lösung gegeben für RTF-Daten bei Getting RTF data out of Mac OS X pasteboard (clipboard) funktioniert gut, um auch HTML aus der Zwischenablage zu bekommen.

Das heißt, der Befehl

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

Drei Jahre später, in zivilisierteren Zeiten, haben wir Swift. Sie können ein kurzes Swift-Skript schreiben, um genau das zu holen, was Sie von OS Xs Pasteboard brauchen.

Fügen Sie das folgende schnelle 3-Snippet in eine neue Textdatei ein. Ich nannte mein 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) 
} 

Dann einige HTML kopieren und ausführen swift pbpaste.swift aus dem Verzeichnis, in dem Sie die Datei setzen.

Yay, html! Uggh, OS X hinzugefügt eine Tonne benutzerdefinierte Markup (und ein <meta> Tag ?!) - aber hey, zumindest ist es kein einfacher Text!

Hinweise:

  • NSPasteboardTypeHTML ist eine besondere globale, die "public.html"
  • Offensichtlich auf den String auswertet ist diese html spezifisch, so dass Sie wahrscheinlich entweder wollen würde:
    1. Name it pbpaste-html.swift, oder
    2. Lesen Sie den gewünschten Typ über die Befehlszeilenargumente
  • Es ist irgendwie langsam, weil es im laufenden Betrieb interpretiert, nicht kompiliert und ausgeführt wird. Compilation gibt mir ein 10x Speed-up:

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

    Dann rufen Sie einfach ./pbpaste-html statt swift pbpaste.swift.

Swift 2 Version:

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) 
}