Instantly share code, notes, and snippets.

Embed
What would you like to do?
Code highlighting for Keynote presentations

Step 0:

Get Homebrew installed on your mac if you don't already have it

Step 1:

Install highlight. "brew install highlight". (This brings down Lua and Boost as well)

Step 2:

Highlight your source. "highlight -O rtf myfile.php | pbcopy". This will highlight the source code in RTF format and copy the result of that operation to your Mac's clipboard.

Step 3:

Paste into your slide in Keynote. Keynote will create a new text box with your highlighted code. You can adjust the width as needed, and adjust the font size with cmd+ and cmd-

@pmoran

This comment has been minimized.

pmoran commented Jan 18, 2012

Perfect - thanks! (Google indexed within 6 hours too). fyi I had to 'brew update' to avoid boost SHA mismatch error.

@snookca

This comment has been minimized.

snookca commented Sep 21, 2012

Also: "pbpaste | highlight --syntax=js -O rtf | pbcopy" I'll have to set this up as an alias to quickly run a few things through the highlighter.

@h2rd

This comment has been minimized.

h2rd commented Feb 3, 2013

it's very useful. Thanks.

@felixyz

This comment has been minimized.

felixyz commented May 29, 2013

Great tool! Here's just a dump of the params I use, in case it helps/inspires anyone:

highlight -O rtf highlight.rb --line-numbers --font-size 24 --font Inconsolata --style solarized-dark -W -J 50 -j 3 --src-lang ruby | pbcopy

@aoberoi

This comment has been minimized.

aoberoi commented Sep 5, 2013

I noticed that you lose the background color of the theme from highlight, is there any way to keep that?

@mikeyp

This comment has been minimized.

mikeyp commented Sep 24, 2013

I use pygments instead of highlight, which is easy to install via python. With that in place you can use an Applescript like this: http://apple.stackexchange.com/questions/94222/how-to-get-automator-to-treat-text-as-rtf/94246#94246.

I have that in my Pages (could be Keynote) scripts folder and then I enabled the scripts menu. Now I just select the text I want to format and hit a menu item and it highlights it for me!

@proteneer

This comment has been minimized.

proteneer commented Oct 28, 2013

What do you do when you can't brew install to /usr/local/ (the default location in python) and you don't want to install something like anaconda?

edit - well fml didnt realize this required boost. there goes an hour.

@proteneer

This comment has been minimized.

proteneer commented Oct 28, 2013

does this work on mavericks?

@oytuneren

This comment has been minimized.

oytuneren commented Oct 31, 2013

Yes it works on mavericks too. Thank you for sharing.

@derek

This comment has been minimized.

derek commented Nov 1, 2013

If anyone needs it, here's the documentation for Highlight, http://www.andre-simon.de/doku/highlight/en/highlight.html

Very useful gist. Thanks for posting.

@rafarocha

This comment has been minimized.

rafarocha commented Nov 12, 2013

for slides black background preferred theme anotherdark. which font style cool guys recommend?

@hadifarnoud

This comment has been minimized.

hadifarnoud commented Feb 18, 2014

@snookca how do you add your filename in there?

@jongkwang

This comment has been minimized.

jongkwang commented Feb 24, 2014

Oh... very great!!
thank you.

@simono

This comment has been minimized.

simono commented Mar 6, 2014

Here's my version, using Pygments https://gist.github.com/simono/9379347

@denvazh

This comment has been minimized.

denvazh commented Mar 12, 2014

This is really useful gist!
Thank you very much for sharing/posting it.

@reterVision

This comment has been minimized.

reterVision commented Mar 14, 2014

Awesome!

@mazuhl

This comment has been minimized.

mazuhl commented Apr 8, 2014

@hadifarnoud this one works with the filename or clipboard. Put the code in your .bash_profile.

Following on from @snookca and @felixyz you can enter the syntax on the command line and either copy from the clipboard (light js) or pass a filename too (light js func.js).

function light() {
  if [ -z "$2" ]
    then src="pbpaste"
  else
    src="cat $2"
  fi
  $src | highlight -O rtf --syntax $1 --font Inconsolata --style solarized-dark --font-size 24 | pbcopy
}
@Chinchilla86

This comment has been minimized.

Chinchilla86 commented Apr 29, 2014

For me it works when I copy & paste some code directly from Xcode to TextEdit.
Also it is possible to create a textfield in Pages or Keynote and paste the code in it.
Tested on Mac OS X 10.9.1 with Xcode 5.1, Keynote 6.2 and Pages 5.2.

@backflip

This comment has been minimized.

backflip commented May 31, 2014

