3.3Keyboard Shortcuts

Most key presses simply insert a character
into the editor, such as a, 3, or
(. Other keys and key combinations act as keyboard shortcuts
that move the blinking caret, delete a line, copy the selection,
etc. Keyboard shortcuts are usually trigger by key combinations using
the Control, Meta, or Command key.

Many of the key-binding actions can also be performed
with menu items.

C-‹key› means press the Control key, hold it down and then
press ‹key› and then release them both. For example: C-e
(Control-E) moves the blinking caret to the end of the current line.

M-‹key› is the same as C-‹key›, except with the Meta
key. Depending on your keyboard, Meta may be called “Left,”
“Right,” or have a diamond symbol, but it’s usually on the bottom
row next to the space bar. M-‹key› can also be performed as a
two-character sequence: first, strike and release the Escape key, then
strike ‹key›. On Mac OS, Meta is, by default,
available only through the Escape key. But the preferences dialog
(in the General Editing sub-panel of the Editing panel)
has check boxes that adjust the handling of the Alt key or the Command
key to be meta.

DEL is the Delete key.

SPACE is the Space bar.

On most keyboards, “<” and “>” are shifted characters. So, to
get M->, you actually have to type Meta-Shift->. That is, press and
hold down both the Meta and Shift keys, and then strike “>”.

On Windows (and sometimes under Unix)
some of these keybindings are actually standard menu
items. Those keybindings will behave according to the menus, unless
the Enable keybindings in menus preference is unchecked.
For example, the C-e keybinding mentioned above actually toggles
the visibility of the interactions window.

If you are most familiar with
Emacs-style key bindings (especially on windows or some linux installations
where the control key is, by default, for the menu shortcuts),
you should uncheck the Enable
keybindings in menus preference. Many of the keybindings below are
inspired by Emacs. See also Defining Custom Shortcuts for suggestions
on how to bind keys to menu items on a selective basis.

And finally, the authoritative source for keybindings
is the Edit menu’s Show Active Keybindings
menu item. Keybindings in DrRacket are often sensitive to
the window that has the keyboard focus, so the contents
of the window that Show Active Keybindings opens
will depend where the keyboard focus was when the menu was
selected.

3.3.1Moving Around

C-f : move forward one character

C-b : move backward one character

M-f : move forward one word

M-b : move backward one word

C-v : move forward one page

M-v : move backward one page

M-< : move to beginning of file

M-> : move to end of file

C-a : move to beginning of line (left)

C-e : move to end of line (right)

C-n : move to next line (down)

C-p : move to previous line (up)

M-C-f : move forward one S-expression

M-C-b : move backward one S-expression

M-C-u : move up out of an S-expression

M-C-d : move down into a nested S-expression

M-C-SPACE : select forward S-expression

M-C-p : match parentheses backward

M-C-left : move backwards to the nearest editor box

A-C-left : move backwards to the nearest editor box

M-C-right : move forward to the nearest editor box

A-C-right : move forward to the nearest editor box

M-C-up : move up out of an embedded editor

A-C-up : move up out of an embedded editor

M-C-down : move down into an embedded editor

A-C-down : move down into an embedded editor

C-C C-Z : move the cursor to the interactions window

C-F6 : move the cursor between different windows (usually
the interactions and definitions windows, but also the
search window and other editable portions of DrRacket).
Also, search for “shift-focus” in the
Show Active Keybindings menu’s window for more,
platform-specific keybindings that have this functionality

3.3.2Editing Operations

C-_ : undo

C-+ : redo

C-x u : undo

C-d : delete forward one character

C-h : delete backward one character

M-d : delete forward one word

M-DEL : delete backward one word

C-k : delete forward to end of line

M-C-k : delete forward one S-expression

M-w : copy selection to clipboard

C-w : delete selection to clipboard (cut)

C-y : paste from clipboard (yank)

C-t : transpose characters

M-t : transpose words

M-C-t : transpose sexpressions

M-C-m : toggle dark green marking of matching parenthesis

M-C-k : cut complete sexpression

M-( : wrap selection in parentheses

M-[ : wrap selection in square brackets

M-{ : wrap selection in curly brackets

M-S-L : wrap selection in (lambda ()...)
and put the insertion point in the argument list of the lambda

C-c C-o : the sexpression following the
insertion point is put in place of its containing sexpression

C-c C-e : the first and last characters (usually parentheses)
of the containing expression are removed

C-c C-l : wraps a let around the
sexpression following the insertion point and puts a printf in at
that point (useful for debugging).

3.3.7Interactions

M-n : bring the expression after the current expression in the
expression history down to the prompt

M-h : Show the current expression history in a separate window

3.3.8LaTeX and TeX inspired keybindings

C-\ M-\ c:x;l : traces backwards from the insertion
point, looking for a backslash followed by a LaTeX
macro name or a prefix of such a name. If a macro name is found,
it replaces the backslash and the name with the corresponding key in
the table below; if a (proper) prefix p is found, it replaces p
with the longest common prefix of all macro names that have p as a
prefix (unless there is only one such name, in which case it behaves as if
p were a complete macro name).

These are the currently supported macro names and the keys they map into:

\Downarrow

⇓

\nwarrow

↖

\downarrow

↓

\Rightarrow

⇒

\rightarrow

→

\mapsto

↦

\searrow

↘

\swarrow

↙

\leftarrow

←

\uparrow

↑

\Leftarrow

⇐

\longrightarrow

−

\Uparrow

⇑

\Leftrightarrow

⇔

\updownarrow

↕

\leftrightarrow

↔

\nearrow

↗

\Updownarrow

⇕

\leadsto

↝

\aleph

א

\prime

′

\emptyset

∅

\nabla

∇

\diamondsuit

♦

\spadesuit

♠

\clubsuit

♣

\heartsuit

♥

\sharp

♯

\flat

♭

\natural

♮

\surd

√

\neg

¬

\triangle

△

\forall

∀

\exists

∃

\infty

∞

\circ

∘

\alpha

α

\theta

θ

\tau

τ

\beta

β

\vartheta

ϑ

\pi

π

\upsilon

υ

\gamma

γ

\varpi

ϖ

\phi

ϕ

\delta

δ

\kappa

κ

\rho

ρ

\varphi

ϕ

\epsilon

ϵ

\lambda

λ

\varrho

ϱ

\chi

χ

\varepsilon

ε

\mu

μ

\sigma

σ

\psi

ψ

\zeta

ζ

\nu

ν

\varsigma

ς

\omega

ω

\eta

η

\xi

ξ

\iota

ι

\Gamma

Γ

\Lambda

Λ

\Sigma

Σ

\Psi

Ψ

\Delta

Δ

\Xi

Ξ

\Upsilon

Υ

\Omega

Ω

\Theta

Θ

\Pi

Π

\Phi

Φ

\pm

±

\cap

∩

\diamond

◇

\oplus

⊕

\mp

∓

\cup

∪

\bigtriangleup

△

\ominus

⊖

\times

×

\uplus

⊎

\bigtriangledown

▽

\otimes

⊗

\div

÷

\sqcap

⊓

\triangleright

▹

\oslash

⊘

\ast

∗

\sqcup

⊔

\vee

∨

\wedge

∧

\triangleleft

◃

\odot

⊙

\star

★

\dagger

†

\bullet

•

\ddagger

‡

\wr

≀

\amalg

⨿

\leq

≤

\geq

≥

\equiv

≡

\models

⊨

\prec

≺

\succ

≻

\precdot

⋖

\succdot

⋗

\sim

∼

\perp

⊥

\bot

⊥

\top

⊤

\preceq

≼

\succeq

≽

\simeq

≃

\ll

≪

\gg

≫

\asymp

≍

\parallel

∥

\subset

⊂

\supset

⊃

\approx

≈

\bowtie

⋈

\subseteq

⊆

\supseteq

⊇

\cong

≌

\sqsubsetb

⊏

\sqsupsetb

⊐

\neq

≠

\smile

⌣

\sqsubseteq

⊑

\sqsupseteq

⊒

\doteq

≐

\frown

⌢

\in

∈

\ni

∋

\notin

∉

\propto

∝

\vdash

⊢

\dashv

⊣

\cdot

·

\sum

∑

\prod

∏

\coprod

∐

\int

∫

\oint

∮

\sqrt

√

\skull

☠

\smiley

☺

\blacksmiley

☻

\frownie

☹

\S

§

\l

ł

\newpage

^L

\vdots

⋮

\ddots

⋱

\cdots

⋯

\hdots

⋯

\langle

⟨

\rangle

⟩

3.3.9Defining Custom Shortcuts

The Add User-defined Keybindings... menu item in the
Keybindings sub-menu of Edit selects a file
containing Racket definitions of keybindings. The file must contain a
module that uses a special keybindings language,
framework/keybinding-lang. To do so, begin your file with
this line:

Since the file contains plain Racket code, you can write keybindings
files that use DrRacket’s Extension API.
For example, the following file binds “control-t” and “control-=” to
a execute the program and open a new tab respectively, as they were used
before version 5.2.

Another example, this file rebinds “control-w” to delete the word
behind the insertion point, but it does it by setting a new key to
be an existing keyboard shortcut. If you see a key in the
Show Active Keybindings dialog (in the Keybindings
submenu of the Edit menu), then you can use its
name with the new keystroke you want, like this:

Note that DrRacket does not reload keybindings files automatically when you
make changes, so you’ll need to restart DrRacket to see changes to
the file.

3.3.10Sending Program Fragments to the REPL

Users comfortable with Emacs and the conventional Lisp/Scheme-style
of interaction with an “inferior process” commonly request
keybindings in DrRacket that send program fragments to be evaluated
at the prompt. This style of interaction is fraught with difficulty,
especially for beginners, and so DrRacket, by default, does not support
it. Instead, clicking DrRacket’s “Run” button starts with a clean slate
and sends the entire contents of the definitions window, ensuring that
the state in the REPL matches what you would expect by reading
the source code of the program.

Based on years of experience with Emacs modes, some of the authors
consider this mode of interaction also appropriate for experienced
programmers. Indeed, they go through great effort to mimic this
behavior in Emacs.

That said, some people may wish to use such incremental keystroke modes
anyway. Therefore the remainder of this section illustrates how to add such
an incremental mode for your personal use with an example keybindings
file. Specifically, the file shows how to add the ability to send
expressions piecemeal to the interactions window. It also demonstrates how
to pull together a bunch of pieces of DrRacket’s implementation and its
libraries to implement keystrokes.