Kuruluş modu - Yapıştırırken zengin HTML'yi doğrudan ayrıştırma?


12

Şu anda, Evernoteve gibi not alma araçları için Quiver, HTML içeriğini doğrudan favori tarayıcımdan kopyalayabilir ve ardından tüm biçimlendirme + bağlantısı korunarak uygulamaya yapıştırabilirim. Ancak orgmode'da tüm biçimlendirme bilgilerinin kaybolduğu görülüyor.

Birinin web'de gezinmek ve içeriği kopyalamak için kullanmanızı önerdiğiniewweww-org gördüm . Ancak bu gerçekten sıkıcı ( ewwgünümüzde modern tarayıcılar yerine web'de dolaşan birçok insan olacağını düşünmüyorum . Bu bağlantıyı tekrar açıp ewwkopyalamayı yapmam gerekecek, bazen bahsetmiyorum ewwbile içeriği güzel hale getirin).

EmacsYapıştırırken kopyalanan HTML'yi doğrudan ayrıştırmak mümkün mü ? Bunun için henüz mevcut bir araç olmasa bile, bir araç yapmak mümkün müdür?

Bu neredeyse orgmodediğer not alma araçlarına geçmemi engelleyen tek şey .


Lütfen "kopyalanan HTML'yi doğrudan ayrıştırın" ile ne demek istediğinizi
açıklayın

@mankoff Tamam Sanırım açıklamamda yeterince net değildim. Orjinal HTML olsaydı İstediğim örneğin şöyledir <b>text</b>I sonra sonra Cmd + Cüzerine, bu dönüştürülebilir *text*içinde org modeyapıştırırken bazı yollarla. Ya da hayırsa, en azından orijinal HTML kodunu koruyun, böylece onları daha sonra orijinal biçimleriyle görüntüleyebilirim. Mevcut durum bir şekilde sadece düz metin olarak görüntülenecektir.
xji

Mesela burada var <p>I've seen somebody <a href="http://emacs.stackexchange.com/q/7171/115">suggest using <code>eww</code> to browse the web and copy the content via <code>eww-org</code></a>. However that is really tedious(I don't think there would be a lot of people browsing the web using <code>eww</code> instead of modern browsers nowadays. I'll have to open that link again in <code>eww</code> and do the copying, not to mention sometimes <code>eww</code> doesn't render the contents nicely). </p>. Bu paragrafı kopyalarsam, biçimlendirmesini yeniden oluşturmak istiyorum orgmode.
xji

1
@mankoff Harika! İşe yaradı! Sen adamsın! Hatta bunu bir Emacs paketi gibi göndermeyi bile düşünebilirsiniz. Bu org modeçok daha kullanıcı dostu olabilir. Aslında daha fazla bilgi koruduğu için ara RTF dönüşüm olmadan biçimlendirme ile daha çok seviyorum. Örneğin #+BEGIN_QUOTEve #+BEGIN_EXAMPLEcevabınızda ek dönüşüm ile korunmaz.
xji

1
@incandescentman Bu sadece bazı biçimlendirme bilgilerini, örneğin web sayfasındaki bazı CSS'leri soymaya çalışır. Bunu kendiniz deneyebilir ve ne kadar fark yarattığını görebilirsiniz.
xji

Yanıtlar:


12

bir tane yapmak mümkün mü?

Bu emacs olduğundan, evet .

Yaklaşımım HTML alabilen ve düz metne hatta doğrudan Org formatına dönüşebilen üçüncü taraf araçlar kullanmak. Bence bu çirkin bir hack ve bunu yapmanın daha iyi yolları olabilir, ama test senaryolarımda işe yarıyor gibi görünüyor.

(defun kdm/html2org-clipboard ()
  "Convert clipboard contents from HTML to Org and then paste (yank)."
  (interactive)
  (kill-new (shell-command-to-string "osascript -e 'the clipboard as \"HTML\"' | perl -ne 'print chr foreach unpack(\"C*\",pack(\"H*\",substr($_,11,-3)))' | pandoc -f html -t json | pandoc -f json -t org"))
  (yank))

