Yesterday’s post on this series was almost a rant on how keyboard shortcuts don’t work on Windows. @blude on Twitter was curious to know about inserting “special characters”, which is really an euphemism for non-English letters. As a non-native English speaker, inserting such letters is something I occasionally have to do but somehow the topic didn’t cross my mind. Let’s take a look now.

A blog on operating systems, programming languages, testing, build systems, my own software projects and even personal productivity. Specifics include FreeBSD, Linux, Rust, Bazel and EndBASIC.

0 subscribers

So, how can you insert special characters that belong to another language and are not part of your physical keyboard? Obviously, you can add extra keyboard layouts to the system and switch among them. This is easy to do and manage on Windows: when there is more than one layout on the system, the notification area in the taskbar (not the tray) gains a new indicator that you can click on to select the layout. The popup even tells you that Win+Space also brings up the menu, which is a nice touch.

The keyboard layout selection menu showing entries for English and Spanish.

Switching layouts, however, is both inconvenient and insufficient. It is inconvenient because you need to memorize where the desired characters are—for example, ñ is ; and ç is \ on a US keyboard when using the ES layout—and it is insufficient because some characters are not real keys on any layout.

Let’s focus on en and em dashes because, as far as I know, these are not real keys on any keyboard layout. What if you want to follow proper English punctuation rules? How do you insert these “special” dashes?

On macOS, you have two simple options. The first is to long-press a key to get a little pop up with related characters. For example, if you long-press a, you get a tiny window to pick à or á among others. The second is to use shortcuts to insert certain characters. Want to insert an en dash? Press Option--. Want to insert an em dash? Press Shift-Option--. The critical detail to consider is that all of these work across the whole system.

On Windows… well, it’s another shit show, I’m sorry. Some apps, like Microsoft Word, have a Special Symbols feature that lets you insert these characters, and many more, and allows you to even bind shortcuts for them.

Special Characters dialog in Microsoft Word, showing the default list of entries and their shortcuts.

The problem is that this Special Symbols dialog is app-specific and most apps don’t have this feature. The alternative that you get if you search online is to use Alt-0150 to insert an en dash and Alt-0151 to insert an em dash. Isn’t that… horrifying? Are we back to the stone age? I recall using Alt-92 in my MS-DOS times to insert a backslash. And mind you, this won’t even work because you are supposed to press the numbers on the numeric keypad, which most keyboards thankfully don’t have any more.

Fortunately, there are ways out of this problem to make the whole situation more manageable.

The first is to use the emoji menu, which I’m a fan of. Press Win+; and you get a very comprehensive popup to insert emojis, GIFs, kaomojis, and… symbols! The popup even has a search feature, which is great except for the fact that it does not work across sections. That means you have to hunt-and-peek the right character with the mouse, which is a hassle.

Notepad with an overlay of the emojis menu, showing the General punctuation section in the symbols tab.

The second is to install AutoHotKey and use a trivial script to create shortcuts for the special characters that you need. For example, this configuration does the trick for my most common needs:

#SingleInstance force
#NoEnv
#Persistent

Menu, Tray, Standard

; Cheatsheet: ! Alt  ^ Ctrl  + Shift
$!+c::Send {ç}
$!+n::Send {ñ}
$!-::Send {–}
$!+-::Send {—}

Make sure to save this file as “UTF-8 with BOM” (which you can do from Notepad) or else AutoHotKey will be confused about the special characters.

I guess the summary on this topic is that I’m sad that the defaults are poor, but glad that there are multiple ways out of this problem. Windows is very customizable, as we’ll see in later posts, and it shows here.

Before we conclude, let me briefly bring up the topic of regional formats. I know these have nothing to do with input methods other than being an internationalization feature, but I wanted to cover them somewhere in this series and I don’t have sufficient text for a standalone post. All I’ll say is that it’s great that you can fix these settings in a single place in the control panel and have almost all apps comply. You could even see this in the first screenshot in this post, which showed the taskbar clock in the desired format.

The only right settings for the Regional format are to make the week start on Monday, use YYYY-MM-DD short dates, and use the 24-hour clock.

Up next will be a set of posts on the GUI. Stay tuned!