If you use Linux (though not an exact answer), I recommend that you map Caps Lock to Ctrl and then use xcape to adjust Caps Lock behavior as follows:
- when pressed by itself, Caps Lock behaves like Esc;
- when combined with another key, Caps Lock behaves like Ctrl.
So you can press both Esc and a Ctrl combination more easily than any other solution.
To remap the keys, try this command in Linux:
setxkbmap -option '' -option 'ctrl:nocaps'
It resets already existing options first and then set Caps Lock as an additional Ctrl. I know, weird name. If you don't want to reset options first, omit -option ''. It may be useful if you have other options set in another place.
There are other options related to Esc:
$ grep escape /usr/share/X11/xkb/rules/base.lst
800: caps:swapescape Swap ESC and Caps Lock
801: caps:escape Make Caps Lock an additional ESC
xcape allows you to use a modifier key as another key when pressed and released on its own.
This is my .xinitrc:
... snip ...
setxkbmap -option '' -option 'ctrl:nocaps'
pkill xcape
xcape
exec xmonad