Ne yazık ki, HTML şu anda inanılmaz derecede karmaşık - artık bazı basit elle yazılmış etiketler değil. Bu karmaşık HTML etiketlemesi, yukarıdaki karmaşık kabuk komutunu gerektirir. Aşağıdakileri yapar:

  1. osascriptHTML metnini panodan alır. Onaltılık kodludur, yani
  2. perl, hex'i bir dizeye dönüştürür
  3. Bu HTML'yi doğrudan pandoc ile Org'ye dönüştürebiliriz, ancak HTML karmaşık etiketlerle doludur ve bu nedenle bir ton Org kodu üretir. HTML'yi biçimlendirmeyi yakalamak için gereken minimum etiket kümesine basitçe eklemek için,
  4. HTML'yi json'a dönüştürün ve ardından
  5. Json'u Kuruluş'a dönüştürün (bu iki adım HTML'yi basitleştirir).

Bunun osascriptMacOS için olduğunu unutmayın . Linux için 1-2. Adımları değiştirmek için shell-command--string argümanını

"xclip -o -t text/html | pandoc -f html -t json | pandoc -f json -t org"

Her durumda, pandockomutun çıktısı emac'lara döndürülür ve arabelleğe eklenir.

Yeni Emacs komutunu "paste" e benzer bir anahtara bağlayın, ancak bu "sizin için" paste-and-convert-from-html "anlamına gelir ve çalışması gerekir.

Alternatif olarak, hangi yapıştırma komutunu kullanacağınızı düşünmek istemiyorsanız, panoda mevcut olduğunda HTML'yi dönüştürecek ve aksi takdirde düz metne geri dönecek bir Linux sürümü:

"xclip -o -t TARGETS | grep -q text/html && (xclip -o -t text/html | pandoc -f html -t json | pandoc -f json -t org) || xclip -o"

Bir ek olarak: Biçimlendirilmiş satır içi metni (kalın, italik, kod vb.) Dönüştürürken varsayılan olarak tanınmayan pandocotomatik olarak normal alan yerine kırılmayan alanı çok fazla kullanıyor gibi görünüyor orgmode. Bu org-emphasis-regexp-componentsmetinlerin doğru şekilde biçimlendirilmesi için () öğesini eklemeniz gerekir orgmode.
15:15

özellikle xclip "sürümü" sürümü -t seçeneğini desteklemez; bu nedenle xclip github'dan oluşturulmalıdır. Ayrıca, pandoc giriş ve çıkışını da boruya bağlamanız gerekebiliriconv utf-8
malcook

xclipOS X'te de (belki sadece w / X11 ve / veya Developer Tools yüklü?), bu nedenle geliştirilmiş cevap OS X üzerinde de çalışabilir.
mankoff

@JIXiang Kabul edilen cevabı, kırılmayan boşlukları normal alanlara da dönüştürecek şekilde nasıl değiştirebilirim?
incandescentman

1
@incandescentman Başlangıçta org-mode'un paket dosyasını, ara vermeyen alanı ayırıcı olarak tanıyacak şekilde değiştirdim. Ancak sürüm değişikliklerinde sıkıcı olduğu ortaya çıktı. Daha sonra, arama yapabileceğiniz pandoc repo ile ilgili bir sorun ortaya çıkardım. Esasen otomatik değiştirme yapmak için pandoc'ta bir "filtre" kullanabilirsiniz. Ancak bu bazen başarısız olur. Şimdi yapıştırılan içeriği çoğunlukla manuel olarak seçiyorum ve bir ikame gerçekleştiriyorum. Son değiştirmem neredeyse her zaman budur, bu yüzden sadece değiştirme tarihimi yukarı kaydırıp uygularım.
xji
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.