In the evening, green soothes the eyes. I adapted an Emacs cheatsheet a couple of years ago, intending to remove items as I learned them and then add new ones — another good intention unfulfilled. But for what it’s worth, this is proportioned for 5:4 screens and designed to leave no space wasted. Use more and shorter columns for wide screens.
% compile with lualatex
\documentclass[11pt,svgnames]{article}
\usepackage{fixltx2e,fontspec,microtype,multicol,textcomp,xcolor}
\setmainfont[ItalicFont=LucidaBrightOT-Italic.otf,BoldFont=LucidaBrightOT-Demi.otf,BoldItalicFont=LucidaBrightOT-DemiItalic.otf,]{LucidaBrightOT.otf}
\setmonofont[ItalicFont=LucidaSansTypewriterOT-Oblique.otf,StylisticSet=1]{LucidaSansTypewriterOT.otf}
\linespread{1.02}
\usepackage[centering,columnsep=1.5em,margin=1.5em,paperheight=1024pt,paperwidth=1280pt]{geometry}
\definecolor{head}{HTML}{606060}
% \definecolor{head}{HTML}{72B247}
\definecolor{task}{HTML}{255C2A}
\definecolor{command}{HTML}{47B252}
\definecolor{bg}{HTML}{030804}
\setcounter{secnumdepth}{0}
\usepackage[compact,noindentafter]{titlesec}
\titleformat{\section}
{\Large\bfseries\color{head}}{\thesection}{}{}
\titleformat{\subsection}
{\large\bfseries\color{head}}{\thesubsection}{}{}
\titleformat{\subsubsection}
{\normalsize\color{head}}{\thesubsubsection}{}{}
\setlength{\parindent}{0pt}
\setlength{\parskip}{1ex plus .2ex minus .2ex}
\newcommand{\kbd}[1]{\textcolor{command}{\texttt{#1}}}
\pagestyle{empty}
\begin{document}
\pagecolor{bg}
\color{task}
\begin{center}
\Huge\textcolor{head}{Emacs Help}
\end{center}
\bigskip
\begin{multicols}{4}
\section{Files}
save \textbf{all} files\hfill\kbd{C-x s}\\
replace this file with the file you really want\hfill\kbd{C-x C-v}\\
write buffer to a specified file\hfill\kbd{C-x C-w}\\
toggle read-only status of buffer\hfill\kbd{C-x C-q}
\section{Buffers}
select another buffer\hfill\kbd{C-x b}\\
list all buffers\hfill\kbd{C-x C-b}\\
kill a buffer\hfill\kbd{C-x k}
\section{Getting Help}
For the help system, type \kbd{C-h} or \kbd{F1} and follow the
directions. For a \textbf{tutorial}, type \kbd{C-h t}.
remove help window\hfill\kbd{C-x 1}\\
scroll help window\hfill\kbd{C-M-v}\\
apropos: show commands matching a string\hfill\kbd{C-h a}\\
describe the function a key runs\hfill\kbd{C-h k}\\
describe a function\hfill\kbd{C-h f}\\
get mode-specific information\hfill\kbd{C-h m}
\subsection{Info}
enter the Info documentation reader\hfill\kbd{C-h i}\\
find specified function or variable in Info\hfill\kbd{C-h S}
\subsubsection{Moving within a node}
scroll forward\hfill\kbd{SPC}\\
scroll reverse\hfill\kbd{DEL}\\
beginning of node\hfill\kbd{.} (dot)
\subsubsection{Moving between nodes}
\textbf{next} node\hfill\kbd{n}\\
\textbf{previous} node\hfill\kbd{p}\\
move \textbf{up}\hfill\kbd{u}\\
select menu item by name\hfill\kbd{m}\\
select \textit{n}th menu item by number (1–9)\hfill\kbd{\itshape n}\\
follow cross reference (return with \kbd{l})\hfill\kbd{f}\\
return to last node you saw\hfill\kbd{l}\\
return to directory node\hfill\kbd{d}\\
go to top node of Info file\hfill\kbd{t}\\
go to any node by name\hfill\kbd{g}
\subsubsection{Other}
run Info \textbf{tutorial}\hfill\kbd{h}\\
look up a subject in the indices\hfill\kbd{i}\\
search nodes for regexp\hfill\kbd{s}\\
\textbf{quit} Info\hfill\kbd{q}
\section{In the Minibuffer}
complete as much as possible\hfill\kbd{TAB}\\
complete up to one word\hfill\kbd{SPC}\\
complete and execute\hfill\kbd{RET}\\
show possible completions\hfill\kbd{?}\\
fetch previous minibuffer input\hfill\kbd{M-p}\\
fetch later minibuffer input or default\hfill\kbd{M-n}\\
regexp search backward through history\hfill\kbd{M-r}\\
regexp search forward through history\hfill\kbd{M-s}\\
abort command\hfill\kbd{C-g}
Type \kbd{C-x ESC ESC} to edit and repeat the last command that
used the minibuffer.
\section{Error Recovery}
\textbf{abort} partially typed or executing command\hfill\kbd{C-g}\\
\textbf{recover} files after crash\hfill\kbd{M-x recover-session}\\
\textbf{undo} unwanted change\hfill\kbd{C-x u}, \kbd{C-\_} or \kbd{C-/}\\
restore original contents\hfill\kbd{M-x revert-buffer}\\
redraw garbaged screen\hfill\kbd{C-l}
\section{Motion}
\begin{tabular*}{1\linewidth}{@{}l@{\extracolsep{\fill}}ll@{}}
\bfseries entity to move over & \bfseries backward & \bfseries forward\\
word & \kbd{M-b} & \kbd{M-f}\\
line & \kbd{C-p} & \kbd{C-n}\\
sentence & \kbd{M-a} & \kbd{M-e}\\
paragraph & \kbd{M-\{} & \kbd{M-\}}\\
page & \kbd{C-x [} & \kbd{C-x ]}\\
sexp & \kbd{C-M-b} & \kbd{C-M-f}
\end{tabular*}
scroll left\hfill\kbd{C-x <}\\
scroll right\hfill\kbd{C-x >}
\section{Marking}
set mark here\hfill\kbd{C-@} or \kbd{C-SPC}\\
exchange point and mark\hfill\kbd{C-x C-x}\\
set mark \textit{arg} \textbf{words} away\hfill\kbd{M-@}\\
mark \textbf{paragraph}\hfill\kbd{M-h}\\
mark \textbf{page}\hfill\kbd{C-x C-p}\\
mark \textbf{sexp}\hfill\kbd{C-M-@}\\
mark \textbf{function}\hfill\kbd{C-M-h}\\
mark entire \textbf{buffer}\hfill\kbd{C-x h}
\section{Killing}
\begin{tabular*}{1\linewidth}{@{}l@{\extracolsep{\fill}}ll@{}}
\bfseries entity to kill & \bfseries backward & \bfseries forward\\
word & \kbd{M-DEL} & \kbd{M-d}\\
line (to end of) & \kbd{M-0 C-k} & \kbd{C-k}\\
sentence & \kbd{C-x DEL} & \kbd{M-k}\\
sexp & \kbd{M-\mbox{}- C-M-k} & \kbd{C-M-k}\\
\end{tabular*}
kill \textbf{region}\hfill\kbd{C-w}\\
copy region to kill ring\hfill\kbd{M-w}\\
kill through next occurrence of \textit{char}\hfill\kbd{M-z} \textit{char}\\
yank back last thing killed\hfill\kbd{C-y}\\
replace last yank with previous kill\hfill\kbd{M-y}
\section{Spelling}
check current word\hfill\kbd{M-\$}
\section{Transposing}
transpose \textbf{characters}\hfill\kbd{C-t}\\
transpose \textbf{words}\hfill\kbd{M-t}\\
transpose \textbf{lines}\hfill\kbd{C-x C-t}\\
transpose \textbf{sexps}\hfill\kbd{C-M-t}
\section{Incremental Search}
search forward\hfill\kbd{C-s}\\
search backward\hfill\kbd{C-r}\\
regular expression search\hfill\kbd{C-M-s}\\
reverse regular expression search\hfill\kbd{C-M-r}\\
select previous search string\hfill\kbd{M-p}\\
select next later search string\hfill\kbd{M-n}\\
exit incremental search\hfill\kbd{RET}\\
undo effect of last character\hfill\kbd{DEL}\\
abort current search\hfill\kbd{C-g}
Repeat \kbd{C-s} or \kbd{C-r} to repeat the search. If Emacs is still
searching, \kbd{C-g} cancels only the part not matched.
\section{Query Replace}
interactively replace a text string\hfill\kbd{M-\%}\\
using regular expressions\hfill\kbd{C-M-\%}
Valid responses are:
\textbf{replace} this one, go on to next\hfill\kbd{SPC}\\
replace this one, don’t move\hfill\kbd{,}\\
\textbf{skip} to next without replacing\hfill\kbd{DEL}\\
replace all remaining matches\hfill\kbd{!}\\
\textbf{back up} to the previous match\hfill\kbd{\^{}}\\
\textbf{exit} query-replace\hfill\kbd{RET}\\
enter recursive edit (\kbd{C-M-c} to exit)\hfill\kbd{C-r}
\section{Regular Expressions}
any single character except a newline\hfill\kbd{.} (dot)\\
zero or more repeats\hfill\kbd{*}\\
one or more repeats\hfill\kbd{+}\\
zero or one repeat\hfill\kbd{?}\\
quote regular expression special character \textit{c}\hfill\kbd{\textbackslash\itshape c}\\
alternative (“or”)\hfill\kbd{\textbackslash|}\\
grouping\hfill\kbd{\textbackslash( ... )}\\
same text as \textit{n}th group\hfill\kbd{\textbackslash\itshape n}\\
at word break\hfill\kbd{\textbackslash b}\\
not at word break\hfill\kbd{\textbackslash B}
\begin{tabular*}{1\linewidth}{@{}l@{\extracolsep{\fill}}ll@{}}
\bfseries entity & \bfseries match start & \bfseries match end\\
line & \kbd{\^{}} & \kbd{\$}\\
word & \kbd{<} & \kbd{>}\\
buffer & \kbd{`} & \kbd{'}\\[.5ex]
\bfseries class of characters & \bfseries match these & \bfseries match others\\
explicit set & \kbd{[ ... ]} & \kbd{[\^{} ... ]}\\
word-syntax character & \kbd{w} & \kbd{W}\\
character with syntax \textit{c} & \kbd{s}\textit{c} & \kbd{S}\textit{c}
\end{tabular*}
\section{Tags}
find a tag (a definition)\hfill\kbd{M-.}\\
find next occurrence of tag\hfill\kbd{C-u M-.}\\
specify a new tags file\hfill\kbd{M-x visit-tags-table}\\
regexp search all files in tags table\hfill\kbd{M-x tags-search}\\
query-replace in the files\hfill\kbd{M-x tags-query-replace}\\
continue last tags search or query-replace\hfill\kbd{M-,}
\section{Formatting}
indent current \textbf{line} (mode-dependent)\hfill\kbd{TAB}\\
indent \textbf{region} (mode-dependent)\hfill\kbd{C-M-\textbackslash}\\
indent \textbf{sexp} (mode-dependent)\hfill\kbd{C-M-q}\\
indent region rigidly \textit{arg} columns\hfill\kbd{C-x TAB}\\
move rest of line vertically down\hfill\kbd{C-M-o}\\
delete blank lines around point\hfill\kbd{C-x C-o}\\
join line with previous (with arg, next)\hfill\kbd{M-\^{}}\\
delete all white space around point\hfill\kbd{M-\textbackslash}\\
set fill column to \textit{arg}\hfill\kbd{C-x f}\\
set prefix each line starts with\hfill\kbd{C-x .}\\
set face\hfill\kbd{M-o}
\section{Case Change}
uppercase word\hfill\kbd{M-u}\\
lowercase word\hfill\kbd{M-l}\\
capitalize word\hfill\kbd{M-c}\\
uppercase region\hfill\kbd{C-x C-u}\\
lowercase region\hfill\kbd{C-x C-l}
\section{Rectangles}
copy rectangle to register\hfill\kbd{C-x r r}\\
kill rectangle\hfill\kbd{C-x r k}\\
yank rectangle\hfill\kbd{C-x r y}\\
open rectangle, shifting text right\hfill\kbd{C-x r o}\\
blank out rectangle\hfill\kbd{C-x r c}\\
prefix each line with a string\hfill\kbd{C-x r t}
\section{Multiple Windows}
When two commands are shown, the second is a similar command for a
frame instead of a window.
\begin{tabular*}{1\linewidth}{@{}l@{\extracolsep{\fill}}ll@{}}
delete all other windows & \kbd{C-x 1} & \kbd{C-x 5 1}\\
split window, above and below & \kbd{C-x 2} & \kbd{C-x 5 2}\\
delete this window & \kbd{C-x 0} & \kbd{C-x 5 0}
\end{tabular*}
split window, side by side\hfill\kbd{C-x 3}\\
scroll other window\hfill\kbd{C-M-v}
\begin{tabular*}{1\linewidth}{@{}l@{\extracolsep{\fill}}ll@{}}
switch cursor to another window & \kbd{C-x o} & \kbd{C-x 5 o}\\
select buffer in other window & \kbd{C-x 4 b} & \kbd{C-x 5 b}\\
find file in other window & \kbd{C-x 4 f} & \kbd{C-x 5 f}\\
find file read-only in other window & \kbd{C-x 4 r} & \kbd{C-x 5 r}\\
run Dired in other window & \kbd{C-x 4 d} & \kbd{C-x 5 d}\\
find tag in other window & \kbd{C-x 4 .} & \kbd{C-x 5 .}
\end{tabular*}
grow window taller\hfill\kbd{C-x \^{}}\\
shrink window narrower\hfill\kbd{C-x \{}\\
grow window wider\hfill\kbd{C-x \}}
\section{Shells}
execute a shell command\hfill\kbd{M-!}\\
run a shell command on the region\hfill\kbd{M-|}\\
filter region through a shell command\hfill\kbd{C-u M-|}\\
start a shell in window \kbd{*shell*}\hfill\kbd{M-x shell}
\section{Abbrevs}
add global abbrev\hfill\kbd{C-x a g}\\
add mode-local abbrev\hfill\kbd{C-x a l}\\
add global expansion for this abbrev\hfill\kbd{C-x a i g}\\
add mode-local expansion for this abbrev\hfill\kbd{C-x a i l}\\
explicitly expand abbrev\hfill\kbd{C-x a e}\\
expand previous word dynamically\hfill\kbd{M-/}
\section{Registers}
save region in register\hfill\kbd{C-x r s}\\
insert register contents into buffer\hfill\kbd{C-x r i}\\
save value of point in register\hfill\kbd{C-x r SPC}\\
jump to point saved in register\hfill\kbd{C-x r j}
\section{Keyboard Macros}
\textbf{start} defining a keyboard macro\hfill\kbd{C-x (}\\
\textbf{end} keyboard macro definition\hfill\kbd{C-x )}\\
\textbf{execute} last-defined keyboard macro\hfill\kbd{C-x e}\\
append to last keyboard macro\hfill\kbd{C-u C-x (}\\
name last macro\hfill\kbd{M-x name-last-kbd-macro}\\
insert definition in buffer\hfill\kbd{M-x insert-kbd-macro}
\end{multicols}
\end{document}
The PDF output is on Dropbox.

arraypackage, you can define the columns as{@{}p{7cm}>{\ttfamily\color{red!50}}l@{}}, so that you don't need to write\textpink{…}in the right column, just type what you want and it will appear in your predefined style. – Manuel Jan 26 '14 at 11:34