2013-06-20 20 views
6

Bazı pano içeriğinin web zengin editörüne yapıştırılmasıyla ilgili bir rapor göndermek zorundayım ve pano içeriğinin (muhtemelen) HTML'ye dökülmesini/geri yüklenmesinin bir yoluna ihtiyacım var.HTML verilerini OS X çalışma alanı/panosundan nasıl alırım?

Bunu nasıl yapabilirim?

O Alway Ben zaten bu tespit ettik fark pbpaste -P rtf veya pbpaste -P HTML

cevap

6

kullanırsanız bana bile metin verir ancak Google'dan dön buradan halkın yararına anlamına pbcopy/pbpaste görünüyor Getting RTF data out of Mac OS X pasteboard (clipboard) adresindeki RTF verileri için verilen çözüm, HTML'yi panodan çıkarmak için iyi çalışıyor. olduğu

, komut

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

Üç yıl sonra daha medeni zamanlarda, biz Swift var. OS X'in çalışma alanında ihtiyacınız olan şeyi tam olarak çekmek için kısa bir Swift komut dosyası yazabilirsiniz.

Aşağıdaki hızlı 3 pasajı yeni bir metin dosyasına yerleştirin. Eğer bu dosyayı koymak dizinden swift pbpaste.swift bazı html kopyalayın ve çalıştırın Sonra

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

: benimkini pbpaste.swift adını verdi.

Yay, html! Uggh, OS X, bir ton özel işaret ekledi (ve <meta> etiketi ?!) - ama hey, en azından düz metin değil!

Notlar:

  • NSPasteboardTypeHTML dize "public.html"
  • olarak değerlendirildiğini özel küresel muhtemelen isterdim böylece Açıkçası bu html, özgüdür ya:
    1. ismi o pbpaste-html.swift, veya
    komut satırı bağımsız değişkenlerinden istenen türü okuyun.
  • Bu biraz yavaş, çünkü anında yorumlanıyor, derlenmiyor ve çalıştırılmıyor.

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

    Sonra sadece ./pbpaste-html yerine swift pbpaste.swift çağırır: Derleme bana 10x hızlandırması verir.

Swift 2 versiyonu:

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