Skip to content

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.

Copy link

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.

Copy link

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.

Copy link

h2rd commented Feb 3, 2013

it's very useful. Thanks.

@felixyz

This comment has been minimized.

Copy link

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.

Copy link

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.

Copy link

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.

Copy link

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.

Copy link

proteneer commented Oct 28, 2013

does this work on mavericks?

@oytuneren

This comment has been minimized.

Copy link

oytuneren commented Oct 31, 2013

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

@derek

This comment has been minimized.

Copy link

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.

Copy link

rafarocha commented Nov 12, 2013

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

@hadifarnoud

This comment has been minimized.

Copy link

hadifarnoud commented Feb 18, 2014

@snookca how do you add your filename in there?

@jongkwang

This comment has been minimized.

Copy link

jongkwang commented Feb 24, 2014

Oh... very great!!
thank you.

@simono

This comment has been minimized.

Copy link

simono commented Mar 6, 2014

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

@denvazh

This comment has been minimized.

Copy link

denvazh commented Mar 12, 2014

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

@reterVision

This comment has been minimized.

Copy link

reterVision commented Mar 14, 2014

Awesome!

@mazuhl

This comment has been minimized.

Copy link

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.

Copy link

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.

Copy link

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.

Copy link

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.

Copy link

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.

Copy link

zangbianxuegu commented Aug 23, 2015

highlight: Could not read input file:

@lkuper

This comment has been minimized.

Copy link

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.

Copy link

prodis commented Dec 6, 2015

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

@cksachdev

This comment has been minimized.

Copy link

cksachdev commented Dec 8, 2015

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

@M2shad0w

This comment has been minimized.

Copy link

M2shad0w commented Dec 28, 2015

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

@freak4pc

This comment has been minimized.

Copy link

freak4pc commented Jan 12, 2016

Anyone has ideas for ES6 support ?

@mcspronko

This comment has been minimized.

Copy link

mcspronko commented Feb 7, 2016

Thanks for advice. Works perfect for my slides.

@satblip

This comment has been minimized.

Copy link

satblip commented Feb 10, 2016

Thanks for the share!

@gregberger

This comment has been minimized.

Copy link

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.

Copy link

fancymax commented Jul 5, 2016

Thanks,very helpful~

@AlexanderTserkovniy

This comment has been minimized.

Copy link

AlexanderTserkovniy commented Jul 26, 2016

Amazing!

@cblanc

This comment has been minimized.

Copy link

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.

Copy link

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.

Copy link

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.

Copy link

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.

Copy link

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.

Copy link

sfletche commented Jan 13, 2018

Any solutions for highlighting jsx code?

@nitish24p

This comment has been minimized.

Copy link

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.

Copy link

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.

Copy link

javadba commented Oct 12, 2018

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

@Mrcooder

This comment has been minimized.

Copy link

Mrcooder commented Dec 1, 2018

It seems does not support js. :(

@taizilongxu

This comment has been minimized.

Copy link

taizilongxu commented Dec 6, 2018

👍

@PaulRBerg

This comment has been minimized.

Copy link

PaulRBerg commented Sep 3, 2019

Any plans to add support for --syntax=solidity?

@iknownothing

This comment has been minimized.

Copy link

iknownothing commented Mar 12, 2020

This is really helpful, thanks a lot. However, I can not get background color working, with canvas setting. Any suggestion?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.