The short answer. macOS has four layers for this, and most people only know the slowest one. Hold a letter to get its accents; use Option plus a key for the symbols worth memorising; press Control-Command-Space for everything else, searchable by name; and set up text replacement for the handful of characters you type every day. The fourth layer is the one that turns a five-second lookup into a keystroke, and almost nobody uses it.
This guide covers all four, plus the reason Option sometimes produces a symbol you did not ask for and how to find out what your own keyboard actually does.
Layer 1: hold the letter
Press and hold a letter key for about a second and a small menu appears above the cursor with the accented variants of that letter, each with a number beside it. Press the number, or click, or use the arrow keys and Return. It works for the vowels, for n, c, s, y, z, and for a handful of others depending on the layout — and it works in almost every app that accepts text.
Two things to know about it.
The menu only appears where the app uses the standard text system. That covers TextEdit, Pages, Mail, Notes, Safari, Chrome, most native apps and most Electron apps. It does not appear in some terminal emulators, in some games, and in a few cross-platform apps that handle key input themselves. If holding a key just repeats the letter, the app is not participating.
Holding a key is also how you get key repeat, and the accent menu delays it. If you need a key to repeat immediately — holding an arrow key to scroll, or a letter in a game — the menu is in your way. Turn it off with:
defaults write -g ApplePressAndHoldEnabled -bool false
and log out and back in for it to take effect. To restore it, run the same command with true. This is a per-user setting, so it follows your account rather than the machine.
The accent menu is the right tool when you type an accented word once a week and cannot remember the combination. It is the wrong tool when you type é forty times an hour, which is what layer 2 is for.
Layer 2: the Option key
Every Mac keyboard has a whole second and third layer under the one printed on the keys. Option (⌥) plus a key produces one character; Option-Shift plus a key produces another. These are defined by the keyboard layout, which is the important caveat we will come to, but on a US layout the set worth memorising is small.
The five dead keys. A dead key produces nothing on its own; it waits for the next letter and combines with it. This is how most European keyboards work natively, and macOS exposes the same behaviour through Option:
| Press | Then a vowel | Gives |
|---|---|---|
Option-E |
e |
é |
Option-U |
u |
ü |
Option-N |
n |
ñ |
Option-` |
a |
à |
Option-I |
o |
ô |
The pattern covers every accented Latin letter you are likely to need: Option-E then a gives á, then i gives í. If you press a dead key and then a letter that cannot take the accent, macOS inserts the accent character followed by the letter, which is ugly but recoverable — Command-Z undoes it.
The symbols worth memorising. These are the ones that show up in ordinary writing:
| Keys | Character | Keys | Character |
|---|---|---|---|
Option-G |
© | Option-R |
® |
Option-2 |
™ | Option-8 |
• |
Option-; |
… | Option-/ |
÷ |
Option-Shift-8 |
° | Option-Shift-= |
± |
Option-= |
≠ | Option-5 |
∞ |
Option-V |
√ | Option-P |
π |
Option-W |
∑ | Option-B |
∫ |
Option-C |
ç | Option-O |
ø |
Option-A |
å | Option-M |
µ |
Option-T |
† | Option-Shift-T |
ˇ |
Option-L |
¬ | Option-Shift-K |
That last one is the Apple logo, which is in the table because people look for it, not because you should use it in a document.
Currency and typography. Option-Shift-2 gives €, Option-3 gives £, Option-Y gives ¥. Option-Shift-- gives an em dash, Option-- gives an en dash, and Option-Shift-\ gives the guillemet «, Option-\ gives ». If you write for a living, those three are worth more than the rest of the table combined.
Layer 3: the Character Viewer
Control-Command-Space opens the Emoji and Symbols viewer in any app, at the cursor. It is the same panel as Edit → Emoji and Symbols in the menu bar, and the shortcut is worth knowing because the menu item is buried in some apps and missing in others.
The panel is more capable than its name suggests:
- Search by name. Type “arrow”, “check”, “shrug”, “combining” and it finds matching characters, including emoji by their official names. This is faster than browsing for anything you can describe.
- Browse by category. The left rail lists emoji, then symbols grouped by kind: arrows, mathematical, currency, punctuation, technical, geometric shapes, and the enormous blocks of CJK and script characters.
- Favourites. Right-click any character and add it to favourites, which pins it to the top of the list. This is how you build a personal set of the twenty symbols your work actually uses.
- Recently used. The viewer remembers, so the second time you need a symbol it is usually already there.
- Character information. Select a character and the panel shows its Unicode name and code point, which is what you need when you are trying to identify an unlabelled glyph you found in a document.
- Skin tone and variants. For emoji that have them, the panel offers the variants when you select the base character, so you do not have to hunt for the right one.
Double-click to insert, or drag it into the document. The viewer stays open while you work, which is the correct behaviour: leave it open on a second display while you are typesetting and it becomes a palette rather than a lookup.
Layer 4: text replacement
This is the layer almost nobody uses, and it is the one that changes how much time this costs you.
System Settings → Keyboard → Text Replacement maps a short string to a longer one, system-wide, in every app that uses the standard text system. The intended use is “omw” → “On my way!”, but the same mechanism handles symbols:
| Type | Get |
|---|---|
;;em |
— (em dash) |
;;deg |
° |
;;x |
× |
;;c |
© |
;;r |
® |
;;tm |
™ |
;;euro |
€ |
;;check |
✓ |
Two things make this work well. First, use a prefix that cannot occur in normal prose — ;; is the convention because no English word contains it — otherwise the replacement fires in the middle of a sentence you did not mean to change. Second, the replacement is exact and immediate, so it works while typing at speed in a way that a character palette never will.
Text replacement syncs through iCloud to your other devices if you use the same Apple ID, which means a set of symbols defined on the Mac is available on the iPhone keyboard too. That is a genuine advantage over a third-party snippet tool, which is usually per-device.
For more than a dozen snippets, or for snippets that need to expand to multi-line text with a cursor position in the middle, a dedicated expansion tool is better. Espanso is the open-source option and works by watching for trigger strings, with YAML files for the definitions and support for dates, clipboard content and shell output inside the replacement. It is more capable and less integrated than the system feature, and the trade is worth it past a certain volume.
Adding input sources for other scripts
If you type in more than one script, System Settings → Keyboard → Input Sources is where you add them. Each source is a complete layout with its own Option layer, and the menu bar shows which one is active.
Three sources are worth knowing about even if you only type English:
Unicode Hex Input. Add it, switch to it, then hold Option and type a four-digit code point: Option-00E9 gives é, Option-20AC gives €, Option-00B0 gives °. This is the escape hatch for any character you can look up but cannot otherwise produce, and it is how you type something you have only seen as a code point.
ABC — Extended. A layout with more characters directly reachable and a different Option layer. Useful if you type a lot of European languages and do not want to remember dead keys.
Keyboard Viewer. Not an input source but found in the same menu: turn on Show Input menu in menu bar, then open Show Keyboard Viewer. Hold Option and the on-screen keyboard redraws to show exactly what each key produces in the current layout. This is the answer to “what does Option do on my keyboard”, and it is the single most useful diagnostic in this article.
Combining marks, and why two identical-looking letters differ
Some characters are not single code points at all. Unicode has a block of combining diacritical marks — accents designed to be typed after a base letter and rendered on top of it — and macOS will happily produce them. e followed by U+0301 renders exactly like é, and is a different character from é as far as every piece of software is concerned.
You can type one deliberately: search the Character Viewer for “combining acute” and insert it after the letter it should sit on. You will rarely want to. The reason to know about them is that they explain a class of bug that otherwise looks impossible:
- A search for
cafédoes not find the file namedcafé, because one is composed and the other is not. - A password typed correctly is rejected, because the character came from a document that used the decomposed form.
- A sort order looks wrong, because the accented letters sort after
zrather than next toe.
macOS mostly hides this. APFS treats the composed and decomposed forms of a name as the same name, so you cannot create two files that differ only that way, and most text fields normalise on input. The exceptions are files that came from another system, text pasted from PDFs, and anything you typed with a combining mark on purpose. If a search fails on a word with an accent, retype it rather than assuming the file is gone.
When a character comes out wrong
Four things go wrong often enough to be worth naming, and each has a specific fix.
Smart substitutions. macOS rewrites what you type as you type it: straight quotes become curly, two hyphens become an em dash, three periods become an ellipsis. That is correct in prose and wrong everywhere else. In TextEdit it is Edit → Substitutions, and every app with a text field has its own version of the same setting. If a code snippet breaks when you paste it into a file, this is the first thing to check.
Mojibake. A file saved in one encoding and read in another shows é where é should be, or ’ where an apostrophe should be. Nothing is lost — the bytes are intact — the reader is just interpreting them under the wrong assumption. In TextEdit, File → Open and choose the encoding explicitly. In Terminal, iconv -f ISO-8859-1 -t UTF-8 file.txt converts it. The pattern à followed by a punctuation character is the signature of UTF-8 being read as Latin-1, and it is worth recognising on sight.
Ligatures and non-breaking spaces from PDFs. Copying text out of a PDF often brings fi (a single character) instead of fi, and a non-breaking space instead of a space. Both look identical and both break search, find-and-replace and code. Option-Space is how you type a non-breaking space deliberately; to find one you already have, paste the text into a terminal and run it through hexdump -C, where c2 a0 is the giveaway.
Missing glyphs. If a font has no glyph for a character, you get a hollow box or a question mark. The character is fine; the font is not. Switch the selection to a font that covers the range — the system falls back automatically in most apps, but a document with an explicit font set will not.
Typing in a second script
Everything above assumes a Latin keyboard. If you type Chinese, Japanese or Korean, the press-and-hold accent menu does not apply — those input methods have their own candidate windows — and the Option layer is mostly inert.
The mechanics that matter:
- Switch input sources with
Control-Space(the previous source) orControl-Option-Space(the next), if you enable those shortcuts in Keyboard → Keyboard Shortcuts → Input Sources. Some people map the switch toCaps Lockinstead, which is a single key and much faster. - The candidate window is driven from the keyboard: number keys select, arrows move,
Escapedismisses, andSpacecommits the highlighted candidate. Nothing about it needs a pointer. - Live conversion — typing romaji or pinyin and having the candidate list update as you go — is the mode to use if you type more than a sentence at a time; the alternative, converting after the fact, is what makes people think input methods are slow.
The Character Viewer is still useful in these scripts, because it lets you search by Unicode name for a character you can describe but cannot type — the various brackets, the CJK punctuation that differs from its Latin lookalike, and the full-width forms that a document sometimes requires.
Why Option does the wrong thing
If you follow a guide that says Option-G is © and get something else, the cause is the keyboard layout, not the guide.
Option combinations are defined per layout, not per physical key. On a German layout the key that sits where Y is on a US keyboard produces Z, so every Option combination involving that key differs. On a UK layout Shift-3 is £ rather than #, and several punctuation keys move. On a French AZERTY layout the digits are on the shifted layer, so Option-2 is not the trademark sign because 2 itself is not where you think.
The fix is not to memorise a different table. It is to open Keyboard Viewer, hold Option, and read what your layout actually produces — or to add a second input source and switch when you need a specific character. Both are faster than guessing.
There is a second, less common cause: a third-party keyboard remapper. BetterTouchTool and similar tools can remap Option itself, and a remap that turns Option into a modifier for something else will break every combination in this article. If Option has stopped working everywhere rather than in one app, check what is intercepting it.
Special cases worth knowing
Passwords. A password field may reject characters your keyboard can type, or accept them and then fail to let you type them on another device. If you generate a password containing an em dash, you will regret it on a phone. Stick to the printable ASCII range for anything you have to type by hand, and let a password manager handle the rest.
Code and configuration files. In a source file, a “smart quote” is a syntax error, and an em dash in a JSON string is legal but will confuse whatever reads it. Turn off smart quotes and smart dashes in the app’s settings while writing code — in TextEdit it is Edit → Substitutions — and use the plain Option-] for a curly quote deliberately when you actually want one.
Terminal. Most terminal emulators pass Option combinations through to the shell by default, or map Option to Esc for Meta-key bindings. That means Option-E in Terminal may not produce a dead key at all. Both iTerm2 and Terminal have a setting for this — “Use Option as Meta key” — and which way you want it depends on whether you are writing prose or running Emacs bindings.
Tools for the edges
Most people need nothing beyond the four layers above. These cover the cases where they run out.
| Tool | What it solves |
|---|---|
| Ukelele | Build a custom keyboard layout when the character you need has no combination at all |
| Espanso | Text expansion with dates, clipboard and shell output inside the replacement |
| Raycast | Emoji and symbol search in the same launcher you use for everything else |
| FunKey | Shows which characters a key produces as you press it — useful when learning a layout |
| KeyCastr | On-screen keystroke display, for recording tutorials where viewers need to see the dead keys |
FAQ
Is there a way to type an emoji without the viewer?
Text replacement is the practical answer: map ;;shrug to the shrug emoji and it types like a word. Some apps also autocomplete emoji from : codes the way Slack does, but that is per-app behaviour rather than a macOS feature.
Why does holding a key do nothing in my browser? Some web apps, and some browsers on some pages, suppress the press-and-hold menu because they treat a held key as a repeat. Try the same key in TextEdit to confirm the system feature works, then use the Option combination or the Character Viewer in the browser instead.
Can I type a character by its Unicode name? In the Character Viewer’s search field, yes — it matches names as well as categories. There is no system-wide “type the name and press a key” feature, though a launcher with a Unicode extension can approximate it.
Do these shortcuts work in Windows on a virtual machine?
No. A virtual machine passes keystrokes to the guest OS, so Option is Alt there and the macOS Option layer does not apply. Use the guest OS’s own input method, or type the character on the host and paste it.
What about the Touch Bar?
On the models that had one, the Touch Bar’s emoji picker was a shortcut to the same Character Viewer. The viewer itself is unchanged, and the Control-Command-Space shortcut works on every Mac regardless of hardware.
Why does a copied symbol sometimes paste as a different one? Because the font at the destination has no glyph for it, so the text system substitutes a similar-looking character, or the destination app normalises the text on paste. Paste into TextEdit first to see what actually arrived; if it survives there unchanged, the substitution happened in the second app.
Can I type a character by holding a key on an external keyboard?
Yes, the press-and-hold menu is a macOS behaviour rather than a laptop one, and it works with any keyboard the system recognises. What differs is the Option layer, which follows the layout the keyboard reports — a keyboard with a German layout produces German Option combinations even when plugged into a Mac set to US English, until you add the matching input source.
Frequently Asked Questions
How do I type an emoji on a Mac?
Press Control-Command-Space in any app to open the Emoji and Symbols viewer, then type a word to search — 'shrug', 'check', 'thumbs' all work — or browse the categories. Double-clicking an item inserts it at the cursor. The same panel is in the Edit menu of most apps as Emoji and Symbols, which is how you reach it when a shortcut is being intercepted.
How do I type é, ñ or ü on a Mac?
Two ways. Hold the base letter for about a second and a small menu appears above the cursor with the accented variants, each numbered so you can press the number or click; or use a dead key — Option-E then E gives é, Option-N then N gives ñ, Option-U then U gives ü. The dead-key method is faster once it is in your fingers because it needs no waiting and no looking.
Why does Option-G give me something different than expected?
Because Option combinations are defined per keyboard layout, not per physical key. On a US layout Option-G is the copyright sign; on a German layout the same physical key produces a different result because the base character under it is different, and on a UK layout several punctuation keys move. If a combination does not do what a guide says, open the Keyboard Viewer and hold Option to see what your actual layout produces.
Can I make my own shortcuts for symbols I type often?
Yes, with text replacement: System Settings → Keyboard → Text Replacement maps a short string to a longer one system-wide, including symbols and emoji. Type three characters and get the character back. It works in every app that uses the standard text system, which is nearly all of them, and it is the right tool for the dozen symbols a particular job needs rather than for the whole Unicode table.
How do I type a character that has no shortcut at all?
Add the Unicode Hex Input source in System Settings → Keyboard → Input Sources, switch to it, and hold Option while typing the character's four-digit code point — Option-00E9 for é, Option-20AC for the euro sign. For code points above FFFF you need a different route, such as the Character Viewer's search or a text replacement, because the hex input handles four digits.


