¿Es factible hacer uno?
Como esto es emacs, sí .
Mi enfoque es utilizar herramientas de terceros que puedan tomar HTML y convertir a texto plano o incluso directamente a formato Org. Creo que este es un truco feo, y puede haber mejores formas de hacerlo, pero parece que funciona para mis casos de prueba.
(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))
Desafortunadamente, HTML es increíblemente complejo ahora, ya no son algunas etiquetas simples escritas a mano. Este etiquetado HTML complejo requiere el complicado comando de shell anterior. Hace lo siguiente:
osascript
Obtiene el texto HTML del portapapeles. Está codificado en hexadecimal, así que
- perl convierte el hexadecimal en una cadena
- Podríamos convertir ese HTML a Org directamente con pandoc, pero el HTML está lleno de etiquetas complicadas y, por lo tanto, produce una tonelada de código Org. Para simplificar el HTML al conjunto mínimo de etiquetas necesarias para capturar el formato, yo
- Convierta el HTML a json, y luego
- Convierta el json a Org (estos dos pasos simplifican el HTML).
Tenga en cuenta que osascript
es para MacOS. Para modificar los pasos 1-2 para Linux, reemplace el argumento de shell-command-to-string con
"xclip -o -t text/html | pandoc -f html -t json | pandoc -f json -t org"
En cualquier caso, la salida del pandoc
comando se devuelve a emacs y se inserta en el búfer.
Vincula el nuevo comando Emacs a una tecla similar a "pegar", pero eso significa "pegar y convertir de html" para ti, y debería funcionar.
Alternativamente, si no desea pensar qué comando pegar usar, aquí hay una versión de Linux que convertirá HTML cuando esté disponible en el portapapeles y de lo contrario volverá a texto sin formato:
"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"
<b>text</b>
entonces después de queCmd + C
en él, se puede convertir en*text*
enorg mode
de alguna manera al pegar. O si no, al menos conserve el código HTML original para poder verlos en su formato original más adelante. La situación actual es de alguna manera que solo se representará texto sin formato.<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>
. Si copio este párrafo, quiero poder reproducir su formatoorgmode
.org mode
mucho más fácil de usar. En realidad, me gusta más con el formato sin conversión RTF intermedia porque conserva más información. Por ejemplo,#+BEGIN_QUOTE
y#+BEGIN_EXAMPLE
en su respuesta no se conservaría con la conversión adicional.