Modalità organizzazione: analisi dell'HTML completo direttamente quando si incolla?


12

Attualmente, per rilevare strumenti come Evernotee Quiver, posso copiare direttamente i contenuti HTML dal mio browser preferito e incollarli nell'app, mantenendo tutti i collegamenti + formattazione. Tuttavia, in orgmode sembra che tutte le informazioni di formattazione vengano perse.

Ho visto qualcuno suggerire di usare ewwper navigare sul web e copiare il contenuto tramiteeww-org . Tuttavia, questo è davvero noioso (non credo che al giorno d'oggi ci siano molte persone che navigano sul Web ewwinvece dei moderni browser. Dovrò riaprire quel link ewwe fare la copia, per non parlare a volte ewwno rendere i contenuti piacevolmente).

È possibile Emacsanalizzare direttamente l'HTML copiato quando si incolla? Anche se non esiste ancora uno strumento esistente per questo, è possibile crearne uno?

Questa è quasi l'unica cosa che mi impedisce di passare orgmodeda altri strumenti di rilevamento.


Per favore, chiarisci cosa intendi per "analizzare direttamente l'HTML copiato"
mankoff

@mankoff OK Immagino di non essere stato abbastanza chiaro nella mia descrizione. Quello che voglio è, ad esempio, se l'HTML originale avesse <b>text</b>dopo di Cmd + Cesso su di esso, può essere convertito in *text*in org modequalche modo quando si incolla. O se no, almeno preservare il codice HTML originale in modo da poterli visualizzare nel loro formato originale originale in seguito. La situazione attuale è in qualche modo resa solo il testo normale.
xji,

Ad esempio, abbiamo qui <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>. Se copio questo paragrafo, voglio essere in grado di riprodurre la sua formattazione in orgmode.
xji,

1
@mankoff Wonderful! Ha funzionato! Tu sei l'uomo! Penso che potresti anche considerare di inviarlo come un pacchetto Emacs ecc. Ahah. Questo potrebbe rendere org modemolto più facile da usare. In realtà mi piace di più con la formattazione senza conversione intermedia di RTF perché conserva più informazioni. Ad esempio #+BEGIN_QUOTEe #+BEGIN_EXAMPLEnella tua risposta non verrebbero conservati con la conversione aggiuntiva.
xji,

1
@incandescentman Questo è solo un tentativo di eliminare alcune informazioni di formattazione, ad esempio alcuni CSS all'interno della pagina web. Puoi provarlo tu stesso e vedere che differenza fa.
xji,

Risposte:


12

è possibile farne uno?

Dato che si tratta di emacs, .

Il mio approccio è quello di utilizzare strumenti di terze parti che possono prendere HTML e convertirli in testo semplice o anche direttamente in formato Org. Penso che questo sia un brutto trucco e potrebbero esserci modi migliori per farlo, ma sembra che funzioni per i miei casi di test.

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

Sfortunatamente, l'HTML è incredibilmente complesso ora - non più alcuni semplici tag scritti a mano. Questa complessa codifica HTML richiede il complicato comando shell sopra. Fa quanto segue:

  1. osascriptottiene il testo HTML dagli Appunti. È codificato in esadecimale, quindi
  2. perl converte l'esagono in una stringa
  3. Potremmo convertire quell'HTML in Org direttamente con pandoc, ma l'HTML è pieno di tag complicati e quindi produce una tonnellata di codice Org. Al fine di semplicemente il codice HTML al set minimo di tag necessari per acquisire la formattazione, I
  4. Converti l'HTML in json e quindi
  5. Converti il ​​json in Org (questi due passaggi semplificano l'HTML).

Nota che osascriptè per MacOS. Per modificare i passaggi 1-2 per Linux, sostituire l'argomento shell-command-to-string con

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

In ogni caso, l'output del pandoccomando viene restituito a emacs e inserito nel buffer.

Associa il nuovo comando Emacs a una chiave simile a "incolla" ma ciò significa "incolla e converti da html" a te, e dovrebbe funzionare.

In alternativa, se non vuoi pensare a quale comando incolla usare, ecco una versione di Linux che convertirà HTML quando sarà disponibile negli Appunti e tornerà al testo normale:

"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"

Un'aggiunta: sembra che pandocusi automaticamente lo spazio Non-break piuttosto che lo spazio normale quando converti testo in linea formattato (grassetto, corsivo, codice ecc.), Che non sono riconosciuti orgmodedi default. Dovresti aggiungerlo () a org-emphasis-regexp-componentsper poter formattare correttamente quei testi orgmode.
xji,

in particolare la versione "rilasciata" di xclip non supporta l'opzione -t; quindi xclip deve essere compilato da github. Inoltre, potrebbe essere necessario reindirizzare l'input e l'output iconv utf-8
pandoc

xclipè anche su OS X (forse solo w / X11 e / o Strumenti di sviluppo installati?), quindi la risposta migliorata potrebbe funzionare anche su OS X.
mankoff,

@JIXiang Come modificare la risposta accettata in modo che converta anche gli spazi non interrompibili in spazi normali?
incandescentman,

1
@incandescentman Ho originariamente modificato il file del pacchetto della modalità org in modo che riconosca lo spazio non-break come separatore. Tuttavia si è rivelato noioso con i cambiamenti di versione. Ho quindi sollevato un problema sul repository di Pandoc che puoi cercare. In sostanza è possibile utilizzare un "filtro" in Pandoc per eseguire la sostituzione automatica. Ma a volte anche questo fallisce. Quindi ora seleziono solo manualmente il contenuto incollato ed eseguo una sostituzione. La mia ultima sostituzione è quasi sempre questa, quindi faccio scorrere la cronologia delle sostituzioni e faccio domanda.
xji,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.