Copy markdown input to the clipboard as rich text

clipboardhtmlmarkdownpandocxclip

I'm about to get involved in some collaborative prose writing with a friend of mine via email. As a regular person, he will of course be using MS Word document formats; as a massive nerd, I prefer to use markdown when writing on a computer.

What I need is the exact opposite of this question about converting rich text copied from a webpage to markdown. My naive worst-case workflow would be:

  1. Write up the document in markdown
  2. Use pandoc -S file.mkd -o temp.html
  3. Open up temp.html in a web browser
  4. Copy & paste from the page to the open document in libreoffice

I am certain that this can be optimised.

(Google Docs is not an option in this case).

Even though I've answered the main question, I still feel that this could be optimised further. If there is any way to concatenate .doc files (which I will be receiving and which pandoc can write to), perhaps with the libreoffice command-line interface, then I suppose it would be possible to construct an overly-complicated one-liner and avoid having to leave the terminal at all. If anyone finds a way to do that, I will happily accept that answer over my own.

Best Answer

As it turns out, the link in the question hinted at a working solution in the form of xclip:

pandoc -S file.mkd | xclip -t text/html

...and then I can paste it straight into the document in libreoffice, properly formatted. This works with the versions of the programs in the Ubuntu 13.04 repositories (pandoc 1.10.1 and xclip 0.12) -- the -t option for xclip especially is only in version 0.12 or above. The -S option of pandoc makes it produce 'typographically correct output', so -- is turned into an en-dash, --- is turned into an em-dash, and a few other things.

If you want to use the ctrl-v clipboard, use:

pandoc -S file.mkd | xclip -t text/html -selection clipboard

Edit: if you're running OS X (with pbcopy rather than xclip), use:

pandoc -S file.mkd | textutil -stdin -format html -convert rtf -stdout | pbcopy

To transform selected text without creating a file, you can use:

xclip -o | pandoc -S | xclip -t text/html

...this can, of course, be mapped to a keyboard shortcut.

This can work well with a number of text markup formats as input, see the pandoc guide for some more information on how to accomplish this (you might need to use the -f/--from/-r/--read option, especially if you're using the xclip|pandoc|xclip version).

As a side note, you can also read an already-existing HTML file into xclip:

xclip -t text/html <file.html

or

<file.html xclip -t text/html
Related Question