If you want to use Alfred to format code from the clipboard (based on @mazuhl's comment above): https://dl.dropboxusercontent.com/u/1806977/Highlight%20Code.alfredworkflow

In case it doesn't work: Make sure $PATH is set accordingly. Alfred apparently does not know about your $PATH, that's why the workflow starts with export PATH=$PATH:/usr/local/bin. However, if highlight is on a different path, this has to be changed.

@lrytz

This comment has been minimized.

lrytz commented Nov 8, 2014

Here's how to set up a keyboard shortcut to highlight the current selection directly within Keynote: https://gist.github.com/lrytz/d82c1adf7337a4cecace

@nikcorg

This comment has been minimized.

nikcorg commented Nov 13, 2014

On mac, you can quickly preview a HTML version with the help of netcat:

(cat <source> | highlight --inline-css | nc -l 5555)& open http://localhost:5555

@zangbianxuegu

This comment has been minimized.

zangbianxuegu commented Aug 23, 2015

highlight: Could not read input file:

@lkuper

This comment has been minimized.

lkuper commented Sep 12, 2015

I've done this for years with pygmentize: pygmentize -f rtf <filename> | pbcopy does the trick, although some upthread commenters have fancier variations.

@prodis

This comment has been minimized.

prodis commented Dec 6, 2015

Thank you. This helped me to create my last presentation.

@cksachdev

This comment has been minimized.

cksachdev commented Dec 8, 2015

@aoberoi Did you figure out a solution to persist background color using highlight?

@M2shad0w

This comment has been minimized.

M2shad0w commented Dec 28, 2015

Thank you. This helped me to create my last presentation.

@freak4pc

This comment has been minimized.

freak4pc commented Jan 12, 2016

Anyone has ideas for ES6 support ?

@mcspronko

This comment has been minimized.

mcspronko commented Feb 7, 2016

Thanks for advice. Works perfect for my slides.

@satblip

This comment has been minimized.

satblip commented Feb 10, 2016

Thanks for the share!

@gregberger

This comment has been minimized.

gregberger commented Mar 1, 2016

I tried and succeeded in copy-pasting from PHPStorm and XCode aswell [ MacOS 10.11.3 ].
@freak4pc : works in Atom too with the copy-as-rtf package, which uses pygments under the hood.

It seems there is a Sublime package doing the same.

As far as I know, this is not working with Netbeans

@fancymax

This comment has been minimized.

fancymax commented Jul 5, 2016

Thanks,very helpful~

@AlexanderTserkovniy

This comment has been minimized.

AlexanderTserkovniy commented Jul 26, 2016

Amazing!

@cblanc

This comment has been minimized.

cblanc commented Sep 6, 2016

To format JSON with human readable spacing and breaklines (requires python 2.6+)

pbpaste | python -m json.tool | highlight --syntax=json -O rtf | pbcopy
@gyzerok

This comment has been minimized.

gyzerok commented Feb 21, 2017

Any suggestions about which highlight theme is better to use for good contrast on white slides?

@sparanoid

This comment has been minimized.

sparanoid commented Mar 20, 2017

@rafarocha I found moria, neon, vampire, and zenburn are good for themes with dark background.

@rkettelerij

This comment has been minimized.

rkettelerij commented May 2, 2017

This is a real gem! Thanks for sharing.

Tip: if you have some code on your clipboard and want it highlighted, enter: pbpaste | highlight -O rtf --syntax=groovy | pbcopy (replace syntax=groovy with your language of choice)

@xiaoronglv

This comment has been minimized.

xiaoronglv commented Aug 23, 2017

why are background color missed ?

image

this snippet is generate by this commmand

export PATH=$PATH:/usr/local/bin
pbpaste | highlight -O rtf --syntax {query} --font-size 14 --font Inconsolata --style zellner --inline-css | pbcopy
@sfletche

This comment has been minimized.

sfletche commented Jan 13, 2018

Any solutions for highlighting jsx code?

@nitish24p

This comment has been minimized.

nitish24p commented Mar 13, 2018

The following works for VSCODE.. add the following in your keybindings.json

    {
      "command": "editor.action.clipboardCopyWithSyntaxHighlightingAction",
      "key": "shift+cmd+c"
    }

Now any bit of code you want to copy do a cmd + shift + c.
Paste this onto a text editor like TextEdit for mac. Now copy the same code from textEdit and paste onto keynote..

@EdgarOrtegaRamirez

This comment has been minimized.

EdgarOrtegaRamirez commented Aug 23, 2018

My solution is to use Vim with vim-polyglot installed for syntax highlight

  1. Open the file with the code on Vim
  2. Use vertical selection (Option+Command + Left Click) on Terminal to select the part of the code I want to put into Keynote.
  3. Pasted the copied content into a page in Keynote, the content is already formatted
  4. You can customize the formatting even further on Keynote

Notes:

  • point 2 works on iTerm as well, but you have to enable the option to copy text with styles.
    Prefs > Advanced > Copy to pasteboard on selection includes color and font style.
  • The background color of your terminal is also copied, use Keynote to remove the background color. see this image
@javadba

This comment has been minimized.

javadba commented Oct 12, 2018

I would like to reduce the inter-line spacing : can either highlight or pygmentize handle that?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment