2013-06-20 31 views
6

Tôi phải gửi báo cáo về việc dán một số nội dung của clipboard vào trình chỉnh sửa web phong phú và tôi cần một cách để kết xuất/khôi phục nội dung của clipboard thành (có thể) HTML.Làm cách nào để lấy dữ liệu HTML ra khỏi bảng tạm thời/bảng tạm của OS X?

Tôi làm cách nào để thực hiện việc này?

Dường như pbcopy/pbpaste làm nhất luôn cho tôi văn bản ngay cả khi tôi sử dụng pbpaste -P rtf hoặc pbpaste -P HTML

Trả lời

6

Tôi nhận ra rằng mình đã tìm thấy điều này, nhưng vì lợi ích của những người bật lên ở đây từ Google, giải pháp được cung cấp cho dữ liệu RTF tại Getting RTF data out of Mac OS X pasteboard (clipboard) cũng hoạt động tốt để lấy HTML ra khỏi khay nhớ tạm.

Đó là, lệnh

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

Ba năm sau, trong thời văn minh hơn, chúng tôi có Swift. Bạn có thể viết một tập lệnh Swift ngắn để kéo chính xác những gì bạn cần ra khỏi bảng mã OS X.

Đặt đoạn mã 3 nhanh sau đây vào tệp văn bản mới. Tôi đặt tên tôi 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) 
} 

Sau đó, sao chép một số html, và chạy swift pbpaste.swift từ thư mục nơi bạn đặt tập tin đó.

Yay, html! Uggh, OS X thêm một tấn đánh dấu tùy chỉnh (và một thẻ <meta> ?!) - nhưng hey, ít nhất nó không phải là văn bản thuần túy!

Ghi chú:

  • NSPasteboardTypeHTML là một thế giới đặc biệt để đánh giá chuỗi "public.html"
  • Rõ ràng đây là html cụ thể, vì vậy bạn có thể muốn một trong hai:
    1. Tên nó pbpaste-html.swift, hoặc
    2. Đọc loại mong muốn từ các đối số dòng lệnh
  • Đó là loại chậm, vì nó đang được giải thích nhanh chóng, không được biên dịch và thực thi. Biên soạn cho tôi tốc độ gấp 10 lần:

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

    Sau đó, chỉ cần gọi ./pbpaste-html thay vì swift pbpaste.swift.

Swift 2 phiên bản:

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) 
} 
Các vấn đề liên quan