Ask Different is a question and answer site for power users of Apple hardware and software. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Every so often, I have to type some text consisting mostly of uppercase letters, but with an occasional lowercase letter—essentially, sentence case, but inverted. On Windows, I would simply have caps lock on the entire time, and pressing Shift would give me a lowercase letter. On OS X, however, if caps lock is on, I only get uppercase letters, whether Shift is pressed or not.

So, I can either hold down Shift the entire time I'm typing, letting go of it briefly to type a lowercase letter, or press Caps Lock twice for each lowercase letter I type. Neither works as well as what Windows does.

Is there a way to get Caps Lock to behave as it does on Windows, where pressing Shift while caps lock is on produces lowercase letters?

I am running 10.6.

share|improve this question
up vote 8 down vote accepted

See Update below...

It seems (only) the input source "French - Numerical" will behave like Window Caps Lock (with iNVERSE sHIFT):

keyboard layout French - Numerical

Found that info here.

But note that this will come with a rather unusual keyboard layout (at least for me).

keyboard layout French - Numerical1

keyboard layout French - Numerical2

Update: Using Ukelele this can be applied to all keyboard layouts:

Thanks Daniel for pointing the right direction.

Open Ukelele and save your (current) layout to a file (e.g. by "New from current input source" and "Save"):

New from current input source

Open the .xml file in a text editor and find the mapIndex that you want to use for the combination + (shift + caps-lock). For German I used mapIndex="0". Insert this line:

<modifier keys="shift caps"/>

Find all other occurrences of this combination and comment them out (or delete the lines). Again for German it's:

<keyMapSelect mapIndex="1">
<modifier keys="anyShift"/>
<modifier keys="shift rightShift? caps? rightOption? rightControl"/>
<modifier keys="shift rightShift? caps? rightOption rightControl?"/>
<!--<modifier keys="shift rightShift? caps rightOption? rightControl?"/> -->

shift caps

Re-open the modified file with Ukelele.

Here is a comparison of the "German" layout before and after the modification:

layout 1

layout 2

Follow the instructions in Ukelele to create a new input source (Name, ID, installation).

I didn't test the modified file, should work though.

share|improve this answer
Which suggests that it's a feature that could be added to other layouts as well. I'm sure it can be done in Ukelele, but I haven't learned how yet. – Daniel Jan 16 '12 at 21:53
Thanks @Daniel for that comment - I figured it out. I'll add the procedure to my answer. – iolsmit Jan 16 '12 at 22:35
This, however, will prevent you from using the !@#$%^&*() keys (Shifted top row number keys). To use those, I created a custom layout which replicates exactly the "PC" behaviour on OS X. Do note that this is for the US layout only, if you use another you'll have to do it yourself :) – Félix Saparelli Jun 18 '12 at 2:12

From what I have experienced, it cannot be done in OS X. None of the keyboard reconfiguration utilities I have tried seem to be able to do it either. Sorry. :(

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.