Typing weird symbols

Writing with 🆕🐜🐜

In principle this is a page for absolutely anything about good fonts and typographical style on the internet. In practice, a small subset of that information is stuff that I need regularly and is hard to search for or remember; Most of that is about typing wacky characters. That is here. The remainder is about exotic LaTeX UTF errors. tl;dr typing fancy punctuation is easy enough except in Windows for some reason. In Linux I like the version using the Compose key.

For actual information about typography more broadly construed, see Matthew Butterick’s Practical Typography, which is a whole online book making an eloquent and detailed case for using the web for reading, which sounds nice but sounds like it might cut into screen time allocated to Candy Crush. If you need fonts that can actually display the characters you have just input, see fonts.

🏗 make or include a keyboard shortcut table

🏗 which things apply only to US-English keyboards?

Needful characters

Windows is, AFAICT, simply taking the piss here Straight and curly quotes are entered by numerical codes. You could possibly define better custom shortcuts using PowerToys Keyboard Manager utility. Or automate it away using typgraphical macros.

Quotes, apostrophes

Opening single curly quote, ‘
⎇ + ] (Mac)
Compose + < ' (Gnome)
AltGr + 9 (Any X?)
Alt 0145 (Windows)
Closing single curly quote, ’
⎇ + } (Mac)
Compose + > ' (Gnome)
AltGr + 0 (Any X?)
Alt 0146 (Windows)
Opening double curly quote, “
Alt + [ (Mac)
Compose + < " (Gnome)
Alt 0147 (Windows)
Closing double curly quote, ”
⎇ + { (Mac)
Compose + > " (Gnome)
Alt 0148 (Windows)
Opening low quote, „
Compose + , " (Ubuntu)

Dashes and spacers

en dash, —
⎇ - (Mac)
Compose - - . (Gnome)
em dash, —
⎇ _ (Mac)
Compose - - - (Gnome)
Ellipsis, …
⎇ ; (Mac)
Compose .. (Gnome)
Non-breaking space
⎇ <space> (Mac)
Compose <space> <space> (Gnome)

This last one is afaict mostly needed to avoid widows and such in titles, but hopefully we can all avoid that hack now thanks to CSS widows and orphans properties which solve this at a styling level. Although some people observe even more prescriptions than me, like no line breaks after roman numerals or whatever.

Compose keys on X Windows

Bonus time: Where is that compose key?

Using Ubuntu? The traditional instructions about compose keys, don’t work per default on recent versions.

You can re-enable Compose using gnome-tweaks

sudo apt install gnome-tweak-tool

Then launch Tweaks

  1. Go to Keyboard & Mouse.
  2. Choose something other than disabled for the Compose Key option.

I set Compose to be Capslock because, like hundreds of millions of computer users, I have never pressed that key deliberately to get capital letters and it seems unlikely that this will change in the coming decades.

This all means that e.g I now type ü as Capslock+" u and as Capslock + < ". Which is reasonably mnemonic if you look at a US keyboard layout. Bonus: disables caps lock.

As of the last few days, my computer starts forgetting the compose key settings when it wakes from sleep. Putting the following command in the X11 start up apps list does the job:

setxkbmap -option compose:caps

Now I can treat myself to a caret.

In fact for me, as of recent history, this setting has joined a long list of settings that my laptop now forgets after waking from sleep. So, the downside is that now you can end up with the Caps Lock key actually locking in into ALL CAPITALS BECAUSE YOU ACTUALLY SOMETIMES PRESS IT NOW SO HOW DO YOU DISABLE CAPS LOCK? There is an annoying workaround:

You can run the setleds -caps command from within a console. To get to a console, press Ctrl+Alt+F1, and press Ctrl+Alt+F7 to get back to where you were.

I’ve also seen the following recommended:

xmodmap -e "clear Lock"

You can alternatively (additionally?) enable ISO_Level3_Shift which does a similar thing AFAICT but with less configurability and less documentation online

Launch GNOME Tweaks

  1. Go to Keyboard & Mouse
  2. Click on Additional Layout Options
  3. Expand Miscellaneous compatibility options, check Enable extra typographic characters

It is not clear to me how I enter Greek characters using either of the above methods. There is something called a dead_greek key? Is that real?

Or I could memorize some 4-digit unicode code points and enter characters via Ctrl-Shift-U. That would be a great use of my brief and precious time on this sweet, sweet earth.

But which Compose shortcuts exists? There is no canonical list and you kinda need to guess what happens on your local computer might vary. The Gtk list is a good start. There is an encyclopedia of these symbols at fsymbols.com, although only a subset of the shortcuts listed there work on my config. And you can, hypothetically, define your own. The wikipedia list has the most common examples. The local version is supposedly in a file like /usr/share/X11/locale/am_ET.UTF-8/Compose but for me this includes mostly Ethiopean input methods and not the basic stuff, so I give up for now.


In every environment, including ones that don’t have good emoji support or are locked down by sysadmins who hate fun, you can use the emoji search page and reference emojipedia, which is a votimg member of the unicode consortium according to wikipedia, so they must be authoritative.

Sometimes it is hard to type or view emoji. The :emoji: syntax allows us to refer to them via “shortcodes” such as :roller_coaster: for 🎢.

I’m not sure what, if any, the canonical list of these shortcodes is but the emoji cheatsehet](https://www.webfx.com/tools/emoji-cheat-sheet/) will do. The github emoji system is aligned to that, I learned via emojify. For this blog, the ugly-lookin’ and slightly divergent pandoc list was handy. One can also use emojipedia on macOS which is an OS-integrated dictionary of emoji.

Also important: sardonically rating emoji: ants, horses.


In recent Ubuntu emoji input is built-in via Emoji picker (right click), although AFAICT only on system dialogues, which excludes, e.g. the text editors and browsers where you actually need this stuff. There is also the emoji hotkey, defaulting to Ctrl+Shift+E which enables a slightly confusing the underdocumented ibus emoji search widget which for all that is more reliable and usable than the picker etc. However that shortcut key is annoying.

There’s also Character Map and Characters, two more-or-less interchangeable apps to find and type characters for you. Characters is nicer-lookin’ but has awful search, whereas Character Map has merely bad search.

The emoji are, I think, supplied via Google’s Noto font in its emoji flavour.


You can open the emoji typer with ⌘ ⌅ Space


Very built-in these days, but I’m sad that cute apps like Dango which did deep emoji learning, never got traction.



Finding that weird character

There is a nifty web app which solves a lot of these problems for one, called tell.wtf. Give it a go. You can scribble a character and it tells you the unicode translation.

Similarly, shapecatcher lets you sketch it in the browser.

Unicode character search and Unilist and copybar all provide classic style search. Probably the most popular is getemoji, the emoji-finding website from emojipedia.

If you then need to encode it to code points or UL encoding or whatever, see the many web-friendly encodings in the amusing Cryptii app and r12a >> Unicode code converter.

Advanced character molestation

Combatwombat’s Lunicode.js is full of programmatic unicode mangling tricks, e.g.

Wonky alternatives to the usual characters.

చօղҟվ ąӀէҽɾղąէìѵҽʂ էօ էհҽ մʂմąӀ çհąɾąçէҽɾʂ.

One can play with it at Lunicode.com.

Crucially, it supports Zalgo text, and various other stupid stunts from /r/Unicode/. In fact Zalgo text is a cottage industry, although I’m more of a trap text person myself obvs.


Fun fact: It takes reading of the spec to discover that Emoji are banned from YAML 1.1, which is an important text encoding system. You can use escape sequences, but only in double quoted strings.

So, to write the subtitle of this page for YAML 1.1, you could say

"Writing with \U0001f195\U0001f41c\U0001f41c"

I think this is fixed in the more recent YAML 1.2.

No comments yet. Why not leave one?

GitHub-flavored Markdown & a sane subset of HTML is supported.